48 支付成功回调接口

# 正常只需要一个post回调给支付宝用(登录认证?支付宝要验证签名---》才信任,才改订单状态)
# 咱们写了一个get回调,给前端用,做双重验证保险一些



# 内网穿透:https://zhuanlan.zhihu.com/p/370483324

支付成功回调接口

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'

# 前端代码编译

npm run build    #把前端项目编译成纯的html css js  会生成一个dist的文件夹(里面是纯的css,jss,html)

 

posted @ 2022-03-03 23:02  甜甜de微笑  阅读(110)  评论(0)    收藏  举报