thinkphp用二级域名处理支付回调的核心是让子域名承载独立应用并专注实现回调逻辑。需创建pay应用、绑定pay.example.com域名、在app/pay中编写含原始数据读取和验签的回调方法,并将支付宝通知地址设为https://pay.example.com/notify/alipay。

ThinkPHP用二级域名处理支付回调,核心不是把回调地址“塞进子域名”,而是让子域名承载独立应用、再在该应用内专注写好回调逻辑。关键在于:子域名只负责路由分流,回调验证和业务处理仍由对应应用内部完成。
一、先建好子域名对应的应用
比如你要用 pay.example.com 专门处理所有支付回调,就得先创建一个叫 pay 的独立应用:
- 执行
php think build pay,生成app/pay/目录 - 确保
app/controller/已删除(触发多应用模式) - 在
app/pay/route.php中定义回调路由,例如:Route::post('notify/alipay', 'NotifyController@alipay');
二、绑定子域名到这个应用
在 route/app.php 中注册域名规则:
-
Route::domain('pay', 'pay');→ 访问 pay.example.com 就自动进入app/pay/ - 别忘了在
config/app.php开启:'url_domain_deploy' => true - Web服务器(Nginx/Apache)必须正确传递
HTTP_HOST头,否则框架收不到子域名信息
三、在子应用里写回调,不走通用入口
不要把支付宝回调写在 index 应用或根目录下,而要放在 app/pay/ 内部,例如:
- 控制器
app/pay/controller/NotifyController.php中的alipay()方法 - 开头必须用
file_get_contents('php://input')读原始数据,不能用$this->request->post() - 验签前对原始字符串做一次
urldecode(),再用支付宝 SDK 的rsaCheckV1()验证 - 验签通过后,更新订单状态前检查是否已处理(用
trade_no唯一索引或缓存notify_id)
四、回调地址就填子域名下的路径
在支付宝后台配置异步通知地址时,直接填:
https://pay.example.com/notify/alipay- 而不是
https://www.example.com/pay/notify/alipay或带 index.php 的路径 - 确保该 URL 可被公网访问,且 Nginx/Apache 已为
pay.example.com设置了正确的 root 和 PHP 处理规则
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











