Django微信支付回调验证签名,返回信息格式

需求

微信官方提示在这里插入图片描述需要签名验证,可是在官网上却没找到签名验证的方法。
支付回调若是得不到正确回复,就会多次请求回调微信官方文档-页面底部

解决

在支付回调接口中,对返回的数据按照 微信的签名要求,注意:空值和key为sign\sign_type的值 不参与签名。 代码如下(上篇中有完整的微信支付代码):

def wx_sign(self, param):
        stringA = ''
        ks = sorted(param.keys())
        for k in ks:
        	#在验签时使用,过滤字段
        	if k != 'sign' and k != 'sign_type' and param[k]:
	            data = param[k]
	            stringA += (k + '=' + str(data) + '&')

        stringSignTemp = stringA + "key=" + self.MCHKEY
        # md5加密
        hash_md5 = hashlib.md5(stringSignTemp.encode('utf8'))
        sign = hash_md5.hexdigest().upper()
        return sign

回调返回数据格式:

data1 = {
           'return_code': 'SUCCESS',
           'return_msg': 'OK'
       }

具体使用(支付回调api):

class alter_order_status(APIView):
	#指定解析类型,为了读取回调的xml
    parsers.XMLParser.media_type = 'text/xml'
    parser_classes = [parsers.XMLParser]

    # @staticmethod
    def post(self, request):
        # 获取订单号,通过类型来区分,订单号为 type_orderId
        print(request.data)
        if request.data["return_code"] == "SUCCESS" and request.data["result_code"] == "SUCCESS":
            # 验签 把返回数据除去sign signType 空值,重新签名
            wxpay = WxPay(good_info={})
            wxpay.MCHKEY = MCHKEY
            sign = wxpay.wx_sign(request.data)
            print('sign:' + sign)
            #验签
            if sign == request.data['sign']:
            	data1 = {
                        'return_code': 'SUCCESS',
                        'return_msg': 'OK'
                    }
            	data2 = {
                        'xml': data1
                    }

        		return JsonResponse(data=data2)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值