思路剖析
支付宝开放平台 登录
登陆之后 点击这个 研发服务
然后下载 一个 支付宝沙箱的 移动端
点击左侧的沙箱账号,就可以知道 登录沙箱的 账号和 密码了,也可以 往死充钱。他是可以扫 沙箱收款的二维码的。
我们现在需要 生成 RSA密钥
然后再 点击
然后下载这个工具
下载好后 找到我的 文档地址
往下滑动 可以发现 设置的一些条件 我们记录一下
APPID --> 2016101400681366
支付宝网关 --> https://openapi.alipaydev.com/gateway.do
要用到关键性 的东西了 RSA2 我们先 设置一下它
然后更改 公钥
出现下面这个后 我们等待一下啊
我们 打开刚下 下载的 软件包
双击打开 静静等待 然后复制公钥
复制之后 替换 刚才打开的 加签管理中的公钥
替换后 保存
然后继续 更改 公钥
点击修改后
回到 .bat 生成密钥的工具 打开 文件所在的位置,把那两个 text 放到我们的 项目里。
这两个文件非常的重要
回到 沙箱 填写这些内容
回调地址 故名思意 扫码完成后 跳转的到的地址,所以我们要写一个视图函数来 对应这个地址。
# views.py
def pay_result(request):
pass
12345
123456
先简短的这么写 后期再完善它。所以回调地址 就要写 这个名字
应用网关 设置成 咱们刚才 暂存的那个
呼~ 配置完了 该到 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 的父子应用同级
然后我们 为了 避免 中文 将他们改成了 这个名字。
下载的 引入的 Alipay
源码:
看 引入的 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 启动看一下
把 这个 url CV 下来 去 页面看一下