Laravel电商系统付款成功后如何向前端传递并展示transaction Id
问题根因
你当前报错有两个核心原因:
- 控制器中执行
return back()属于重定向请求,控制器内的局部变量$transId不会自动传递到重定向后的视图,且你当前逻辑只存入了成功提示到session,没有把transactionId同步存入会话 - 视图中
{{$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
相关产品推荐
相关产品推荐

