2014-02-21 4 views
0

Я пытаюсь создать подпрограмму «как можно проще», чтобы получить названия кампаний AdWords.Ошибка API cookie AdWords API

Однако я получаю сообщение об ошибке

AuthenticationError.LOGIN_COOKIE_REQUIRED @; trigger: '<null>'

всякий раз, когда я запускаю следующий 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); 
+0

Я подозреваю, что это связано с кэшированием WSDL: если я установить «cache_wsdl» => WSDL_CACHE_NONE в настройках SoapClient, то я всегда получаю ошибку. – raugfer

ответ

0

Не знаю, почему это происходит. Первый вызов ошибки всегда происходит, вероятно, из-за загрузки WSDL. После этого он может быть уменьшен за счет увеличения кэша 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); 
Смежные вопросы