1在视图中编写一个验签的方法:
#获取验签结果:
def get_verify_result(self,data,sign):
#验证签名,True表示成功,False表示失败
return self.alipay.verify(data,sign)
2定义一个接收支付结果的方法:
#接收支付结果
class ResultView(MyAliPay):
def post(self,request):
#notify_url业务逻辑
#把阿里post给我们的支付结果的key遍历出来作为我们自己的k,把阿里key所对应的value作为我们的value,组建一个字典
resuest_data = {k:request.POST[k] for k in request.POST.keys()}
#把数据里的签名分离出来
sign = resuest_data.pop('sign')
#验签
is_verify = self.get_verify_result(resuest_data,sign)
if is_verify is True:
#证明当前请求是支付宝发的,那么我们就取状态
trade_status = resuest_data.get('trade_status')
if trade_status == 'TRADE_SUCCESS':
print('支付成功')
#修改自己数据库的订单状态
#按支付宝要求响应
return HttpResponse('success')
else:
return HttpResponse('违法请求')
3定义一个主动查询订单结果的方法:
#主动查询订单结果
def get_trade_result(self,order_id):
result = self.alipay.api_alipay_trade_query(order_id)
if result.get('trade_status') == 'TRADE_SUCCESS':
return True
return False
4实现支付完成后的跳转return url
def get(self,request):
#return url业务逻辑
#获取支付宝回传的订单号
order_id = request.GET['out_trade_no']
#拿着这个订单号去我们数据库查订单状态,如果还是待付款,就采取B方案-主动查询订单真实交易状态
#B方案
result = self.get_trade_result(order_id)
if result:
return HttpResponse('--支付成功:主动查询结果--')
else:
return HttpResponse('--支付异常:主动查询结果--')
5定义个路由url:
path('payment/result',views.ResultView.as_view()),
备注:阿里post给我们的数据:
{'code': '10000', 'msg': 'Success', 'buyer_logon_id': '135******78', 'buyer_pay_amount': '0.00', 'buyer_user_id': '2088502769479373', 'invoice_amount': '0.00', 'out_trade_no': '1639984023linuxTang', 'point_amount': '0.00', 'receipt_amount': '0.00', 'send_pay_date': '2021-12-20 15:07:50', 'total_amount': '0.10', 'trade_no': '2021122022001479371450037050', 'trade_status': 'TRADE_SUCCESS'}