Flask联调第三方支付模块-支付宝
支付宝沙箱
支付宝沙箱基础配置
支付宝开放平台
从www.alipay.com访问,选择我是开发者。
这里就要涉及到一个密钥的问题RSA加密算法:
它是一种非对称性加密算法,由一对密钥组成,一个是公钥,用来加密,可以公开; 一个是私钥,用来解密,必须自己保存,不能公开。
我们可以使用支付宝的开发助手来生成:
到这里我们需要注意到四点
1.应用公钥(public key)需提供给支付宝账号管理者上传到支付宝开放平台。
2.应用私钥(private key)由开发者自己保存,需填写到代码中供签名时使用。
3.生成的私钥需妥善保管,避免遗失,不要泄露。
4.密钥和应用(APPID)一一对应,即开发者需要为名下的每个应用分别设置密钥,且不同应用的密钥不能混用。
当然如果这里看不懂也可以观看支付宝的官方文档
https://opendocs.alipay.com/common/02kipl
创建支付接口
1 | #下载支付宝的SDK pip install python-alipay-sdk |
打开链接后得到的是这样的一个页面
一个输入金额,如何输入密码付款的页面 ,图片好像违规了显示不出来。
用户名 和 支付密码 在支付宝开发者品台有写
使用买家账号登录。
支付成功后的回调
在订单支付成功之后 我们的页面回到我们设置的同步通知地址(异步的需要内网穿透)
回调的路由里 携带了很多的参数:
这些参数都是什么(订单号,订单价格,appid,签名)
这里面签名是最重要的 因为签名是决定这个订单是否更改过 是否正常
(签名 把其他所有的参数,按照一定的规则进行加密,其他参数如果修改了那签名就匹配不上了)
获取所有支付宝开放平台的 post 内容,不包括字节类型参数,如文件、字节流,剔除 sign 字段,剔除值为空的参数;
按照第一个字符的键值 ASCII 码递增排序(字母升序排序),如果遇到相同字符则按照第二个字符的键值 ASCII 码递增排序,以此类推;
将排序后的参数与其对应值,组合成 参数=参数值 的格式,并且把这些参数用 & 字符连接起来,此时生成的字符串为待签名字符
下面来进行校验
1 | data = request.args.to_dict() |
校验成功后 支付流程也就结束了