第三方支付-支付宝接入相关
1,注册开发者账号
调试支付宝支付需要先 在 支付宝开放平台 进行注册,入驻为 “自助研发者”;链接为 https://open.alipay.com/platform/home.htm
第一次进入需要填写详细信息 - 注意:切换为 自研开发者
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-izzsqltQ-1619270557404)(images\1584197606859.png)]
2,进入沙箱
完善个人信息后,在个人管理后台可看到 “沙箱” 服务
注:沙箱为支付宝提供的调试支付的测试环境,在该环境下,可模拟和调试支付流程
具体位置如下: 开发者中心 - 首页
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rbnun72B-1619270557410)(images\1584258109763.png)]
3,查看沙箱
点击 研发服务 - 进入沙箱后, 在沙箱应用选项中可以看到支付宝提供的测试应用
注:当您的网站上线运营时,需要在开放平台申请一个应用;并填写相关信息审核后,方可使用支付功能;沙箱应用为支付宝提供开发者测试用的应用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WQLIHTXt-1619270557412)(images\1584258794452.png)]
4,生成&添加 RSA 公私钥
4-1 生成钥匙
支付过程中涉及到请求和响应的签名校验;
在linux终端中 输入openssl 进入 交互环境
tarena@tedu:~$openssl
OpenSSL> genrsa -out app_private_key.pem 2048 #私钥
OpenSSL> rsa -in app_private_key.pem -pubout -out app_public_key.pem #导出公钥
OpenSSL> exit
tarena@tedu:~$ls
app_private_key.pem app_public_key.pem
RSA 钥匙用途
公钥加密/私钥解密
私钥签名/公钥验签
4-2 添加公钥
点击 沙箱应用展示信息页中的 RSA2密钥 的 设置/查看
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pr2YkmTr-1619270557416)(images\1584259358341.png)]
在弹出的对话框中,选择 公钥 模式
并将您刚才生成出的 app_public_key.pem 中的内容 复制到 红色大框体内,并保存复制
注意,生成公钥如下, 只复制 -----BEGIN PUBLIC KEY----- 和 -----END PUBLIC KEY----- 之间的内容即可
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA871I3CXvQWXcbwbcyEJB
r7Prxfhf34z1lzZWEaeBugCiUNjK2llrVKyV5tcHqxv9xTzQXz6Mg4n0jmhqkqtI
B6gCNAo5bYMN9nDRnqZ33ojJmZMmxupWUZCvz+3Svft0P0hd/oKc0OZOTI8MPPNV
y5HsovhABUfVsTgSH/AlMoKEz7sM7Cqtb2LT8nZewSdrnEhLrw7KFkDyNfftO8CF
yls6MbNeI4CHmc0PTcXJ7O8+Fx0WOJrYDKPMHW25OxB1IT3Pdn8PnAbtYeRoiUU1
Yfp/qZMmnedZgF0Qpr+ZIZLPhAZrRwqfMcfSIiNJvmcsUKVGLBal10frAIztHKmW
eQIDAQAB
-----END PUBLIC KEY-----
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rcJQRd0O-1619270557418)(images\1584259487199.png)]
4-3 保存支付宝公钥
提交我方公钥后,弹框会显示 支付宝公钥;该公钥需要复制保存下来;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tNca72GZ-1619270557420)(images\1584260105387.png)]
保存流程如下:
1,用户目录下
vim alipay_public_key.pem
2,进入vim后手动添加如下两行
-----BEGIN PUBLIC KEY-----
-----END PUBLIC KEY-----
3,光标在BEGIN处 点击 键盘o 进入插入模式,此时光标停留在 BEGIN和END的两行之间;粘贴支付宝公钥 最终格式如下
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgVjSs4PrjOsJ/c/m7SDYoPKPIwvEwq3U6p2dzpB0X/wVsYsZEHLrWEeVZfTHi9J0yrvwnxgUPlCGKv4EaJuc8msWuuH3TxEvurTPJxYUCOiBIQYeG5iRTh3fWyCkMlLNm8UXv0v+KRVK9bZ17cWB0vBM7iwrytGbfKg0vhIjsybbOd4VM/m4bWZOFdkXAmJfbO+pfMsa9TzF5zYmSpoHuBAkGu9m7EtzzBlXifthYkhvyEAX/XWG3rgaEe+l8W+NlPZ1uudZ2AIWLvnLl5Jjrcz1yMJqOhsobBrPiWbnwnRsMz1Sn9W9rl/cGITcboPlEMgs988Vcd/o21gHDNwNKQIDAQAB
-----END PUBLIC KEY-----
4,esc退出插入模式, 执行 :wq 退出保存
5, 安装 python 的 支付宝组件
# 安装python-alipay-sdk
sudo pip3 install python-alipay-sdk -i https://pypi.tuna.tsinghua.edu.cn/simple
#安装成功后执行如下命令 校验安装结果
tarena@tedu:~$ pip3 freeze|grep -i ali
python-alipay-sdk==2.0.1 #输出此结果 则表示安装成功
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nEVctcu4-1619270557421)(images/支付宝交互时序图.png)]
关于return_url和notify_url的问题
-
return_url 【GET】
- 如果不给return_url支付宝处理完业务会留在自己的网页不做跳转
- 重定向时会带上订单编号等参数
-
notify_url 【POST】
-
支付结果异步通知
-
对于 PC 网站支付的交易,在用户支付完成之后,支付宝会根据 API 中商户传入的 notify_url,通过 POST 请求的形式将支付结果作为参数通知到商户系统。
-
详见(https://docs.open.alipay.com/270/105902/)
-
代码演示
6, 正式接入支付宝
当您在沙箱环境测试完毕后,且您的网站基础功能均已开发完毕,需要在支付宝开放平台 申请应用 方可 正式接入到支付宝
6-1 创建应用
开放平台首页- 创建应用 - 网页&移动应用 - 支付接入
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8wPzsRu8-1619270557422)(images\1584262028920.png)]
6-2 填写应用信息
填写应用相关信息后 点击 - 确认创建
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hiUerKiE-1619270557423)(images\1584262225057.png)]
6-3 签约 快捷即时到账 功能
快捷即时到账 即为 支付宝的 网页支付功能,该功能需要 在应用显示页面手动添加才可支持
步骤1 点击 添加能力
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JGYn0TX2-1619270557424)(images\1584262610212.png)]
步骤2 选择 快捷即时到账
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3UMhQIHO-1619270557425)(images\1584262807310.png)]
6-4 添加公钥 - 同 沙箱流程
在当前应用信息显示页下方,设置 接口加签方式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EmmPfZeH-1619270557426)(images\1584262861802.png)]
########################################################################
#代码
安装 python -django和 支付宝组件
# 安装python-alipay-sdk
pip3 install django
sudo pip3 install python-alipay-sdk -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install alipay
创建django项目及应用
django-admin startproject alipay_test
cd alipay_test
python3 manage.py startapp payment
mkdir -p templates static/js static/key_file
cd ~
cp -r app_private_key.pem app_public_key.pem alipay_public_key.pem /opt/alipay_test/static/key_file
alipay_test/settings.py
vim alipay_test/settings.py
"""
Django settings for alipay_test project.
Generated by 'django-admin startproject' using Django 2.2.12.
For more information on this file, see
https://docs.djangoproject.com/en/2.2/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.2/ref/settings/
"""
import os
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath