使用DRF+python-alipay-sdk在支付宝POST回调时的sign_type报错问题

142 阅读1分钟

image.png

image.png

如原作者所说print request.data的数据是这样的

data <QueryDict: {'gmt_create': ['2024-03-09 14:02:47'], 'charset': ['utf-8'], 'gmt_payment': ['2024-03-09 14:02:52'], 'notify_time': ['2024-03-09 14:02:53'], 'subject': ['an order'], 'sign': ['N1OyRNQWW7/pxNgibVpz7uT5h68kYFewVvdm8Wh3eQ63OHOfWnX9aNwgnWF5lsA0ACCz1Z8l8ye+jVYRb77cwSrrXdU3HMV2Wa88zxfEuFomlGjskjJxgcitFaM1nvcJ6aBxv38XH68VP4dNnDr6aX10G2g0aeOxzuyZs3RFIeCiP0iXHqGGNqkck/y8tfgv7Elv3iPBUEJQTaH30QSHy2k57a6y6PhCSJHdeneUDVzE5Xd/+Y+z3gQAr+UC09t8TeNoqt0fBW7knfQMbrfDyP1AyMwSE9+UFRufPn80RADO/3FLXWuXLFt8T+DP1nQlYiTX8f47PrdVVNVzTSzuOA=='], 'buyer_id': ['2088722031447330'], 'invoice_amount': ['118.33'], 'version': ['1.0'], 'notify_id': ['2024030901222140253047330502425425'], 'fund_bill_list': ['[{"amount":"118.33","fundChannel":"ALIPAYACCOUNT"}]'], 'notify_type': ['trade_status_sync'], 'out_trade_no': ['0997aa0a-281d-4081-b3a3-d945e5c55d9e'], 'total_amount': ['118.33'], 'trade_status': ['TRADE_SUCCESS'], 'trade_no': ['2024030922001447330502324355'], 'auth_app_id': ['9021000135610284'], 'receipt_amount': ['118.33'], 'point_amount': ['0.00'], 'buyer_pay_amount': ['118.33'], 'app_id': ['9021000135610284'], 'sign_type': ['RSA2'], 'seller_id': ['2088721031447322']}>

需要手动修改一下data

class CheckOrder(APIView):
    authentication_classes = []
    def post(self,request):
        data = {}
        for key,value in request.data.items():
            data[key] = value
        signature = data.pop("sign")
        print(alipay.sign_type)
        success = alipay.verify(data, signature)
        if success and data["trade_status"] in ("TRADE_SUCCESS", "TRADE_FINISHED"):
            print("trade succeed")
        return Response()

而且不能在原来的request.data里面修改 不然得到的也是一个类似于{"data":["xxx":"xxx"]}的结构