отправлять данные и перенаправлять на тот же URL-адрес поста без отправки формы - PullRequest
1 голос
/ 31 мая 2019

Мне нужно post данные для платежной службы (payment.com) и redirect для payment.com (для заполнения номера кредитной карты и т. Д.)

Традиционный способ сделать этонапример:

<form id="form" action="payment.com" method="POST">
</form>
<script type="text/javascript">
    document.getElementById('form').submit();
</script>

Но я хочу сделать это через controller, а не отправлять форму, поэтому никакие данные не могут быть изменены.


Это мой метод контроллера, и я пробовал два способа: redirect() и Guzzle

  1. Я пытался redirect() на URL с данными постов, но я получил «Метод GET не поддерживается для этого маршрута. Поддерживаемые методы: POST.»
public function postToPaymentServer(Request $request)
{
    $amount=$request['amount'];
    $payment=[
        'amount'=>$amount,
        'auth-id'=>config('auth-id')
    ];
    return redirect(url('api/payment/server'))->with(compact('payment'));
}

ps.Здесь я сделал локальный маршрут для имитации payment.com в маршрутах / api.php

Route::post('payment/server','PaymentController@server');

Я пытался использовать Guzzle, но он не будет перенаправлять на URL-адрес поста .
public function postToPaymentServer(Request $request)
{
    $amount=$request['amount'];
    $payment=[
        'amount'=>$amount,
        'auth-id'=>config('auth-id')
    ];
    $client = new Client();
    $response = $client->post('payment.com',[
        'body'=>[
            'payment'=>$payment,
            'allow_redirects' => true
        ],
    ]);
    return $response;
}

Любые предложения будут с благодарностью!

1 Ответ

0 голосов
/ 01 июня 2019

Вам необходимо получить последнее местоположение из истории перенаправлений и перенаправить в это местоположение.

Посмотрите на параметр track_redirects :

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;

$httpClient = new Client();

$response = $httpClient->post(
    'http://payment.com',
    [
        RequestOptions::ALLOW_REDIRECTS => [
            'max' => 5,
            'track_redirects' => true,
        ],
        RequestOptions::FORM_PARAMS => [
            'payment' => $payment,
        ],
    ]
);

$lastLocation = end($response->getHeaders()['X-Guzzle-Redirect-History']);

return redirect($lastLocation);
...