web-dev-qa-db-ja.com

ガズル-ララヴェル。 x-www-form-url-encodedでリクエストを行う方法

APIを統合する必要があるため、関数を記述します。

public function test() {

    $client = new GuzzleHttp\Client();

try {
    $res = $client->post('http://example.co.uk/auth/token', [

    'headers' => [
        'Content-Type' => 'application/x-www-form-urlencoded',
            ],

    'json' => [
        'cliend_id' => 'SOMEID',
        'client_secret' => '9999jjjj67Y0LBLq8CbftgfdreehYEI=',
        'grant_type' => 'client_credentials'
]
            ]);

$res = json_decode($res->getBody()->getContents(), true);
dd($res);

}
catch (GuzzleHttp\Exception\ClientException $e) {
        $response = $e->getResponse();
        $result =  json_decode($response->getBody()->getContents());

    return response()->json(['data' => $result]);

    }

}

応答者として私はメッセージを得ました:

{"data":{"error":"invalid_clientId","error_description":"ClientId should be sent."}}

POSTMANアプリで同じデータを使用して同じURLを実行しようとすると、正しい結果が得られます。

enter image description here

私のコードの何が悪いのですか?私は正しいform_paramsを送信し、form_paramsをjsonに変更しようとしましたが、再び同じエラーが発生しました...

私の問題を解決するには?

6
Aleks Per

問題は、Postmanではデータをフォームとして送信しているが、Guzzleでは'json'オプション配列のキー。

'json''form_params'探している結果が得られます。

$res = $client->post('http://example.co.uk/auth/token', [
    'form_params' => [
        'client_id' => 'SOMEID',
        'client_secret' => '9999jjjj67Y0LBLq8CbftgfdreehYEI=',
        'grant_type' => 'client_credentials'
    ]
]);

問題のドキュメントへのリンクは次のとおりです。 http://docs.guzzlephp.org/en/stable/quickstart.html#sending-form-fields

また、タイプミスに気づきました-cliend_id の代わりに client_id

12
Dylan Pierce