Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php AdWords API过期cookie错误_Php_Authentication_Cookies_Adwords Api V201109 - Fatal编程技术网

Php AdWords API过期cookie错误

Php AdWords API过期cookie错误,php,authentication,cookies,adwords-api-v201109,Php,Authentication,Cookies,Adwords Api V201109,我试图构建一个“尽可能简单”的例程来检索AdWords活动名称 但是,我收到了这个错误消息 AuthenticationError.LOGIN_COOKIE_REQUIRED@;触发器:“” 每当我第一次运行下面的PHP脚本时 随后的运行会正常运行几个小时,直到我再次收到错误(我相信引用的cookie再次过期) 这饼干是干什么的?有人能指出发生了什么以及如何修复它吗 <?php $refreshToken=/* omitted */; $clientId=/* omitted */; $

我试图构建一个“尽可能简单”的例程来检索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);

不确定为什么会发生这种情况。第一次调用总是发生错误,可能是由于WSDL加载。之后,可以通过增加WSDL缓存ttl来缓解此问题:

$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);

我怀疑这与WSDL缓存有关:如果我在SoapClient选项中设置'cache\u WSDL'=>WSDL\u cache\u NONE,那么我总是会得到错误。