Ошибка истекшего файла cookie API AdWords
Я пытаюсь создать "максимально простую" процедуру получения названий кампаний AdWords.
Тем не менее, я получаю это сообщение об ошибке
AuthenticationError.LOGIN_COOKIE_REQUIRED @; Триггер:
'
всякий раз, когда я запускаю следующий скрипт PHP в первый раз.
Последующие запуски работают нормально в течение нескольких часов, пока я не получу ошибку снова (я полагаю, что срок действия указанного файла cookie снова истекает).
О чем это печенье? Может кто-нибудь точно определить, что происходит и как это исправить?
<?php
$refreshToken=/* omitted */;
$clientId=/* omitted */;
$clientSecret=/* omitted */;
$clientCustomerId=/* omitted */;
$developerToken=/* omitted */;
$ch=curl_init('https://accounts.google.com/o/oauth2/token');
curl_setopt($ch,CURLOPT_HEADER,false);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_CUSTOMREQUEST,'POST');
curl_setopt($ch,CURLOPT_POSTFIELDS,http_build_query(array(
'refresh_token'=>$refreshToken,
'client_id'=>$clientId,
'client_secret'=>$clientSecret,
'grant_type'=>'refresh_token',
)));
$json=curl_exec($ch);
curl_close($ch);
$object=json_decode($json);
$accessToken=$object->access_token;
$namespace='https://adwords.google.com/api/adwords/cm/v201309';
$soapClient=new SoapClient($namespace.'/CampaignService?wsdl',array(
'features'=>SOAP_SINGLE_ELEMENT_ARRAYS,
'encoding'=>'utf-8',
'stream_context'=>stream_context_create(array(
'http'=>array(
'header'=>'Authorization : Bearer '.$accessToken,
),
)),
));
$soapClient->__setSoapHeaders(new SoapHeader($namespace,'RequestHeader',array(
'clientCustomerId'=>$clientCustomerId,
'developerToken'=>$developerToken,
'userAgent'=>'TestApp',
'validateOnly'=>false,
'partialFailure'=>false,
)));
try
{
$result=$soapClient->get(array(
'serviceSelector'=>array(
'fields'=>array('Name'),
),
));
}
catch (SoapFault $e)
{
$result=$e->getMessage();
}
var_dump($result);
1 ответ
Решение
Не уверен, почему это происходит. При первом вызове всегда происходит ошибка, возможно, из-за загрузки WSDL. После этого его можно уменьшить, увеличив tstl кеша WSDL:
$ttl=ini_get('soap.wsdl_cache_ttl');
ini_set('soap.wsdl_cache_ttl',100*365*24*60*60); // 100 years
$soapClient=new SoapClient($namespace.'/CampaignService?wsdl',array(
'features'=>SOAP_SINGLE_ELEMENT_ARRAYS,
'encoding'=>'utf-8',
'cache_wsdl'=>WSDL_CACHE_BOTH,
'stream_context'=>stream_context_create(array(
'http'=>array(
'header'=>'Authorization : Bearer '.$accessToken,
),
)),
));
ini_set('soap.wsdl_cache_ttl',$ttl);