保存支付结果
前端页面将此数据发送给后端,后端检验并保存支付结果
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 版权协议,转载请附上原文出处链接和本声明。