J'utilise Guzzle pour envoyer une requête HTTP à Gmail API.Guzzle Envoie une requête HTTP à l'API Gmail, 'Type de ressource invalide: objet'
il déclenche l'exception Uncaught 'InvalidArgumentException' avec le message 'Type de ressource non valide: objet' Il semble que j'ai alimenté GuzzleHttp\Psr7\Request()
Classe par erreur?
require_once __DIR__.'/vendor/autoload.php';
$client = new Google_Client();
$client->setScopes("https://www.googleapis.com/auth/gmail.readonly");
putenv('GOOGLE_APPLICATION_CREDENTIALS=sample.json');
$client->useApplicationDefaultCredentials();
// returns a Guzzle HTTP Client
$httpClient = $client->authorize();
$data = new stdClass;
$data-> topicName ='projects/sample.com:sample/topics/topic';
$data-> labelIds = ["INBOX"];
$data-> labelFilterAction = 'include';
$request = new GuzzleHttp\Psr7\Request('POST','https://www.googleapis.com/gmail/v1/users/[email protected]/watch',['Content-type'=>'application/json'],$data);
$response = $httpClient->send($request);
var_dump($response);
//------------output----------------------
Uncaught exception 'InvalidArgumentException' with message 'Invalid resource type: object'
Merci à Andrew Nolan et Denis Solakovic, maintenant $request
semble en format.
Voici la mise à jour: J'utilise un justificatif de compte de service pour regarder de nouveaux messages. Est-ce que quelqu'un sait où j'ai mal fait? Merci beaucoup.
require_once __DIR__.'/vendor/autoload.php';
$client = new Google_Client();
$client->setScopes("https://www.googleapis.com/auth/gmail.readonly");
putenv('GOOGLE_APPLICATION_CREDENTIALS=sample.json');
$client->useApplicationDefaultCredentials();
$gmailService = new Google_Service_Gmail($client);
// returns a Guzzle HTTP Client
$httpClient = $client->authorize();
$data = new stdClass;
$data-> topicName ='projects/sample.com:sample/topics/topic';
$data-> labelIds = ["INBOX"];
$data-> labelFilterAction = 'include';
$data = json_encode((array)$data);
$request = new GuzzleHttp\Psr7\Request('POST', 'https://www.googleapis.com/gmail/v1/users/[email protected]/watch',["Content-type" =>"application/json"],$data);
$response = $httpClient->send($request);
echo ($response->getBody());
//--------------output---------------------
{ "error": { "errors": [ { "domain": "global", "reason": "failedPrecondition", "message": "Bad Request" } ], "code": 400, "message": "Bad Request" } }
vous devez json_encode vos données. Vous envoyez GuzzleHttp \ Psr7 \ Request un objet mais il s'attend à ce que json. –
Comme mentionné par @AndrewNolan vous envoyez une requête avec en-tête qui indique application/json, vous devriez donc convertir votre objet de demande $ en JSON: '$ json = json_encode ((tableau) $ request);' –