Laravel中如何从外部调用函数返回URL并在主控制器重定向
解决方案
1. 修改外部类的start_request方法,返回网关URL
把ZRequest类里直接返回重定向的逻辑改成返回拼接好的网关URL字符串即可:
// App\Controller\MyExternal\ZRequest.php(注意Laravel要求类名与文件名严格对应,建议把原Function.php改为ZRequest.php) namespace App\Controller\MyExternal; class ZRequest { public function start_request($amount, $invoice_name, $user_mobile) { // 保留你的支付网关逻辑,比如获取$response->trackId的代码 // ... $startGateWayUrl = "https://gateway.com/start/".$response->trackId; // 直接返回URL字符串,而非重定向实例 return $startGateWayUrl; } }
2. 在主控制器中接收URL并执行重定向
调用start_request时接收返回的URL,由主控制器完成重定向操作:
// 主控制器中的调用代码 $z_request = new \App\Controller\MyExternal\ZRequest(); $gatewayUrl = $z_request->start_request( $amount, $invoice_name, $user_mobile ); // 主控制器执行重定向 return redirect()->to($gatewayUrl);
额外优化:错误处理
如果支付网关逻辑可能出现异常,可在start_request中抛出异常,主控制器做对应处理:
// ZRequest类中 public function start_request(...) { // 逻辑处理 if (empty($response->trackId)) { throw new \Exception("获取支付跟踪ID失败"); } return $startGateWayUrl; } // 主控制器中 try { $gatewayUrl = $z_request->start_request(...); return redirect()->to($gatewayUrl); } catch (\Exception $e) { // 返回错误提示或页面 return back()->withErrors(['msg' => $e->getMessage()]); }
内容的提问来源于stack exchange,提问作者Seyyed Mohammad Hosseini
相关产品推荐
相关产品推荐

