import xmltodict
from django.http import HttpResponse
def notify(request):
"""
<xml><appid><![CDATA[wx62f4cad175ad0f90]]></appid>
<attach><![CDATA[test]]></attach>
<bank_type><![CDATA[ICBC_DEBIT]]></bank_type>
<cash_fee><![CDATA[1]]></cash_fee>
<fee_type><![CDATA[CNY]]></fee_type>
<is_subscribe><![CDATA[N]]></is_subscribe>
<mch_id><![CDATA[1499579162]]></mch_id>
<nonce_str><![CDATA[963b42d0a71f2d160b3831321808ab79]]></nonce_str>
<openid><![CDATA[o9coS0eYE8pigBkvSrLfdv49b8k4]]></openid>
<out_trade_no><![CDATA[77c4f4aaf484c74b597bdf7856ec8cbf]]></out_trade_no>
<result_code><![CDATA[SUCCESS]]></result_code>
<return_code><![CDATA[SUCCESS]]></return_code>
<sign><![CDATA[E252025255D59FE900DAFA4562C4EF5C]]></sign>
<time_end><![CDATA[20180624122501]]></time_end>
<total_fee>1</total_fee>
<trade_type><![CDATA[JSAPI]]></trade_type>
<transaction_id><![CDATA[4200000146201806242438472701]]></transaction_id>
</xml>
"""
err_resp = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[Error]]></return_msg></xml>"
success_resp = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>"
try:
msg = request.body.decode('utf-8')
logger.info('微信回调{}'.format(msg))
request_dict = dict(xmltodict.parse(msg))
logger.info(request_dict)
"""
request_dict = {
"xml": {
"openid": "ooNwr5FjEEA1xBr5xL5UeEtJfpAc",
"trade_type": "JSAPI",
"cash_fee_type": "CNY",
"nonce_str": "cf9anQ80ZszBMEuyG6KIAvN1xdVkwm",
"time_end": "20200520162946",
"err_code_des": "SUCCESS",
"return_code": "SUCCESS",
"mch_id": "1525350361",
"settlement_total_fee": "101",
"sign": "F441D89022640568215EE87F2FB62A30",
"cash_fee": "101",
"is_subscribe": "Y",
"return_msg": "OK",
"fee_type": "CNY",
"bank_type": "CMC",
"attach": "sandbox_attach",
"device_info": "sandbox",
"out_trade_no": "77c4f4aaf484c74b597bdf7856ec8cbf",
"result_code": "SUCCESS",
"total_fee": "101",
"appid": "wxcc4dfd0d59dad392",
"transaction_id": "4807228149220200520162946337048",
"err_code": "SUCCESS"
}
}
"""
except Exception as e:
logger.error("支付回调数据解析错误{}".format(e))
return HttpResponse(err_resp, content_type='text/xml', status=200)
return_code = request_dict['xml']['return_code']
if return_code == 'FAIL':
#支付结算失败
return HttpResponse(err_resp, content_type='text/xml', status=200)
elif return_code == 'SUCCESS':
try:
#处理支付成功逻辑
return HttpResponse(success_resp, content_type='text/xml', status=200)
except Exception as e:
return HttpResponse(err_resp, content_type='text/xml', status=200)
Django微信小程序支付回调处理
最新推荐文章于 2023-03-23 11:51:18 发布