Python中支付宝支付接口对接流程整理
最近公司有个项目需要对接支付宝,官方提供的 SDK 不太适合,于是手动搞了个。 已经上传至 gitbub https://github.com/carVer1900/Alipay
文件大概阐述了接口开发的大概流程,代码也奉上了,如有问题,欢迎指正。
建了个 Python 的讨论群 902788038,欢迎大家加入,在这里你总会找到志同道合的人。
Python中支付宝支付接口对接流程整理
8 回复
支付宝支付接口对接,核心是处理异步通知和签名验证。这里给你一个基于官方SDK的完整示例,重点看异步通知处理部分。
首先安装官方SDK:
pip install alipay-sdk-python
下面是关键代码实现:
from alipay import AliPay
from alipay.utils import AliPayConfig
from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse
import json
# 初始化支付宝客户端
alipay = AliPay(
appid="你的APPID",
app_notify_url="https://yourdomain.com/alipay/notify/", # 异步通知地址
app_private_key_string=open("app_private_key.pem").read(),
alipay_public_key_string=open("alipay_public_key.pem").read(),
sign_type="RSA2",
debug=False, # 沙箱环境用True
config=AliPayConfig(timeout=15)
)
# 创建支付订单
def create_order(order_id, amount, subject):
order_string = alipay.api_alipay_trade_page_pay(
out_trade_no=order_id,
total_amount=str(amount),
subject=subject,
return_url="https://yourdomain.com/return/", # 同步返回地址
notify_url="https://yourdomain.com/alipay/notify/" # 异步通知地址
)
pay_url = "https://openapi.alipay.com/gateway.do?" + order_string
return pay_url
# 异步通知处理(关键!)
@csrf_exempt
def alipay_notify(request):
if request.method == "POST":
data = request.POST.dict()
signature = data.pop("sign", None)
# 验证签名
success = alipay.verify(data, signature)
if success:
trade_status = data.get("trade_status")
out_trade_no = data.get("out_trade_no")
if trade_status == "TRADE_SUCCESS":
# 支付成功,更新订单状态
update_order_status(out_trade_no, "paid")
return HttpResponse("success")
elif trade_status == "TRADE_CLOSED":
update_order_status(out_trade_no, "closed")
return HttpResponse("success")
return HttpResponse("fail")
return HttpResponse("Method not allowed")
# 查询订单状态
def check_order(out_trade_no):
result = alipay.api_alipay_trade_query(out_trade_no=out_trade_no)
return result.get("trade_status")
# 退款
def refund_order(out_trade_no, refund_amount):
result = alipay.api_alipay_trade_refund(
out_trade_no=out_trade_no,
refund_amount=str(refund_amount)
)
return result.get("msg") == "Success"
对接流程要点:
- 在支付宝开放平台创建应用,获取APPID
- 生成应用公钥和私钥(必须用RSA2)
- 配置应用公钥到支付宝后台
- 异步通知地址必须是公网可访问的HTTPS
- 收到通知后必须先验证签名再处理业务
签名验证是关键,不验证签名会有安全风险。异步通知处理要幂等,同一个通知可能多次发送。
建议先用沙箱环境测试,重点测试网络中断、重复通知等异常情况。
有对接当面付的吗?
对的
楼主是 python 后端吗 进群了😁
根据群里小伙伴指出的错误,对代码做了进一步优化和改正。
刚看到,这个比我的流程写的更详细些,我也是看了支付宝提供的官方 SDK 才写的,有些地方写的比较简单,我再好好观摩下,感谢。


