thinkphp对接支付宝支付的核心是理清发起支付、确认付款、通知结果三步。需配置appid、密钥、异步通知地址,用yansongda/pay sdk生成跳转链接,并严格验证异步通知签名后更新订单状态。

ThinkPHP 对接支付宝支付,核心是把支付宝的支付能力安全、稳定地嵌入到你的业务流程里。关键不在于写多少代码,而在于理清三件事:怎么发起支付、怎么确认用户真的付了、怎么告诉用户结果。下面按实际开发顺序讲清楚。
一、准备凭证与环境
去支付宝开放平台创建应用,拿到四个东西:
- AppID:应用唯一标识,正式和沙箱环境各有一个,别混用
- 应用私钥(private_key):你自己生成,千万别泄露,用于签名请求
- 支付宝公钥(ali_public_key):从开放平台“开发者中心→应用公钥”页面复制,用于验签通知
-
异步通知地址(notify_url):必须是能被公网直接访问的 HTTPS 地址,比如
https://yourdomain.com/api/pay/alipay/notify
密钥要处理干净:去掉 -----BEGIN RSA PRIVATE KEY----- 这类头尾行,所有换行符替换成空格,合并成单行字符串再填进配置。
二、安装 SDK 并配置参数
推荐使用 Yansongda/pay 统一 SDK,它同时支持支付宝和微信,适配 ThinkPHP6+,维护活跃:
- 执行命令安装:
composer require yansongda/pay:^4.0 - 在
config/pay.php中写入配置,结构清晰,区分环境:
'alipay' => [
'default' => [
'app_id' => env('ALIPAY_APP_ID'),
'notify_url' => env('ALIPAY_NOTIFY_URL'),
'return_url' => env('ALIPAY_RETURN_URL'),
'ali_public_key' => env('ALIPAY_PUBLIC_KEY'),
'private_key' => env('ALIPAY_PRIVATE_KEY'),
'sign_type' => 'RSA2',
],
],
];
然后在 .env 文件中补全真实值,例如:
ALIPAY_NOTIFY_URL=https://api.yourdomain.com/pay/alipay/notify
ALIPAY_PRIVATE_KEY=MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC...
三、实现支付请求接口
在控制器中调用 SDK 生成跳转链接,前端用 window.location.href 跳过去即可:
- 引入门面:
use Yansongda\Pay\Pay; - 构造订单参数(注意字段名和类型必须严格匹配):
'out_trade_no' => 'ORD' . date('ymdHis') . rand(1000, 9999), // 商户订单号
'subject' => '会员续费',
'total_amount' => '19.90',
'body' => '12个月高级会员',
'product_code' => 'FAST_INSTANT_TRADE_PAY', // 手机网站支付固定值
];
- 调用并返回跳转 URL:
return json(['code' => 0, 'url' => $url]);
用户点击后会跳转到支付宝收银台,完成支付动作。
四、处理异步通知(最关键)
支付宝会在支付成功后,向你配置的 notify_url 发起 POST 请求。这个通知不可被信任为最终依据,但它是更新订单状态的唯一可靠来源:
- 接收原始 POST 数据(不要用
input('post.'),会破坏签名) - 调用 SDK 验证签名:
Pay::alipay()->verify(); - 验证通过后,检查
trade_status是否为TRADE_SUCCESS或TRADE_FINISHED - 查库确认该订单是否已处理过(幂等性),没处理则更新订单状态 + 记录日志
- 返回字符串
success(小写,无空格、无换行),否则支付宝会持续重发
同步回调 return_url 只作前端提示用,不能查数据库或改状态——因为用户可能关掉页面、手动修改 URL,甚至根本没付款就点回退。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











