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

Django实战-生鲜电商-订单支付

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

订单支付使用的是支付宝的API。需要到蚂蚁金服开放平台注册账号,申请 网页&移动应用 支付。如果申请还未通过,可以使用沙箱环境进行测试。在本地项目运行环境中需要安装支付宝的SDK。

代码语言:javascript
复制
pip install alipay-sdk-python
代码语言:javascript
复制
from alipay import AliPay

用户提交订单后,就是支付操作了,在项目的支付环节是采用发起 POST 请求,再返回正确码和请求支付成功。接收客户端传过来的订单ID号,获取订单信息。

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

需要接入支付宝的密钥

代码语言: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  配合沙箱模式使用
)

② 电脑网站支付

需要跳转到https://openapi.alipay.com/gateway.do? + order_string

代码语言:javascript
复制
order_string = alipay.api_alipay_trade_page_pay(
    out_trade_no=order_id,
    total_amount=str(order.total_amount),  # 将Decimal类型转换为字符串交给支付宝
    subject="每日生鲜%s" % order_id,
    return_url=None,
    notify_url=None  # 可选, 不填则使用默认notify url
)

③ 支付宝支付

代码语言:javascript
复制
class PayView(LoginRequiredJsonMixin, View):
    """支付宝支付"""
    def post(self, request):
        """"""
        # 订单id
        order_id = request.POST.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": "订单信息有误"})

        # 创建用于进行支付宝支付的工具对象
        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  配合沙箱模式使用
        )

        # 电脑网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string
        order_string = alipay.api_alipay_trade_page_pay(
            out_trade_no=order_id,
            total_amount=str(order.total_amount),  # 将Decimal类型转换为字符串交给支付宝
            subject="每日生鲜%s" % order_id,
            return_url=None,
            notify_url=None  # 可选, 不填则使用默认notify url
        )

        # 让用户进行支付的支付宝页面网址
        url = settings.ALIPAY_URL + "?" + order_string

        return JsonResponse({"code": 0, "message": "请求支付成功", "url": url})
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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