Как передать данные другому приложению через URL с помощью Guzzle?

Я хочу отправить данные из одного приложения в другое.. где я хочу отправить данные первого приложения во вторую форму приложения.. Для этого я использовал guzzle. И платформа, которую я использовал Laravel.

Вот первый контроллер приложения:

public function store(Request $request)
    {
        $payment = new Payment();
        $payment->username = $request->Input(['username']);
        $payment->price = $request->Input(['price']);
        $payment->purchase_id = $request->Input(['purchase_id']);
        $payment->save();
        $store_id =\Hash::make($payment->id);
        $price = $payment->price; 
        $client = new Client();
        $response = $client->request('GET', 'http://localhost/b/public/api/getPayment/{store_id}',[
            'form_params'=>['store_id'=>$store_id]
            ]);
    }

И вторая форма заявки:

 {!! Form::open(['method' => 'POST', 'route' => 'store', 'class'=>'form-horizontal','enctype'=>'multipart/form-data']) !!}
           {!! csrf_field() ; !!}                
                    <div class="form-group">
                        <label>Store ID</label>
                        <input type="text" class="form-control" name="storeId" value="{{$store_id}}"  placeholder="Store ID">
                    </div>
                    <button type="submit" class="btn btn-default">Submit</button>
            {!! Form::close() !!}

И во втором контроллере я помещаю маршрут в api.php

Route::get('/getPayment/{store_id}',[
    'uses'=>'PaymentController@create',
    'as'=>'create'
    ]);

Но проблема, с которой я столкнулся, заключается в том, что я не могу отправить store_idчерез Guzzle. Потому что, пока я dd() вывод, я вижу ответ NULL. Означает, что я не мог отправить store_id через URL-адрес. Может ли кто-нибудь предложить мне, как я могу передать form_parameter


person Hola    schedule 29.01.2017    source источник
comment
У вас есть другой laravel для вашего второго приложения или он находится в том же месте?   -  person PaladiN    schedule 29.01.2017
comment
Другое приложение Laravel   -  person Hola    schedule 29.01.2017
comment
просто добавьте этот код return $response->getBody(); после вашего $client->request() и покажите нам ответ этого кода   -  person PaladiN    schedule 29.01.2017
comment
Та же ошибка, которую я получаю, означает указанную выше.   -  person Hola    schedule 29.01.2017
comment
Я надеюсь, что второе приложение не получает данные формы, которые вы публикуете, или может создавать представления. Просто отлаживайте свой Route::get() независимо от того, получены ли параметры или нет. Вы можете проверить на этом примере stackoverflow.com/a/29723193/3887342   -  person PaladiN    schedule 29.01.2017
comment
Да, он возвращает null, когда я dd() параметр маршрута. Тогда есть ли неправильный код передачи параметра в контроллере?   -  person Hola    schedule 29.01.2017


Ответы (1)


Я только что протестировал этот блок кода с двумя экземплярами laravel, и он работает. Вам просто нужно добавить query в параметры, которые вы передаете.

Ваше первое приложение, вызывающее второе приложение отсюда:

$data = [
   'query' => [ 'page' => '2']
];

$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'http://127.0.0.2:8000/path', $data);
echo $response->getBody();

Теперь маршрут второго приложения, вызываемого guzzle, выглядит так:

use Illuminate\Http\Request;
Route::get('/path', function (Request $request) {
    return $request->all();
});

Итак, ваш код необходимо изменить как:

$data = [ 'query' =>   //<==add 'query' here
    ['form_params'=>
        ['store_id'=>$store_id]
    ]
];
$client = new Client();
$response = $client->request('GET', 'http://localhost/b/public/api/getPayment', $data);

Если вы хотите узнать больше о строке query, она здесь:

http://docs.guzzlephp.org/en/latest/quickstart.html#query-string-parameters

Надеюсь, это поможет вам.

Изменить:

В соответствии с вашими потребностями вам может не понадобиться guzzle, но для перенаправления в местоположение с дополнительными параметрами вам нужно использовать redirect(), например:

return redirect()->to('http://127.0.0.2:8000?page=2');

Я пробовал route() и другие redirect() методы, но не смог найти простого способа выполнить эту задачу. Если есть более простой способ, кто-нибудь может меня поправить.

person PaladiN    schedule 29.01.2017
comment
У меня есть один запрос, я могу отправить данные в другое приложение, но одна проблема заключается в том, что в маршруте значит, что запрос не должен быть в другом приложении? потому что я вижу имя http://localhost/a/public/store, тогда как должно быть http://localhost/b/public/api/getPayment почему так, не могли бы вы дать мне правильное объяснение, пожалуйста? - person Hola; 29.01.2017
comment
Я не мог понять, что вы говорите. Не могли бы вы уточнить? - person PaladiN; 29.01.2017
comment
Означает. Пока я отправляю данные в другое приложение в URL-адресе, я вижу старую ссылку приложения вместо новой. вот что я спрашиваю - person Hola; 29.01.2017
comment
@Hola Поскольку мы запрашиваем только второе приложение, мы не меняем URL-адрес. Итак, у вас есть сценарий, используемый для изменения URL-адреса? - person PaladiN; 29.01.2017
comment
Да вроде так, потому что я хочу достучаться до пользователя до второго приложения. Есть ли у вас предложения ? - person Hola; 30.01.2017
comment
На мой взгляд, вам может не понадобиться guzzle для выполнения задачи. Пожалуйста, посмотрите на обновленный ответ - person PaladiN; 30.01.2017