如何使用Guzzle通过URl将数据传递给另一个应用程序?

时间:2017-01-29 07:14:11

标签: php laravel api laravel-5 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'
    ]);

但是我面临的问题是我无法通过Guzzle发送store_id。因为当我dd()输出时,我看到了响应NULL。意味着我无法通过URL发送store_id ..任何人都可以建议我如何通过form_parameter

1 个答案:

答案 0 :(得分: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()方法,但无法找到执行任务的简单方法。如果有任何更简单的方法,任何人都可以纠正我。