保存支付结果

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

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)

猜你喜欢

转载自www.cnblogs.com/hzlnice/p/9393151.html