- class AlipayView(APIView):
- def get(self, request):
- """处理支付宝的 return_url 返回"""
- processed_dict = {}
- # 1. 获取 GET 中参数
- for key, value in request.GET.items():
- processed_dict[key] = value
- # 2. 取出 sign
- sign = processed_dict.pop("sign", None)
- # 3. 生成 ALipay 对象
- alipay = AliPay(
- appid="2016091500517456",
- app_notify_url="http://47.93.198.159:8000/alipay/return/",
- app_private_key_path=private_key_path,
alipay_public_key_path=ali_pub_key_path, # 支付宝的公钥, 验证支付宝回传消息使用, 不是你自己的公钥,
- debug=True, # 默认 False,
- return_url="http://47.93.198.159:8000/alipay/return/"
- )
verify_re = alipay.verify(processed_dict, sign)
- # 这里可以不做操作. 因为不管发不发 return url.notify url 都会修改订单状态.
- if verify_re is True:
- order_sn = processed_dict.get('out_trade_no', None)
- trade_no = processed_dict.get('trade_no', None)
- trade_status = processed_dict.get('trade_status', None)
- existed_orders = OrderInfo.objects.filter(order_sn=order_sn)
- for existed_order in existed_orders:
- existed_order.pay_status = trade_status
- existed_order.trade_no = trade_no
- existed_order.pay_time = datetime.now()
- existed_order.save()
- response = redirect("/index/#/app/home/member/order")
- return response
- else:
- response = redirect("index")
- return response
- def post(self, request):
- """处理支付宝的 notify_url"""
- # 存放 post 里面所有的数据
- processed_dict = {}
- # 取出 post 里面的数据
- for key, value in request.POST.items():
- processed_dict[key] = value
- # 把 signpop 掉, 文档有说明
- sign = processed_dict.pop("sign", None)
- # 生成一个 Alipay 对象
- alipay = AliPay(
- appid="2016091500517456",
- app_notify_url="http://47.93.198.159:8000/alipay/return/",
- app_private_key_path=private_key_path,
alipay_public_key_path=ali_pub_key_path, # 支付宝的公钥, 验证支付宝回传消息使用, 不是你自己的公钥,
- debug=True, # 默认 False,
- return_url="http://47.93.198.159:8000/alipay/return/"
- )
- # 进行验证
verify_re = alipay.verify(processed_dict, sign)
- # 如果验签成功
- if verify_re is True:
- # 商户网站唯一订单号
- order_sn = processed_dict.get('out_trade_no', None)
- # 支付宝系统交易流水号
- trade_no = processed_dict.get('trade_no', None)
- # 交易状态
- trade_status = processed_dict.get('trade_status', None)
- # 查询数据库中订单记录
- existed_orders = OrderInfo.objects.filter(order_sn=order_sn)
- for existed_order in existed_orders:
- # 订单商品项
- order_goods = existed_order.goods.all()
- # 商品销量增加订单中数值
- for order_good in order_goods:
- goods = order_good.goods
- goods.sold_num += order_good.goods_num
goods.save()
- # 更新订单状态
- existed_order.pay_status = trade_status
- existed_order.trade_no = trade_no
- existed_order.pay_time = datetime.now()
- existed_order.save()
- # 需要返回一个'success'给支付宝, 如果不返回, 支付宝会一直发送订单支付成功的消息
- return Response("success")
来源: https://www.cnblogs.com/derek1184405959/p/8877643.html