Laravel集成Paytm支付网关后点击支付按钮无法跳转至商户页面
解决Paytm支付网关无法跳转至商户页面的问题
看起来你遇到的问题是点击提交后,没有正常跳转到Paytm的支付页面,直接跳到了回调地址的空白页对吧?我帮你梳理几个关键的排查和修复点:
1. 替换prepare方法里的占位符参数
你代码里的user、mobile_number、email用的是占位符文本,Paytm支付网关需要真实的用户信息才能完成跳转验证,直接用占位符会导致验证失败,进而直接触发回调。
把这部分代码修改为从请求中获取用户提交的真实数据:
$payment->prepare([ 'order' => $input['order_id'], 'user' => $request->name, // 改用用户提交的姓名 'mobile_number' => $request->mobile_no, // 改用用户提交的手机号 'email' => $request->email, // 改用用户提交的邮箱 'amount' => $input['fee'], 'callback_url' => url('api/payment/status') ]);
2. 确认路由配置的正确性
- 确保
order方法对应的路由是POST请求(因为表单提交应该用POST),而回调方法paymentCallback需要同时支持GET和POST请求(Paytm的回调可能会用POST方式发起)。 - 如果把回调路由放在
api.php里,需要将该路由排除在CSRF验证之外,否则Laravel会拦截Paytm的回调请求。
路由示例(web.php)
Route::get('register', [OrderController::class, 'register']); Route::post('order', [OrderController::class, 'order']); // 允许GET和POST请求访问回调地址 Route::match(['get', 'post'], 'api/payment/status', [OrderController::class, 'paymentCallback']);
CSRF白名单配置(VerifyCsrfToken.php)
如果回调路由在api.php或者需要绕过CSRF,打开app/Http/Middleware/VerifyCsrfToken.php,把回调地址加入$except数组:
protected $except = [ 'api/payment/status', ];
3. 确认Paytm配置文件正确发布
确保你已经执行过包的配置发布命令,让.env里的商户信息能正确被读取:
php artisan vendor:publish --provider="Anand\LaravelPaytmWallet\PaytmWalletServiceProvider"
发布后检查config/paytm-wallet.php里的配置项是否和你的.env文件内容一致。
4. 本地测试的额外注意事项
如果是在本地localhost测试,Paytm的回调请求无法直接访问到你的本地服务,后续支付完成后的回调会失败。你可以用ngrok这类工具把本地8000端口暴露到公网,然后把callback_url换成ngrok提供的公网地址,比如:
'callback_url' => 'https://xxxx-xx-xx-xx-xx.ngrok.io/api/payment/status'
先完成前三点的修改,应该就能正常跳转到Paytm的商户支付页面了。
内容的提问来源于stack exchange,提问作者user9750871
相关产品推荐
相关产品推荐

