Python中支付宝支付接口对接流程整理

最近公司有个项目需要对接支付宝,官方提供的 SDK 不太适合,于是手动搞了个。 已经上传至 gitbub https://github.com/carVer1900/Alipay

文件大概阐述了接口开发的大概流程,代码也奉上了,如有问题,欢迎指正。

建了个 Python 的讨论群 902788038,欢迎大家加入,在这里你总会找到志同道合的人。


Python中支付宝支付接口对接流程整理

8 回复

写的还是比较粗糙的 0.0


支付宝支付接口对接,核心是处理异步通知和签名验证。这里给你一个基于官方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"

对接流程要点:

  1. 在支付宝开放平台创建应用,获取APPID
  2. 生成应用公钥和私钥(必须用RSA2)
  3. 配置应用公钥到支付宝后台
  4. 异步通知地址必须是公网可访问的HTTPS
  5. 收到通知后必须先验证签名再处理业务

签名验证是关键,不验证签名会有安全风险。异步通知处理要幂等,同一个通知可能多次发送。

建议先用沙箱环境测试,重点测试网络中断、重复通知等异常情况。

有对接当面付的吗?

楼主是 python 后端吗 进群了😁

根据群里小伙伴指出的错误,对代码做了进一步优化和改正。

https://github.com/fzlee/alipay

这里也有一个 py 的 sdk,我用了一年多了

刚看到,这个比我的流程写的更详细些,我也是看了支付宝提供的官方 SDK 才写的,有些地方写的比较简单,我再好好观摩下,感谢。

回到顶部