【问题标题】:Laravel 5: how to redirect with data to external resource form controllerLaravel 5:如何将数据重定向到外部资源表单控制器
【发布时间】:2016-02-04 17:04:13
【问题描述】:

我想把用户送到支付口。通常可以用这种形式:

<form method="post" action="https://demo.moneta.ru/assistant.htm">
    <input type="hidden" name="MNT_ID" value="12345678">
    <input type="hidden" name="MNT_TRANSACTION_ID" value="000001">
    <input type="hidden" name="MNT_CURRENCY_CODE" value="USD">
    <input type="hidden" name="MNT_AMOUNT" value="123.45">
    <input type="submit" value="Pay">
</form>

用户按“支付”并重定向到支付门。

但我想实现这个工作流程:

  1. 用户输入送货信息、付款方式等。
  2. 然后他按“支付”和
  3. 首先我要存储数据(我在控制器中进行)...
  4. ... 之后我想将用户重定向到支付门。 (这对我来说不清楚)

问题是:如何将用户从控制器重定向到外部资源(方法应该是 POST,我需要发送一些数据,例如 MNT_ID 等(参见上面的表单示例)?

【问题讨论】:

标签: php redirect laravel-5 payment-gateway payment


【解决方案1】:

它可以帮助你像往常一样使用 Laravel 控制器并重定向到外部资源。

在您看来,将操作重定向到您的控制器:

<form method="post" action={{ action('Controller@method') }}>
    <input type="hidden" name="MNT_ID" value="12345678">
    <input type="hidden" name="MNT_TRANSACTION_ID" value="000001">
    <input type="hidden" name="MNT_CURRENCY_CODE" value="USD">
    <input type="hidden" name="MNT_AMOUNT" value="123.45">
    <input type="submit" value="Pay">
</form>

在您的控制器中:

public function method(Request $request)
{
     // Validate
     // Store
     // ...
     Redirect::away('https://demo.moneta.ru/assistant.htm')->withInputs(Input::all());

}

我没有测试它,但我很确定它可以工作(或接近解决方案)。

您可以从官方指南中获得其他建议:http://laravel.com/docs/5.1/responses#redirects

【讨论】:

  • return Redirect::away("https://demo.moneta.ru/assistant.htm")-&gt;withInputs(Input::all()); 没有帮助。正如我在浏览器的网络浏览器中看到的那样:请求是 GET 并且请求中没有数据。顺便说一句,我添加了Input::all(),因为没有它就会出现错误。
  • 你是对的,这是一个 GET 请求,withInputs() 需要 Input:all() 作为参数。您是否尝试过通过 AJAX 请求验证表单(以便您可以验证和存储数据)并重定向到外部 url 浏览器端?
【解决方案2】:

我想这就是你要找的东西:

调用你的函数控制器:

public function redirectPOST(){
//params
$USERNAME='username';
return view('your vie', compact('USERNAME'));}

那么在你看来:

<html xmlns="http://www.w3.org/1999/xhtml"><head>
<script type="text/javascript">
 function closethisasap() {
 document.forms["redirectpost"].submit();
  }
 </script>
  </head>
 <body onload="closethisasap();">
 <form name="redirectpost" method="POST" action="http://URL">
 <input type="hidden" id="USERNAME" name="USERNAME" value="{{$USERNAME}}">
 </form>
 </body>
 </html>

【讨论】:

    【解决方案3】:

    您可以使用 Laravel 的重定向重定向到外部 URL。 首先将重定向导入您的控制器并

    use Illuminate\Support\Facades\Redirect;
    return Redirect::away($redirectUrl)->with(['user_id'=>$user_id]);
    

    将帮助您将请求作为带有所需参数的帖子发送。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-29
      • 2012-04-02
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      相关资源
      最近更新 更多