支付宝支付 Django

必备条件,公钥密钥
setting配置

# # 支付宝沙箱
# ALIPAY_APPID = "xxxxxxx"
# ALIPAY_URL = "https://openapi.alipaydev.com/gateway.do"
# 支付宝配置参数
ALIPAY_APPID = "xxxxx"
ALIPAY_URL = "https://openapi.alipay.com/gateway.do"

生成订单:

order.o_id = '%s%s' % (datetime.now().strftime('%Y%m%d%H%M%S'), order.user.id)

根据订单号

位置

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

    # 电脑网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string
    order_string = alipay.api_alipay_trade_page_pay(
        out_trade_no=order_id,
        # total_amount=0.05,
        total_amount=str(order.o_total_price), # 将Decimal类型转换为字符串交给支付宝
        subject="优-%s"%tishi,
        return_url="http://www.xxx.com/index?user=%s&token=%s&bind=1"%(username, token),
        # return_url=None,
        notify_url=None, # 可选, 不填则使用默认notify url
    )

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

    return HttpResponseRedirect(url)

支付完成,要确定是否成功支付呀

def check_pay(request):
    # 创建用于进行支付宝支付的工具对象

    out_trade_no = request.POST.get("out_trade_no")

    order = OrderInfo.objects.filter(o_id=out_trade_no).first()
    user = UserProfile.objects.filter(username=order.user).first()

    alipay = AliPay(
        appid=settings.ALIPAY_APPID,
        app_notify_url=None,  # 默认回调url
        app_private_key_path=os.path.join(settings.BASE_DIR, "apps/user_vip/app_private_key.pem"),
        alipay_public_key_path=os.path.join(settings.BASE_DIR, "apps/user_vip/alipay_public_key.pem"),
        # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
        sign_type="RSA2",  # RSA2,官方推荐,配置公钥的时候能看到
        debug=False  # 默认False  配合沙箱模式使用True
    )

    while True:
        # 调用alipay工具查询支付结果
        response = alipay.api_alipay_trade_query(out_trade_no)  # response是一个字典
        # 判断支付结果
        code = response.get("code")  # 支付宝接口调用成功或者错误的标志
        trade_status = response.get("trade_status")  # 用户支付的情况

        if code == "10000" and trade_status == "TRADE_SUCCESS":
            if order.o_pay == False:
                # 表示用户支付成功
                # 写入逻辑
            else:
                pass

            # 返回前端json,通知支付成功
            return JsonResponse({"code": 0, "message": "支付成功"})

        elif code == "40004" or (code == "10000" and trade_status == "WAIT_BUYER_PAY"):
            # 表示支付宝接口调用暂时失败,(支付宝的支付订单还未生成) 后者 等待用户支付
            # 继续查询
            print(code)
            print(trade_status)
            continue
            # return JsonResponse({"code":code, "msg": trade_status })
        else:
            # 支付失败
            # 返回支付失败的通知
            return JsonResponse({"code": 1, "message": "支付失败"})

仅作记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值