【教程】如何用Python3做支付宝沙箱支付

前言

在一些业务开发中会遇到在线支付的需求。因为这个功能涉及到钱,在开发过程中难免存在调试障碍。好在国内的主流支付平台如支付宝和微信支付都已经提供了沙箱环境,在这个沙箱环境中可以很方便的对接入的支付功能进行调试和开发。

本文会以Python3为开发语言接入支付宝沙箱支付功能为例进行讲解,力争写出一个完善详实的操作指南,不尽之处,欢迎在评论区留言。

官方文档

支付宝沙箱支付的文档地址:opendocs.alipay.com/common/02kk...

沙箱环境是支付宝开放平台为开发者提供的与生产环境完全隔离的联调测试环境,开发者在沙箱环境中完成的接口调用不会对生产环境中的数据造成任何影响。

沙箱为开放的产品提供 有限功能范围 的支持,可以覆盖产品的绝大部分核心链路和对接逻辑,便于开发者快速学习、尝试、开发和调试。

官方文档对大部分操作写的都很详细,按照文档操作基本可以解决大部分问题。

登录沙箱支付控制台后,会提供沙箱支付的账号和appid已经应用公钥,应用私钥需要使用支付宝开发平台密钥工具生成。

在做完这些准备工作后就可以在代码中进行沙箱支付接入实现了。

另外支付宝官方还给贴心的给出了在线调试方案:open.alipay.com/api/apiDebu...

沙箱支付控制台

登录沙箱支付控制台之后你看到的界面如下: 同时可以拿到相关的沙箱账号,切记这里还需要配合下载安装支付宝沙箱版扫码才能使用。

重要:这里接口加签方式选自定义

公私钥配置

进入到支付宝沙箱支付控制台,点击沙箱应用。

公钥是基于私钥生成的,可解密,但是私钥不行。

使用支付宝开发平台密钥工具,生成支付宝公私钥。

最后在项目中新建 private_key.txtpublic_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.txtpublic_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!

相关推荐
鸽芷咕1 小时前
【Python报错已解决】ModuleNotFoundError: No module named ‘paddle‘
开发语言·python·机器学习·bug·paddle
子午1 小时前
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
人工智能·python·cnn
风等雨归期1 小时前
【python】【绘制小程序】动态爱心绘制
开发语言·python·小程序
Adolf_19931 小时前
Flask-JWT-Extended登录验证, 不用自定义
后端·python·flask
冯宝宝^1 小时前
基于mongodb+flask(Python)+vue的实验室器材管理系统
vue.js·python·flask
叫我:松哥1 小时前
基于Python flask的医院管理学院,医生能够增加/删除/修改/删除病人的数据信息,有可视化分析
javascript·后端·python·mysql·信息可视化·flask·bootstrap
海里真的有鱼1 小时前
Spring Boot 项目中整合 RabbitMQ,使用死信队列(Dead Letter Exchange, DLX)实现延迟队列功能
开发语言·后端·rabbitmq
工业甲酰苯胺2 小时前
Spring Boot 整合 MyBatis 的详细步骤(两种方式)
spring boot·后端·mybatis
Eiceblue2 小时前
Python 复制Excel 中的行、列、单元格
开发语言·python·excel
NLP工程化2 小时前
对 Python 中 GIL 的理解
python·gil