1. 程式人生 > 其它 >29Django-接入支付寶5(完成支付寶回撥)

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