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

Laravel电商系统付款成功后如何向前端传递并展示transaction Id

问题根因

你当前报错有两个核心原因:

  1. 控制器中执行return back()属于重定向请求,控制器内的局部变量$transId不会自动传递到重定向后的视图,且你当前逻辑只存入了成功提示到session,没有把transactionId同步存入会话
  2. 视图中{{$transId->transactionId}}的写法错误,你从请求拿到的$transId本身就是交易ID字符串,不需要再调用属性

解决步骤

1. 修改控制器代码,将交易ID存入session

更新confirmPayment方法的成功逻辑,把transactionId同步存入会话:

public function confirmPayment(Request $request){
    $request->validate(['transactionId'=>'required']);
    $transId = $request->transactionId;
    $exists = Payment::where('mpesa_trans_id',$transId)->latest()->first();
    if(!$exists){
        $error= ["success"=>false, "error"=>"Unable to confirm your transaction code. Please contact admin.. :)"];
        session($error);
        return back();
    }
    // 新增trans_id字段存入session
    $message = ["success"=>true, "message"=>"Payment successful!", "trans_id" => $transId];
    session($message);
    return back();
}

2. 修改视图代码,从session中读取交易ID

增加非空判断,只有支付成功后才展示交易ID,避免未付款时出现报错:

<div class="frm-grp">
    <label>@lang('Transaction Id')</label>
    <input type="text" name="transactionId" placeholder="@lang('Example: OIB9FQP9H7')">
    {{-- 只有支付成功时展示交易ID --}}
    @if(session('success'))
    <span class="text-box">Your Transaction Id Is</span>
    <span>{{ session('trans_id') }}</span>
    @endif
</div>

如果你需要展示数据库中存储的其他支付相关字段,也可以把$exists->id存入session,后续在视图中根据ID查询完整支付记录即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:39:03