1. 程式人生 > 其它 >48 支付成功回撥介面

48 支付成功回撥介面

# 正常只需要一個post回撥給支付寶用(登入認證?支付寶要驗證簽名---》才信任,才改訂單狀態)
# 咱們寫了一個get回撥,給前端用,做雙重驗證保險一些


# 內網穿透:https://zhuanlan.zhihu.com/p/370483324

# 前端程式碼編譯
npm run build

支付成功回撥介面

from rest_framework.views import APIView
from .models import Order
class PaySuccessView(APIView):
    def get(self,request): # 自己用的
        try:
            out_trade_no
=request.query_params.get('out_trade_no') # 根據訂單號,查訂單的狀態 Order.objects.get(out_trade_no=out_trade_no,order_status=1) except Exception as e: raise e return APIResponse() # 給支付寶用---》回調回來資料格式 def post(self,request): # django :requset.POST request.GET
--->QueryDict的物件--》不允許刪除資料 try: result_data = request.data.dict() # request.data 是post的資料,複製了一份資料 out_trade_no = result_data.get('out_trade_no') # 訂單號 signature = result_data.pop('sign') # 簽名 from libs import apay # 驗證簽名,只有這個正確,才能修改訂單狀態
--》防止惡意傳送post請求給我們 result = apay.pay.verify(result_data, signature) if result and result_data["trade_status"] in ("TRADE_SUCCESS", "TRADE_FINISHED"): # 完成訂單修改:訂單狀態、流水號、支付時間 models.Order.objects.filter(out_trade_no=out_trade_no).update(order_status=1) # 完成日誌記錄 logger.warning('%s訂單支付成功' % out_trade_no) return Response('success') # 固定的 else: logger.error('%s訂單支付失敗' % out_trade_no) except: pass return Response('failed')