【教程】如何用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!

相关推荐
love530love5 小时前
LiveTalking 数字人项目 Windows 部署完全指南(EPGF 架构)
人工智能·windows·python·架构·livetalking·epgf
遇事不決洛必達5 小时前
【Python基础】GIL 锁是什么及其对爬虫的影响
爬虫·python·线程·进程·gil锁
星辰徐哥5 小时前
Spring Boot 微服务架构设计与实现
spring boot·后端·微服务
星辰徐哥5 小时前
Spring Boot 数据导入导出与报表生成
spring boot·后端·ui
明夜之约5 小时前
Spring Boot 自动装配源码
java·spring boot·后端
Leaton Lee5 小时前
Spring Boot分层架构详解:从Controller到Service再到Mapper的完整流程
java·spring boot·后端·架构
Micro麦可乐5 小时前
Spring Boot 实战:从零设计一个短链系统(含完整代码与数据库设计)
数据库·spring boot·后端·哈希算法·雪花算法·短链系统
Jinkxs5 小时前
Resilience4j- 与 Spring Boot 快速集成:自动配置与基础注解使用
java·spring boot·后端
毕设源码_郑学姐5 小时前
计算机毕业设计springboot网络相册设计与实现 基于Spring Boot框架的在线相册管理系统开发与应用 Spring Boot驱动的网络影集设计与实践
spring boot·后端·课程设计
辣机小司5 小时前
【踩坑记录:Spring Boot 配置文件读取值不一致?警惕 YAML 的“八进制陷阱”与 SnakeYAML 版本之谜】
java·spring boot·后端·yaml·踩坑记录