前端页面将此数据发送给后端,后端检验并保存支付结果

1. 后端接口设计

请求方式: PUT /payment/status/?支付宝参数

请求参数: 查询字符串参数, 见上面表格

返回数据: JSON

返回值 类型 是否必须 说明
trade_id str 支付宝流水号

2. 后端实现

在payment/views.py中创建视图

class PaymentStatusView(APIView):
    """
    支付结果
    """
    def put(self, request):
        data = request.query_params.dict()
        signature = data.pop("sign")

        alipay = AliPay(
            appid=settings.ALIPAY_APPID,
            app_notify_url=None,  # 默认回调url
            app_private_key_path=os.path.join(os.path.dirname(os.path.abspath(__file__)), "keys/app_private_key.pem"),
            alipay_public_key_path=os.path.join(os.path.dirname(os.path.abspath(__file__)),
                                                "keys/alipay_public_key.pem"),  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
            sign_type="RSA2",  # RSA 或者 RSA2
            debug=settings.ALIPAY_DEBUG  # 默认False
        )

        success = alipay.verify(data, signature)
        if success:
            # 订单编号
            order_id = data.get(\'out_trade_no\')
            # 支付宝支付流水号
            trade_id = data.get(\'trade_no\')
            Payment.objects.create(
                order_id=order_id,
                trade_id=trade_id
            )
            OrderInfo.objects.filter(order_id=order_id, status=OrderInfo.ORDER_STATUS_ENUM[\'UNPAID\']).update(status=OrderInfo.ORDER_STATUS_ENUM["UNCOMMENT"])
            return Response({\'trade_id\': trade_id})
        else:
            return Response({\'message\': \'非法请求\'}, status=status.HTTP_403_FORBIDDEN)

版权声明:本文为hzlnice原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/hzlnice/p/9393151.html