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

思路剖析
Python 调用支付宝沙箱接口 实现 扫码支付_第1张图片

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

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

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

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

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

# views.py
def pay_result(request):
    pass

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

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

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

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

密钥也是如此

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

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

下载的 引入的 Alipay
源码:
Python 调用支付宝沙箱接口 实现 扫码支付_第22张图片
看 引入的 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

写到这里想必大家有所猜疑了吧,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
        })

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

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

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

你可能感兴趣的:(python)