在当今数字化的商业世界中,微信支付已经成为了主流的支付方式之一。对于开发者而言,如何方便快捷地在 Python 项目中对接微信支付是一个常见的需求。weixin
库为我们提供了一种便捷的方式来实现这一目标。本文将详细介绍如何使用 weixin
库中的 WeixinPay
类完成微信支付的一系列操作,包括支付、查询和退款。
weixin
库使用 pip
命令安装 weixin
库:
pip install weixin
WeixinPay
并初始化在 Python 代码中,我们需要导入 WeixinPay
类并进行初始化。以下是示例代码:
from weixin import WeixinPay
# 初始化 WeixinPay 对象
appid = 'your_appid'
# 微信支付appid
mchid = 'your_mch_id'
# 商户id
api_key = 'your_api_key'
# 商户api密钥
cert_path = 'path/to/your/cert.pem'
# 证书存放路径
key_path = 'path/to/your/key.pem'
# 证书存放路径
weixin_pay = WeixinPay(
appid=appid,
mchid=mchid,
api_key=api_key,
cert_path=cert_path,
key_path=key_path
)
使用 WeixinPay
对象发起支付请求,生成预支付订单。以下是扫码支付(NATIVE 支付)的示例代码:
# 支付参数
out_trade_no = 'your_out_trade_no' # 商户订单号,需保证唯一
total_fee = 1 # 订单总金额,单位为分
body = '商品描述信息' # 商品描述
notify_url = 'your_notify_url' # 支付结果通知 URL
# 发起支付请求
result = weixin_pay.unifiedorder(
out_trade_no=out_trade_no,
total_fee=total_fee,
body=body,
notify_url=notify_url,
trade_type='NATIVE'
)
if result.get('return_code') == 'SUCCESS' and result.get('result_code') == 'SUCCESS':
code_url = result.get('code_url')
print(f"支付二维码链接:{code_url}")
else:
print(f"支付请求失败,错误信息:{result.get('return_msg')}")
在支付过程中,我们可能需要查询订单的支付状态。以下是查询订单的示例代码:
# 要查询的订单号
out_trade_no = 'your_out_trade_no'
# 查询订单
result = weixin_pay.orderquery(out_trade_no=out_trade_no)
if result.get('return_code') == 'SUCCESS' and result.get('result_code') == 'SUCCESS':
trade_state = result.get('trade_state')
print(f"订单状态:{trade_state}")
else:
print(f"订单查询失败,错误信息:{result.get('return_msg')}")
如果需要对已支付的订单进行退款操作,可以使用以下代码:
# 要退款的订单号
out_trade_no = 'your_out_trade_no'
# 退款金额,单位为分
refund_fee = 1
# 退款单号,需保证唯一
out_refund_no = 'your_out_refund_no'
# 发起退款请求
result = weixin_pay.refund(
out_trade_no=out_trade_no,
out_refund_no=out_refund_no,
total_fee=total_fee,
refund_fee=refund_fee
)
if result.get('return_code') == 'SUCCESS' and result.get('result_code') == 'SUCCESS':
refund_id = result.get('refund_id')
print(f"退款申请成功,退款 ID:{refund_id}")
else:
print(f"退款申请失败,错误信息:{result.get('return_msg')}")
from weixin import WeixinPay
# 初始化 WeixinPay 对象
appid = 'your_appid'
mchid = 'your_mch_id'
api_key = 'your_api_key'
cert_path = 'path/to/your/cert.pem'
key_path = 'path/to/your/key.pem'
weixin_pay = WeixinPay(
appid=appid,
mchid=mchid,
api_key=api_key,
cert_path=cert_path,
key_path=key_path
)
# 支付参数
out_trade_no = 'your_out_trade_no'
total_fee = 1
body = '商品描述信息'
notify_url = 'your_notify_url'
# 发起支付请求
result = weixin_pay.unifiedorder(
out_trade_no=out_trade_no,
total_fee=total_fee,
body=body,
notify_url=notify_url,
trade_type='NATIVE'
)
if result.get('return_code') == 'SUCCESS' and result.get('result_code') == 'SUCCESS':
code_url = result.get('code_url')
print(f"支付二维码链接:{code_url}")
# 查询订单
query_result = weixin_pay.orderquery(out_trade_no=out_trade_no)
if query_result.get('return_code') == 'SUCCESS' and query_result.get('result_code') == 'SUCCESS':
trade_state = query_result.get('trade_state')
print(f"订单状态:{trade_state}")
# 发起退款请求
if trade_state == 'SUCCESS':
refund_fee = 1
out_refund_no = 'your_out_refund_no'
refund_result = weixin_pay.refund(
out_trade_no=out_trade_no,
out_refund_no=out_refund_no,
total_fee=total_fee,
refund_fee=refund_fee
)
if refund_result.get('return_code') == 'SUCCESS' and refund_result.get('result_code') == 'SUCCESS':
refund_id = refund_result.get('refund_id')
print(f"退款申请成功,退款 ID:{refund_id}")
else:
print(f"退款申请失败,错误信息:{refund_result.get('return_msg')}")
else:
print(f"订单查询失败,错误信息:{query_result.get('return_msg')}")
else:
print(f"支付请求失败,错误信息:{result.get('return_msg')}")
weixin
库会自动处理签名验证,但在实际应用中,仍需确保签名的正确性,以防止数据被篡改。通过以上步骤,你可以使用 weixin
库中的 WeixinPay
类轻松实现微信支付的支付、查询和退款功能。希望本文对你有所帮助!