Python 调用支付宝沙箱接口 实现 扫码支付

思路剖析
Python 调用支付宝沙箱接口 实现 扫码支付

支付宝开放平台 登录
登陆之后 点击这个 研发服务
Python 调用支付宝沙箱接口 实现 扫码支付
然后下载 一个 支付宝沙箱的 移动端
Python 调用支付宝沙箱接口 实现 扫码支付
点击左侧的沙箱账号,就可以知道 登录沙箱的 账号和 密码了,也可以 往死充钱。他是可以扫 沙箱收款的二维码的。
我们现在需要 生成 RSA密钥
Python 调用支付宝沙箱接口 实现 扫码支付
然后再 点击
Python 调用支付宝沙箱接口 实现 扫码支付
然后下载这个工具
Python 调用支付宝沙箱接口 实现 扫码支付
下载好后 找到我的 文档地址
Python 调用支付宝沙箱接口 实现 扫码支付
往下滑动 可以发现 设置的一些条件 我们记录一下

APPID --> 2016101400681366
支付宝网关 --> https://openapi.alipaydev.com/gateway.do

要用到关键性 的东西了 RSA2 我们先 设置一下它
Python 调用支付宝沙箱接口 实现 扫码支付
然后更改 公钥
Python 调用支付宝沙箱接口 实现 扫码支付
出现下面这个后 我们等待一下啊
Python 调用支付宝沙箱接口 实现 扫码支付
我们 打开刚下 下载的 软件包
Python 调用支付宝沙箱接口 实现 扫码支付
双击打开 静静等待 然后复制公钥
Python 调用支付宝沙箱接口 实现 扫码支付
复制之后 替换 刚才打开的 加签管理中的公钥
Python 调用支付宝沙箱接口 实现 扫码支付
替换后 保存
Python 调用支付宝沙箱接口 实现 扫码支付
然后继续 更改 公钥
点击修改后
Python 调用支付宝沙箱接口 实现 扫码支付

回到 .bat 生成密钥的工具 打开 文件所在的位置,把那两个 text 放到我们的 项目里。
Python 调用支付宝沙箱接口 实现 扫码支付
Python 调用支付宝沙箱接口 实现 扫码支付
这两个文件非常的重要

回到 沙箱 填写这些内容
Python 调用支付宝沙箱接口 实现 扫码支付
回调地址 故名思意 扫码完成后 跳转的到的地址,所以我们要写一个视图函数来 对应这个地址。

# views.py
def pay_result(request):
    pass


12345
123456

先简短的这么写 后期再完善它。所以回调地址 就要写 这个名字
Python 调用支付宝沙箱接口 实现 扫码支付
应用网关 设置成 咱们刚才 暂存的那个
Python 调用支付宝沙箱接口 实现 扫码支付
呼~ 配置完了 该到 Python 的了

# 第一次安装 不用执行后面的 upgrade
pip install python-alipay-sdk --upgrade

123
1234

将下面的语句 放到 项目中的 应用公钥里面

在支付宝上下载的公钥是一个字符串,需要在文本的尾部添加标记
-----BEGIN PUBLIC KEY-----
		内容
-----END PUBLIC KEY-----

密钥也是如此

-----BEGIN PRIVATE KEY-----
		内容
-----END PRIVATE KEY-----


123456789101112
12345678910111213

将 刚才的 两个 公钥密钥文件放入 我们的项目目录里,和 DJango 的父子应用同级
Python 调用支付宝沙箱接口 实现 扫码支付
然后我们 为了 避免 中文 将他们改成了 这个名字。

下载的 引入的 Alipay
源码:
Python 调用支付宝沙箱接口 实现 扫码支付
看 引入的 Alipay 源码可知 它所需要的以下的参数

# views.py

APPID = ################ 你的APPID     
AIPAY = 'https://openapi.alipaydev.com/gateway.do'  # 支付宝网关

from alipay import AliPay
from shiyanlou.settings import BASE_DIR
import os

def alipay():    # 之前是 pay_result
    ap = AliPay(
        appid=APPID,
        app_notify_url='http://127.0.0.1:8000/pay_result/',   # 回调地址
        app_private_key_path=os.path.join(BASE_DIR,'private_key.txt'),  # 私钥地址
        alipay_public_key_path=os.path.join(BASE_DIR,'public_key.txt'),  # 公钥地址
    )
	
	return ap

12345678910111213141516171819
1234567891011121314151617181920

写到这里想必大家有所猜疑了吧,ID、公钥、密钥、回调地址、这个就是请求支付宝 沙箱 接口的必要参数把,return 返回 就横额说明白这个意思了。没错就是这样的。
然后 作为 收款人的我们 写一个商品,调用 alipay 中的 网页支付 方法,实现 一个页面的支付二维码 和商品进行关联的话 我们 测试一下。更改成类方法:

# views.py
import time

class paytest(APIView):
    def get(self, request):
        ap = alipay()
        order_string = ap.api_alipay_trade_page_pay(
            total_amount=9274700,     # 价格
            subject='Lamborghini Aventador',     # 主题
            out_trade_no=str(time.time()).replace(',','')   # 订单ID
        )
        pay_url = AIPAY + order_string

        return Response({
            'pay_url': pay_url
        })



12345678910111213141516171819
1234567891011121314151617181920

alipay 也就是 支付宝 在支付的时候 是有两个订单 ID 的 一个订单 ID 对应着 数据(商品),还有一个就是流水,我们需要生成一个订单 ID
假如用户退款的话,alipay 就会通过用户订单 ID 去找,找到之后返回收款人。引入 time 模块 自己生成一个.
pay_url 代表的是 二维码链接的地址、前面的是网关地址 拼接 上 商品信息。
写一个 url 看一下。

# urls.py
path('pay/', views.Paytest.as_view(), name='paytest'),

123
1234

然后用 PostMan 启动看一下
Python 调用支付宝沙箱接口 实现 扫码支付
把 这个 url CV 下来 去 页面看一下
Python 调用支付宝沙箱接口 实现 扫码支付

上一篇:策略+工厂模式替代if else


下一篇:Python 调用支付宝沙箱接口 实现 扫码支付