django调用支付宝

这篇博客主要是描述一下在调用支付宝的时候的一个通用方法.首先需要

1.一对公钥,私钥

2.自己支付宝账号的APPID与支付宝网关,获取网站:https://openhome.alipay.com/platform/appDaily.htm?tab=info

然后把公钥填在上面的网站中,这样就可以使用支付宝的接口了

在django中开始调用支付宝:

1.setting配置:

ALIPAY_APPID = 20xxxxxxxxxxxxx9999
ALIPAY_URL = "https://openapi.alipaydev.com/gateway.do"

WEB_URL = "http://127.0.0.1:8000/" #这个是方便上线的时候只需要改这一项,然后所有的链接重定向的时候就都走这个url,防止bug

2.pip安装

pip install python-alipay-sdk

3.支付代码

class PayView(View):
    def get(self, request): #通过一个类的get方法来调用支付宝,如果是post方法,如果在支付宝界面还尚未打开就刷新页面,会出现表单重新填写等问题.
        from alipay import AliPay
        import os
        from Myweb.settings import ALIPAY_APPID, BASE_DIR, ALIPAY_URL, WEB_URL
        buy_id = request.GET.get("id", "")#这里的"id"是我自定义的业务逻辑
        if id:
            buy_model = BuyersModel.objects.filter(buy_id=buy_id) #buy_model是自定义数据库的表
            if buy_model:
                buy_model = buy_model.get(buy_id=buy_id)
                money = buy_model.buy_money # 根据数据库中的id查询需要支付的金额
                ali_pay = AliPay(
                    appid=ALIPAY_APPID,
                    app_notify_url=None,  # 使用默认回调的地址
                    # 私钥的路径
                    app_private_key_path=os.path.join(BASE_DIR, 'keys/pri'),
                    # 公钥的路径
                    alipay_public_key_path=os.path.join(BASE_DIR, 'keys/pub'),
                    # 使用的加密方式
                    sign_type='RSA2',
                    # 默认是False测试环境配合沙箱环境使用 如果是生产环境将其改为True
                    debug=True)
                order_string = ali_pay.api_alipay_trade_page_pay(
                    # 订单编号
                    out_trade_no=buy_id,
                    # 订单总额
                    total_amount=money,
                    # 订单描述信息
                    subject="Thank you for your support !",
                    # 回调地址, 订单支付成功后回调的地址
                    return_url=WEB_URL + "hire/pay_finish?id=" + buy_id, # 这里是自己网站的一个支付成功的页面.
                )
                url = ALIPAY_URL + '?' + order_string
                from django.http import HttpResponseRedirect
                return HttpResponseRedirect(url)
            else: # 如果在支付中出现任何缺陷,很多都是恶意输入数据,可以直接返回404的页面,表示信息缺失.
                return page_not_fount(request)
        else:
            page_not_fount(request)

4.是否支付的验证类:

class PayOkView(View):
    def get(self, request):
        out_trade_no = request.GET.get("out_trade_no", "") # 这里的out_trade_no是订单编号
        id = request.GET.get("id", "")
        if id is "":
            return page_not_fount(request)
        from alipay import AliPay
        from Myweb.settings import ALIPAY_APPID, BASE_DIR
        import os
        alipay = AliPay(
            appid=ALIPAY_APPID,
            app_notify_url=None,
            app_private_key_path=os.path.join(BASE_DIR, 'keys/pri'),
            alipay_public_key_path=os.path.join(BASE_DIR, 'keys/pub'),
            sign_type='RSA2',
            # 沙箱环境下没有查询订单服务的
            debug=True)
        response = alipay.api_alipay_trade_query(out_trade_no=out_trade_no)
        # code 40004 支付订单未创建
        # code 10000 trade_status  WAIT_BUYER_PAY  等待支付
        # oode 10000 trade_status  TRADE_SUCCESS  支付成功
        # response 是字典
        code = response.get('code')
        trade_status = response.get('trade_status')
        if code == '10000' and trade_status == 'TRADE_SUCCESS':
            # 支付成功
            # has_pay
            #支付成功的
        elif (code == '10000' and trade_status == 'WAIT_BUYER_PAY') or code == '40004':
            # 表示支付暂时没有完成
            from django.http import HttpResponseRedirect
            return HttpResponseRedirect(支付未完成的url)
        else:
            # fail
            from django.http import HttpResponseRedirect
            return HttpResponseRedirect(其他支付失败情况的url)

具体的资金余额在沙箱模式下可以通过https://openhome.alipay.com/platform/appDaily.htm?tab=account 来查看

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆萌的代Ma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值