前言
在一些业务开发中会遇到在线支付的需求。因为这个功能涉及到钱,在开发过程中难免存在调试障碍。好在国内的主流支付平台如支付宝和微信支付都已经提供了沙箱环境,在这个沙箱环境中可以很方便的对接入的支付功能进行调试和开发。
本文会以Python3为开发语言接入支付宝沙箱支付功能为例进行讲解,力争写出一个完善详实的操作指南,不尽之处,欢迎在评论区留言。
官方文档
支付宝沙箱支付的文档地址:opendocs.alipay.com/common/02kk...
沙箱环境是支付宝开放平台为开发者提供的与生产环境完全隔离的联调测试环境,开发者在沙箱环境中完成的接口调用不会对生产环境中的数据造成任何影响。
沙箱为开放的产品提供 有限功能范围 的支持,可以覆盖产品的绝大部分核心链路和对接逻辑,便于开发者快速学习、尝试、开发和调试。
官方文档对大部分操作写的都很详细,按照文档操作基本可以解决大部分问题。
登录沙箱支付控制台后,会提供沙箱支付的账号和appid已经应用公钥,应用私钥需要使用支付宝开发平台密钥工具生成。
在做完这些准备工作后就可以在代码中进行沙箱支付接入实现了。
另外支付宝官方还给贴心的给出了在线调试方案:open.alipay.com/api/apiDebu...
沙箱支付控制台
登录沙箱支付控制台之后你看到的界面如下: 同时可以拿到相关的沙箱账号,切记这里还需要配合下载安装支付宝沙箱版扫码才能使用。
重要:这里接口加签方式选自定义
公私钥配置
进入到支付宝沙箱支付控制台,点击沙箱应用。
公钥是基于私钥生成的,可解密,但是私钥不行。
使用支付宝开发平台密钥工具,生成支付宝公私钥。
最后在项目中新建 private_key.txt
和 public_key.txt
这两个文件,把私钥和公钥内容粘贴到对应的文件中,供SDK使用。
注意,因为公钥、私钥的内容需要放到如下文本中间:
公钥
vbnet
-----BEGIN PUBLIC KEY-----
这里放你的公钥
-----END PUBLIC KEY-----
私钥
vbnet
-----BEGIN PRIVATE KEY-----
这里放你的私钥
-----END PRIVATE KEY-----
实现
安装SDK
支付宝官方提供了一个Python的SDK叫alipay-sdk-python,但是这个亲测发现非常难用,最要命的是文档不全,不推荐使用。
这里推荐使用 python-alipay-sdk,这个模块对支付宝官方的接口做了封装,使用起来及其简单方便。这是一个开源项目,使用的人不少,有1.2k的star,文档也很简洁。
安装依赖
pip
pip install python-alipay-sdk
封装支付类
新建 alipay.py
文件,写入如下代码:
这里需要注意:private_key.txt
、public_key.txt
这两个文件的路径。
python
from alipay import AliPay
'''
# 初始化支付对象
out_trade_no 商品订单号 唯一的
total_amount 商品价格
subject 商品的名称
return_url 同步回调网址--用于前端,付成功之后回调
'''
def alipay (out_trade_no, total_amount, subject, return_url):
# 实例化支付类
alipayCase = AliPay(
appid = 'xxxxxxxxx', # 换成你自己的
app_notify_url=None, # 默认回调 url
app_private_key_string = open("private_key.txt").read(),
alipay_public_key_string = open("public_key.txt").read(),
sign_type = 'RSA2', # RSA 或者 RSA2
debug = True, # 默认 False,这里设为True SDK内部就会走沙箱支付,False就是正常支付
verbose = False # 输出调试数据
)
# 生成收款二维码
alipayQRCode = alipayCase.api_alipay_trade_precreate(
out_trade_no = out_trade_no,
total_amount = total_amount,
subject = subject,
notify_url = return_url
)
return alipayQRCode['qr_code']
调用支付
下面的实例代码调用了上面封装的支付函数,通过接口把收款二维码返回给前台。
这个例子使用的是
django
框架,ctx.response
是框架提供的响应函数,明白意思即可。
python
from alipay import alipay
def Alipay (self, ctx):
"""
支付宝支付API
@param {Object} ctx http请求上下文
"""
print("===================支付宝=====================")
payUrl = alipay(
out_trade_no = str(int(time.time() * 1000)),
total_amount = ctx.query['pay_money'],
subject = ctx.query['goods_name'],
return_url = ''
)
return ctx.response(json.dumps({"result": payUrl}, ensure_ascii=False))
总结
本文演示了如何使用Python3做支付宝沙箱支付功能,简单介绍了官方文档中沙箱支付的配置和使用,指出使用过程中需要注意的点。
最后给出了一个沙箱支付应用的实例,从SDK选择和安装,到封装支付类和业务中调用,力求将支付宝沙箱支付功能操作讲解清晰。
最后的最后,不要用官方SDK!不要用官方SDK!不要用官方SDK!