Laravel对接Transbank支付时本地环境回调地址无法访问该如何处理
问题核心原因
你本地用php artisan serve启动的服务如果用的是内网IP(比如192.168.x.x、10.x.x.x这类),属于局域网私有地址,公网的Transbank回调服务器根本无法穿透局域网访问到你的本地服务,和你用artisan还是Xampp没有直接关系。
先修正代码错误
你的控制器confirmPay方法里存在变量名拼写错误,先修改避免后续跑通链路后还触发500错误:
// 原有错误代码 $confirm= (new Transaction)->commit($request->get('token_ws')); if($confirmacion->isApproved()){ // 变量名定义为$confirm,调用时写成了$confirmacion
修改为统一变量名即可。
本地调试回调的可行方案
Windows环境下两种常用解决方案:
- 方案1:使用内网穿透工具映射本地端口
安装支持Windows的内网穿透工具,配置映射本地8000端口,工具会生成一个公网可访问的临时域名,将你代码里的回调地址替换为「公网临时域名+/confirm_pay」即可,注意要确认穿透工具没有拦截POST请求,避免匹配不上你定义的POST类型回调路由。 - 方案2:本地模拟回调调试
如果仅需要调试业务逻辑,可以用Postman构造POST请求访问http://你的本地IP:8000/confirm_pay,主动带上Transbank回调时会传递的token_ws参数,模拟回调场景调试逻辑,等本地逻辑跑通后再部署到有公网IP的服务器测试真实回调。
额外检查项
如果你用的本身就是公网IP,先检查Windows防火墙有没有开放8000端口的入站规则,默认Windows防火墙会拦截外部对8000端口的访问,需要手动加规则放行。
不需要更换为Xampp,artisan serve本身即可满足调试需求,问题和服务环境无关。
内容的提问来源于stack exchange,提问作者Nautilus
相关产品推荐
相关产品推荐

