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

相关推荐
秃头佛爷38 分钟前
Python学习大纲总结及注意事项
开发语言·python·学习
深度学习lover2 小时前
<项目代码>YOLOv8 苹果腐烂识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·苹果腐烂识别
paopaokaka_luck3 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
API快乐传递者3 小时前
淘宝反爬虫机制的主要手段有哪些?
爬虫·python
码农小旋风4 小时前
详解K8S--声明式API
后端
Peter_chq4 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
Yaml45 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
小小小妮子~5 小时前
Spring Boot详解:从入门到精通
java·spring boot·后端
hong1616885 小时前
Spring Boot中实现多数据源连接和切换的方案
java·spring boot·后端
阡之尘埃5 小时前
Python数据分析案例61——信贷风控评分卡模型(A卡)(scorecardpy 全面解析)
人工智能·python·机器学习·数据分析·智能风控·信贷风控