使用支付宝沙箱环境支付
前言:正常情况下,我们使用支付宝支付,收钱的账户需要开通商户号,开通商户号需要公司的营业执照、对公账户等信息。对开发来讲,只需要商户号、公钥和私钥,只要配对好了,就可以把钱付到这个商户里去。所以在开发测试阶段,我们使用支付宝为我们提供的沙箱环境,它可以无限充值和花钱,模拟支付,当然钱都是假的。
1. 支付宝提供的沙箱环境
- 沙箱环境是支付宝开放平台为开发者提供的与生产环境完全隔离的联调测试环境,开发者在沙箱环境中完成的调用不会对生产环境中的数据造成任何影响。
- 支付宝扫一扫登录实名认证:https://openhome.alipay.com/platform/appDaily.htm?tab=info
- 实名认证完成后才可以看到沙箱环境,之前认证过的就可以直接看到。
- 扫码下载一个沙箱客户端,一会就可以用它付钱了。
>>可以直接点击充值,充很多钱
>>再用手机扫这个下面这个码,下载一个支付宝沙箱客户端
>>下载安装好后输入买家信息中的用户名和密码登录
2. 支付宝交易的流程
在网站点击立即购买==》跳转到支付宝支付页面==》手机扫码(手动输入用户名密码)==》把钱付给了支付宝(沙箱商户中了)==》跳转回网站支付成功页面==》支付宝会回调我们的地址,携带订单号,我们的项目通过订单号,修改订单状态即可(从待支付修改为已支付)
3. 支付宝支付的开发流程
- 需要先登录,前端点击立即购买
- 提交订单到后台,调咱们项目的下单接口==》生成订单,订单状态是未支付==》返回支付链接
- 前端拿到支付链接==》跳转到请求支付链接,即支付宝地址
- 用户登录支付宝,付款完成后,支付宝会回调到前端(get回调)==》我们在前端显示支付成功
- 支付宝还有一个post回调到后端==》我们还需要配合一个接口==》修改订单状态为已支付
- 支付宝官方流程:https://opendocs.alipay.com/open/270/105898/
4. 后端要写的接口(本篇博客里没写)
- 下单接口
- post的回调接口
5. 支付宝官方提供了API和SDK方案
- API使用说明:https://opendocs.alipay.com/open/028r8t?scene=22(比较麻烦,所以不用)
- SDK使用说明:https://opendocs.alipay.com/open/02no41
- 也可以用第三方封装的SDK
6. Python第三方封装的SDK使用
GitHub开源框架:https://github.com/fzlee/alipay
① 安装第三方包
>: pip install python-alipay-sdk --upgrade # 如果抛ssl相关错误,代表缺失该包 >: pip install pyopenssl
② 使用之前,要先有公钥和私钥(这和用不用第三方没关系,用支付宝官方提供的SDK也需要先有公钥私钥)
密钥申请的官方使用说明:https://opendocs.alipay.com/common/02kipl
以前是可以在线生成的,现在网站已经打开不了,需要下载并安装 支付宝开放平台密钥工具
>>下载安装成功后,点击立即使用
>>点击生成密钥
>>生成应用公钥和私钥(保存好)。
③ 用应用公钥去配置生成支付宝公钥
>>回到沙箱环境,点击自定义密钥-->设置并查看
https://openhome.alipay.com/develop/sandbox/app
>>将应用公钥填写进去
>>生成支付宝公钥
④ 使用支付宝公钥和自己应用私钥
保存需要严格按照这个格式:
alipay_public_key.pem
-----BEGIN PUBLIC KEY-----
用应用公钥跟支付宝换来的支付宝公钥
-----END PUBLIC KEY-----
app_private_key.pem
-----BEGIN RSA PRIVATE KEY-----
签发软件签发的应用私钥
-----END RSA PRIVATE KEY-----
⑤ 写一个支付demo
├─iPay_test
│ aplipay_public_key.pem
│ app_private_key.pem
│ app_public_key.pem
│ pay.py
pay.py
from alipay import AliPay from alipay.utils import AliPayConfig # 应用私钥 app_private_key_string = open("./app_private_key.pem").read() # 支付宝公钥 alipay_public_key_string = open("aplipay_public_key.pem").read() # 拿到类实例化得到一个对象alipay alipay = AliPay( appid="2021000121697113", # 商户号 app_notify_url=None, app_private_key_string=app_private_key_string, alipay_public_key_string=alipay_public_key_string, sign_type="RSA2", # 加密方式 debug=True, # 是否是支付宝测试环境(沙箱环境) verbose=False, # useful for debugging config=AliPayConfig(timeout=15) # optional, request timeout ) # 对象调方法, 生成加密串 res = alipay.api_alipay_trade_page_pay( # subject='宝马7系', # 商品标题 out_trade_no='BMW308889888', # 订单号 total_amount=float(2600000), # 订单金额 return_url='', # get回调地址 notify_url='', # post回调地址 ) # 支付宝网关 + 加密串,才是真正的支付链接地址 print('https://openapi.alipaydev.com/gateway.do?'+res)
⑥ 运行成功后跳转到支付链接地址,用沙箱支付宝app扫一扫,支付成功
因为这个demo没有写回调地址,所以看不到支付成功显示,和跳转已支付的订单状态