web-dev-qa-db-ja.com

POSTリクエストをGuzzleでLaravel

ZohoMailのAPIを使用して、アプリケーションを介してメールを送信しようとしています。しかし、それは私に与え続けます:

"{errorCode": "INVALID_METHOD"}、 "status":{"code":404、 "description": "Invalid Input"}}

これが私が行おうとしている電話へのリンクです: https://www.zoho.com/mail/help/api/post-send-an-email.html#Request_Body

これが私の機能です:

public static function sendEmail ($AccountId, $AuthCode, $FromAddress, $ToAddress, $Subject, $Content){

    $client = new Client(); //GuzzleHttp\Client
    $URI = 'http://mail.zoho.com/api/accounts/' . $AccountId . '/messages';
    $headers = ['Content-Type' => 'application/json', 'Authorization' => 'Zoho-authtoken ' . $AuthCode];
    $body = array('fromAddress' => $FromAddress, 'toAddress' => $ToAddress, 'subject' => $Subject, 'content' => $Content);
    $Nbody = json_encode($body);
    $response = $client->post($URI, $headers, $Nbody);
    echo "DONE!";

}

電話のかけ方を変えてみましたが、問題ないようです。 PostManで通話をテストしましたが、正常に動作するため、通話の方法に問題がある可能性があります。どんな助けでも大歓迎です。

3
Siddiqui

CURLでテストした後、URLがhttpではなくhttpsに「移動」されていることがわかりました。 httpだけを使用して、通話はPostmanで行われていましたが、Guzzleでは行われませんでした。私が行った唯一の変更は、URLを作成することでした。

https://mail.zoho.com/api/accounts/

ウェブサイトはそれを単なるhttpとしてリストし、リクエストはPostManで処理されます。同じAPIからGuzzleのhttpだけで以前に呼び出しを行ったことがあり、それらは通過しました。誰かがこれが起こった理由と、httpを使用するときのこの特定の呼び出しがGuzzleではなくPostManで機能する理由を理解するのを手伝ってくれるなら、それは素晴らしいことです。

0
Siddiqui

同じ配列にデータとヘッダーを作成し、2番目の引数として渡す必要があります。このように使用します。

$client = new Client();
$URI = 'http://mail.zoho.com/api/accounts/'.$AccountId.'/messages';
$params['headers'] = ['Content-Type' => 'application/json', 'Authorization' => 'Zoho-authtoken ' . $AuthCode];
$params['form_params'] = array('fromAddress' => $FromAddress, 'toAddress' => $ToAddress, 'subject' => $Subject, 'content' => $Content);
$response = $client->post($URI, $params);
echo "DONE!";

幸運を!

2
Kavan Pancholi
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'url',
    [
        GuzzleHttp\RequestOptions::JSON => 
        ['key' => 'value']
    ],
    ['Content-Type' => 'application/json']
);

$responseJSON = json_decode($response->getBody(), true);
1
shalonteoh
 $this->clients = new Client(['base_uri' => 'Url', 'timeout'  => 2.0]);
    $params['headers'] = ['Content-Type' => 'application/json'];
    $params['json'] = array(
      'parama1'=>$req->parama1,
      'parama1'=>$req->parama2,
      'parama3'=>$req->parama3,
    );
    $response = $this->clients->get('SearchBiz',$params);
    $business = $response->getBody();
    return View("myviewbiz")->with('business',json_decode($business));
0
Niclausel

使用するタイプ:

$response = $client->post($URI, $headers, ['json' => $body]);

の代わりに

$Nbody = json_encode($body);
$response = $client->post($URI, $headers, $Nbody);
0