You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8集成Paytm支付网关时回调API未携带Authorization header问题求助

问题根因分析
  1. auth:api中间件拦截的核心原因:Paytm回调分两种场景,要么是Paytm官方服务器发起的异步通知请求,要么是用户从Paytm页面跳转回你站点的同步回调,两类请求默认都不会携带你存在localStorage里的access token,自然无法通过Passport的身份校验。
  2. 读取session为null的原因:Laravel默认的api路由组没有挂载\Illuminate\Session\Middleware\StartSession::class中间件,在api路由下操作session不会持久化;且Paytm服务器发起的回调请求不会携带用户浏览器的session cookie,就算开了session也读不到对应数据。
解决方案

按两类回调场景分别处理:

场景1:Paytm服务端异步回调(必做,用于最终更新订单状态)

  • 移除该回调接口的auth:api中间件,该请求由Paytm官方服务器发起,无需用户登录态。
  • 替换身份校验逻辑为Paytm官方签名校验:用后台存储的Paytm商户密钥对回调参数做签名校验,确认请求来源合法、参数未被篡改即可。
  • 回调参数中会包含你发起支付时传入的order_id字段,直接通过order_id关联对应订单和用户,无需登录态即可更新订单状态。

场景2:用户支付完成后跳转回你站点的前端同步回调

该场景用于给用户展示支付结果,可任选以下一种方式处理:

  • 方式一:跳转携带临时标识
    • 前端发起支付请求时,后端生成一个一次性有效、设置过期时间的临时token,和当前订单、用户绑定后存入数据库。
    • 把该临时token作为回调地址的query参数传给Paytm,Paytm跳转回你站点时会自动带回该参数。
    • 前端拿到query中的临时token后传给后端校验,校验通过后返回支付结果,同时失效该临时token避免重复使用。
  • 方式二:直接读取本地存储的token
    用户从Paytm跳转回你的站点时,依然是同域名环境,可以正常读取localStorage中存储的access token,你可以在跳转后的页面初始化时,直接拿本地的token请求支付结果接口即可,该方式实现简单,配合服务端异步回调做状态兜底即可。
原有session方案的修正方式(不推荐)

如果你要继续使用session存储token的方案,需要先给跳转前存session的接口、回调接口都挂载StartSession和EncryptCookies中间件(或直接分配到web路由组),才能正常读写session,该方案仅适用于前端同步回调场景,无法支持Paytm服务端异步回调。

内容的提问来源于stack exchange,提问作者fahad shaikh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 18:36:00