本文主要向大家介绍python做后台的移动端H5接入支付宝支付的全部流程, 所有步骤经过本人测试
近期公司项目临近尾声, 需要接入支付宝支付功能, 公司项目是一个移动端的网页项目, 后台用的是Django, 作者在接到需求的时候先去搜索了一波教程, 发现网上对于python+移动端网页接入支付宝的教程几乎没有, 官方的文档对python也不是很友好, 遂自行踩坑, 踩坑结束也就有了这篇文章, 希望能给大家一些帮助
python3.6.5
Django 3.0.4 (接入支付宝实际上对django版本没有限制)
alipay-sdk-python 3.3.398 (支付宝官方SDK)
由于官方文档对python不甚友好, 所以大家最好文档结合本文一起品尝, 效果更佳, 下面贴出本文对应的一些文档地址:
pip install alipay-sdk-python==3.3.398
官方SDK, 安装没什么可说的
此处借用官方的一张图来给大家介绍支付的整个流程
用户实际操作流程(也是官方的图):
正式项目需要一个实名认证过的支付宝账号登录支付宝开放平台并根据自己的需求创建应用并签约对应功能(此动作是为了获取接入所必须的appid, 支付宝公钥, 并授权回调地址)
支付宝开放平台
支付宝也提供了一个沙箱环境供开发者在测试开发阶段调试等等, 本文就是基于沙箱环境的一个教程, 不过请大家放心, 沙箱环境跟正式环境可以无缝切换,无需更改代码逻辑, 只需要更换appid及支付宝网关即可
支付宝沙箱应用
ALIPAY_APPID = '2016100xxxx39412' # 自己的沙箱appid
ALIPAY_DEBUG = True # 是否为沙箱, 后续创建alipay对象会用到
genrsa -out app_private_key.pem 2048
rsa -in app_private_key.pem -pubout -out app_public_key.pem
为了节省篇幅, 直接贴出我的代码, 注释的非常清楚
import os # 用于获取keys下秘钥文件路径
from django.conf import settings # 用于使用ALIPAY_APPID 及 APLPAY_DEBUG 动态调节沙箱环境或者正式环境
from alipay.aop.api.AlipayClientConfig import AlipayClientConfig # 用于创建客户端对象所需的配置类
from alipay.aop.api.DefaultAlipayClient import DefaultAlipayClient # 用于创建客户端对象
from alipay.aop.api.request.AlipayTradeWapPayRequest import AlipayTradeWapPayModel, AlipayTradeWapPayRequest # 手机网站支付所需的类
class Payment(View):
def post(self, request):
# 实例化客户端
alipay_client_config = AlipayClientConfig(settings.ALIPAY_DEBUG) # 创建配置类, True: 沙箱环境, False: 正式环境
alipay_client_config.app_id = settings.ALIPAY_APPID # 指定appid
# 指定自己的私钥, 用于支付宝验签
alipay_client_config.app_private_key = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), "keys/app_private_key.pem"), "r").read()
# 指定支付宝的公钥, 用于支付宝验签
alipay_client_config.alipay_public_key = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), "keys/alipay_public_key.pem"), "r").read()
client = DefaultAlipayClient(alipay_client_config) # 实例化客户端对象
# 构造跳转链接所需的参数(此处我只填了必填的几个参数, 具体可参考开发文档的请求参数说明)
model = AlipayTradeWapPayModel() #
model.out_trade_no = "20200410182552613" # 订单编号, 自己的后台生成(不能重复)
model.total_amount = "100.00" # 需要支付的价格
model.subject = "大梦_damon的python课程" # 订单抬头信息说明
model.product_code = "QUICK_WAP_WAY" # 手机网站支付的固定参数
request = AlipayTradeWapPayRequest(biz_model=model) # 创建请求对象
request.return_url = "http://127.0.0.1:8000/payment_success/" # 支付成功后的回跳地址
request.notify_url = "http://127.0.0.1:8000/payment_notify/" # 支付成功后的通知地址
# 执行API调用
alipay_url = client.page_execute(request, "GET") # 生成跳转链接url, 也可以指定POST方式的跳转, 不过前端处理起来比GET方式稍复杂
return JsonResponse({"alipay_url": alipay_url}) # 返回跳转链接给前端页面
前端收到响应后可以通过以下代码实现跳转
location.href = alipay_url
不出意外你就会看到图2的样子了
至此, 我们算是正式的接入了支付宝的支付, 至于用户支付成功后的回调逻辑等我下一篇文章再给大家详细介绍
欢迎大家评论或者指出文章中写的模糊或者逻辑错误的地方!
如果帮助到了你, 可否给我点个赞呢?