2017-03-07 18 views
1

私の会社のディストリビューターから注文を取り出すためのAPIクライアントを作成しました。 PUTで注文をダウンロードしたことを確認する必要があります。 PUTは正常に動作していますが、私の承認の確認でエラーが発生します。 Postmanを使用して、私はJSON本体メッセージを返します。GuzzleHttp - JSONエンコードされたボディを取得

私は戻って確認を置いたとき、私は次のエラーを取得する:

Type error: Argument 1 passed to GuzzleHttp\Client::send() must 
    implement interface Psr\Http\Message\RequestInterface, instance of 
    GuzzleHttp\Psr7\Response given, called in 
    /var/www/orders/app/Http/Controllers/edi/OrderController.php on line 86 

これはライン86である:

$response = $client->send($apirequest); 

関連するコード:

use Illuminate\Http\Request; 
    use App\Http\Requests; 
    use App\Http\Controllers\Controller; 
    use GuzzleHttp\Exception\GuzzleException; 
    use GuzzleHttp\Client as GuzzleHttpClient; 
    use GuzzleHttp\Psr7\Stream; 
    use Illuminate\Support\Facades\Input; 
    use Response; 
    use XmlParser; 
    use Psr\Http\Message\RequestInterface; 

    public function orderConfirm() 
    { 
    $uri = config('services.orders.orderack'); 

    $formdata = Input::all(); 
    $orders = Input::get('orders'); 

    try { 
     $client = new GuzzleHttpClient([ 
      'headers'=> [ 
       'Authorization' => '$user', 
       'ContractID' => '$contract', 
       'Content-Type' => 'application/json'] 
      ]); 

     $apirequest = $client->request('PUT', $uri, 
      ['body' => json_encode(
       [ 
        $orders 
       ] 
      )] 
     ); 

     $response = $client->send($apirequest); 
     $contents = (string) $response->getBody(); 

     return $contents; 

    } 
    catch (RequestException $ex) { 
     //Exception Handling 
     echo $ex; 
    } 

出力ポストマンから:

"Number of Orders Acknowledged: 1" 

SO上の他の記事から、この:

 $contents = (string) $response->getBody(); 

は、本体と他の人々が彼らの問題を修正し、それは私のために働いていない取得する方法です。

明らかに私はまだここに何かが不足しています!

答えて

0

$client->request()を呼び出すと、後で送信する要求オブジェクトを作成する代わりに、実際に要求が行われます(理由はGuzzleHttp\Psr7\Responseのインスタンスが返されます)。すでに送信されているため、何も送信しないようにクライアントに指示する必要はありません。 $client->request()の呼び出しの値に$response変数を設定するだけで済みます。

これは、Body exampleのPSR7ドキュメントに記載されています。

$response = $client->request('GET', 'http://httpbin.org/get'); 

手動でリクエストオブジェクトを作成するには、documented under Requestsとして、そのコンストラクタを使用してGuzzleHttp\Psr7\Requestのインスタンスを作成する必要があります。

// Create a request using a completely custom HTTP method 
$request = new \GuzzleHttp\Psr7\Request('MOVE', 'http://httpbin.org/move'); 

echo $request->getMethod(); 
// MOVE 
+0

優秀!どうもありがとうございました。私は送信を削除し、今は期待どおりに動作しています。 – unisolv

+0

それを聞いてうれしい! –

関連する問題