请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

支付状态

老师,我这里支付可以成功,就是支付后支付状态未更新,数据库也没有改变。

class AliPayView(APIView):
    def get(self, request):
        """
        处理支付宝的return_url
        """
        processed_dict = {}
        for key, value in request.GET.items():
            processed_dict[key] = value
        sign = processed_dict.pop("sign", None)

        alipay = AliPay(
            appid=appid,
            app_notify_url="http://127.0.0.1:8000/alipay/return/",
            app_private_key_path=private_key_path,
            alipay_public_key_path=ali_pub_key_path,
            debug=True,
            return_url="http://127.0.0.1:8000/alipay/return/"
        )
        verify_result = alipay.verify(processed_dict, sign)
        if verify_result 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")
            response.set_cookie("nextPath", "pay", max_age=3)
            return response
        else:
            response = redirect("index")
            return response

    def post(self, request):
        """
        处理支付宝的notify_url
        """
        processed_dict = {}
        for key, value in request.POST.items():
            processed_dict[key] = value
        sign = processed_dict.pop("sign", None)
        print(processed_dict)
        alipay = AliPay(
            appid=appid,
            app_notify_url="http://127.0.0.1:8000/alipay/return/",
            app_private_key_path=private_key_path,
            alipay_public_key_path=ali_pub_key_path,
            debug=True,
            return_url="http://127.0.0.1:8000/alipay/return/"
        )
        verify_result = alipay.verify(processed_dict, sign)
        if verify_result 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)

            # 更新数据库订单状态
            """
            OrderInfo.objects.filter(order_sn=order_sn).update(
                trade_no=trade_no,  # 更改交易号
                pay_status=trade_status,  # 更改支付状态
                pay_time=timezone.now()  # 更改支付时间
            )
            """
            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 = timezone.now()

                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.save()

            return Response("success")

这是代码,报错pay_status’ cannot be null

如果把get方法里判断状态的注释,不报错,但状态依旧未修改

        if verify_result 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")
            return response
        else:
            response = redirect("index")
            return response

正在回答 回答被采纳积分+3

1回答

bobby 2021-08-12 10:06:26

pay_status报错是mysql报的错。说你保存到mysql中的时候并没有设置pay_status,你有没有debug看支付后能不能跳转到这个逻辑中执行?

0 回复 有任何疑惑可以回复我~
  • 提问者 慕妹4516714 #1
    老师,我debug 执行的时候没有跳到post执行,所以它状态不改变,但是支付操作可以完成,并且返回了首页页面,
    回复 有任何疑惑可以回复我~ 2021-08-12 10:51:26
  • bobby 回复 提问者 慕妹4516714 #2
    支付post是由支付宝发给你的请求引起的,这个需要部署到外网能访问才行,你是否部署到外网了?
    回复 有任何疑惑可以回复我~ 2021-08-13 21:46:38
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信