在Django中使用微信支付SDK
首先,需要下载并安装微信支付SDK,可以使用以下命令:
pip install wxpay-sdk
在Django项目的settings.py中加入以下配置:
WX_APP_ID = 'your_app_id' WX_MERCHANT_ID = 'your_merchant_id' WX_MERCHANT_KEY = 'your_merchant_key' WX_NOTIFY_URL = 'https://your_notify_url.com/wxpay_notify'
其中,WX_APP_ID为微信支付的App ID,WX_MERCHANT_ID和WX_MERCHANT_KEY为商户ID和商户密钥,在微信支付的商户平台上获取。WX_NOTIFY_URL为支付成功后的回调地址。
接着,在views.py中编写支付的代码:
from wxpay import WxPay, UnifiedOrder def pay(request): wxpay = WxPay(app_id=settings.WX_APP_ID, mch_id=settings.WX_MERCHANT_ID, key=settings.WX_MERCHANT_KEY) order = UnifiedOrder( body='皮蛋编程', out_trade_no='201909080001', total_fee=1, notify_url=settings.WX_NOTIFY_URL, trade_type='NATIVE', product_id='pidancode.com', ) resp = wxpay.unified_order(order) if resp['return_code'] == 'SUCCESS' and resp['result_code'] == 'SUCCESS': code_url = resp['code_url'] # 将code_url返回给前端,生成支付二维码 else: # 支付失败处理
以上代码中,使用WxPay类初始化微信支付SDK,并创建一个UnifiedOrder对象。其中,body为商品描述,out_trade_no为商户订单号,total_fee为支付金额(单位为分),notify_url为回调地址,trade_type为交易类型(此处为扫码支付),product_id为商品ID。
调用wxpay.unified_order方法,将统一下单请求发送给微信支付接口,并得到响应。当响应中的return_code和result_code均为SUCCESS时,表示支付成功,可以将code_url返回给前端生成支付二维码;否则,支付失败需要进行相应的处理。
最后,在回调函数中处理支付成功后的业务逻辑:
from django.http import HttpResponse from wxpay import parse_xml, PaymentNotify def wxpay_notify(request): xml = request.body.decode('utf-8') data = parse_xml(xml) wxpay = WxPay(app_id=settings.WX_APP_ID, mch_id=settings.WX_MERCHANT_ID, key=settings.WX_MERCHANT_KEY) notify = PaymentNotify(xml) if notify.is_valid(): out_trade_no = notify.out_trade_no total_fee = notify.total_fee # 处理支付成功后的业务逻辑 return HttpResponse('SUCCESS') else: return HttpResponse('FAIL')
在回调函数wxpay_notify中,首先将接收到的xml数据解析成字典对象data。然后使用WxPay类初始化微信支付SDK,在创建PaymentNotify对象时将xml数据传递给它,判断是否为有效的支付结果。如果有效,则从notify对象中获取商户订单号out_trade_no和支付金额total_fee,进行相应的业务逻辑处理;否则,返回FAIL表示处理失败。
在Django项目中使用微信支付SDK,以上就是一个基本的示例。注意,还应该设置微信支付接口的IP白名单,以及相关参数的安全性处理等。
相关文章