python django 微信支付成功回撥url(notify_url)
微信官方文件:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_7
首先 這個 notify_url 有倆個要求
1.公網能直接訪問的
2.不能攜帶引數 (比如你的訂單id)
返回的內容微信請求的內容,為xml格式
<xml>
<appid><![CDATA[wx2421b1c4370ec43b]]></appid>
<attach><![CDATA[支付測試]]></attach>
<bank_type><![CDATA[CFT]]></bank_type>
<fee_type><![CDATA[CNY]]></fee_type>
<is_subscribe><![CDATA[Y]]></is_subscribe>
<mch_id><![CDATA[10000100]]></mch_id>
<nonce_str><![CDATA[5d2b6c2a8db53831f7eda20af46e531c]]></nonce_str>
<openid><![CDATA[oUpF8uMEb4qRXf22hE3X68TekukE]]></openid>
<out_trade_no><![CDATA[1409811653]]></out_trade_no>
<result_code><![CDATA[SUCCESS]]></result_code>
<return_code><![CDATA[SUCCESS]]></return_code>
<sign><![CDATA[B552ED6B279343CB493C5DD0D78AB241]]></sign>
<sub_mch_id><![CDATA[10000100]]></sub_mch_id>
<time_end><![CDATA[20140903131540]]></time_end>
<total_fee>1</total_fee>
<coupon_fee><![CDATA[10]]></coupon_fee>
<coupon_count><![CDATA[1]]></coupon_count>
<coupon_type><![CDATA[CASH]]></coupon_type>
<coupon_id><![CDATA[10000]]></coupon_id>
<coupon_fee><![CDATA[100]]></coupon_fee>
<trade_type><![CDATA[JSAPI]]></trade_type>
<transaction_id><![CDATA[1004400740201409030005092168]]></transaction_id>
</xml>
如果支付成功了 會返回return_code 為 SUCCESS
失敗時 return_code為 FAILD
詳細程式碼 views.py
import xml.etree.ElementTree as et
def payback(request):
_xml = request.body
#拿到微信傳送的xml請求 即微信支付後的回撥內容
xml = str(_xml, encoding="utf-8")
print("xml", xml)
return_dict = {}
tree = et.fromstring(xml)
#xml 解析
return_code = tree.find("return_code").text
try:
if return_code == 'FAIL':
# 官方發出錯誤
return_dict['message'] = '支付失敗'
#return Response(return_dict, status=status.HTTP_400_BAD_REQUEST)
elif return_code == 'SUCCESS':
#拿到自己這次支付的 out_trade_no
_out_trade_no = tree.find("out_trade_no").text
#這裡省略了 拿到訂單號後的操作 看自己的業務需求
except Exception as e:
pass
finally:
return HttpResponse(return_dict, status=status.HTTP_200_OK)
其實不需要return Response任何東西 微信不會對這個做處理
url.py
from .views.py import payback
url(r'^afterpay', payback),