前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django实战-生鲜电商-查询支付结果

Django实战-生鲜电商-查询支付结果

作者头像
小团子
发布2019-07-18 16:09:01
5990
发布2019-07-18 16:09:01
举报
文章被收录于专栏:数据云团

完成了订单支付,用户需要在个人中心看到商品的支付结果,需要从数据库查询用户成功支付的订单,通过订单编号可以获取到每份订单的信息。

① 获取订单信息

代码语言:javascript
复制
try:
    order = OrderInfo.objects.get(order_id=order_id, user=request.user,
                                  status=OrderInfo.ORDER_STATUS_ENUM["UNPAID"],
                                  pay_method=OrderInfo.PAY_METHODS_ENUM["ALIPAY"])
except OrderInfo.DoesNotExist:
    return JsonResponse({"code": 3, "message": "订单信息有误"})

② 创建用于进行支付宝支付的工具对象

代码语言:javascript
复制
alipay = AliPay(
    appid=settings.ALIPAY_APPID,
    app_notify_url=None,  # 默认回调url
    app_private_key_path=os.path.join(settings.BASE_DIR, "apps/orders/app_private_key.pem"),
    alipay_public_key_path=os.path.join(settings.BASE_DIR, "apps/orders/alipay_public_key.pem"),  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
    sign_type="RSA2",  # RSA 或者 RSA2
    debug=True  # 默认False  配合沙箱模式使用
)

③ 查询支付结果

代码语言:javascript
复制
class CheckPayStatusView(LoginRequiredJsonMixin, View):
    # 查询支付结果
    def get(self, request):
        # 订单编号
        order_id = request.GET.get("order_id")

        if not order_id:
            return JsonResponse({"code": 2, "message": "缺失订单号"})

        # 获取订单的信息
        try:
            order = OrderInfo.objects.get(order_id=order_id, user=request.user,
                                          status=OrderInfo.ORDER_STATUS_ENUM["UNPAID"],
                                          pay_method=OrderInfo.PAY_METHODS_ENUM["ALIPAY"])
        except OrderInfo.DoesNotExist:
            return JsonResponse({"code": 3, "message": "订单信息有误"})

        while True:
            # 调用alipay工具查询支付结果
            response = alipay.api_alipay_trade_query(order_id)  # response是一个字典

            # 判断支付结果
            code = response.get("code")  # 支付宝接口调用成功或者错误的标志
            trade_status = response.get("trade_status")  # 用户支付的情况

            if code == "10000" and trade_status == "TRADE_SUCCESS":
                # 表示用户支付成功
                # 修改订单的状态,变为待评论状态
                order.status = OrderInfo.ORDER_STATUS_ENUM["UNCOMMENT"]

                # 更新订单的支付宝交易编号
                order.trade_id = response.get("trade_no")
                order.save()
                # 返回前端json,通知支付成功
                return JsonResponse({"code": 0, "message": "支付成功"})

            elif code == "40004" or (code == "10000" and trade_status == "WAIT_BUYER_PAY"):
                # 表示支付宝接口调用暂时失败,(支付宝的支付订单还未生成) 后者 等待用户支付
                # 继续查询
                continue
            else:
                # 支付失败
                # 返回支付失败的通知
                return JsonResponse({"code": 4, "message": "支付失败"})
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据云团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档