29Django-接入支付宝5(完成支付宝回调)

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'}

 

posted @ 2021-12-20 15:13  linuxTang  阅读(157)  评论(0)    收藏  举报