Google Adsense Services Account

↘锁芯ラ 提交于 2019-12-04 05:16:53

问题


I have the problem with Google Adsense API. I used Services Account to authen, and this is my code:

require_once dirname(__FILE__) . '/google-api-php-client/Google_Client.php';    
require_once dirname(__FILE__) . '/google-api-php-client/contrib/Google_AdSenseService.php';
require_once dirname(__FILE__) . '/google-api-php-client/contrib/Google_Oauth2Service.php';

$SERVICE_ACCOUNT_PKCS12_FILE_PATH = dirname(__FILE__) . '/keyfile.p12';

// create client object and set app name
$client = new Google_Client();
$client->setApplicationName("XXXX"); // name of your app

// set assertion credentials
$key  = file_get_contents($SERVICE_ACCOUNT_PKCS12_FILE_PATH);
$auth = new Google_AssertionCredentials("YYYYYY@developer.gserviceaccount.com", // email you added to GA
    array('https://www.googleapis.com/auth/adsense.readonly'), $key);

$client->setAssertionCredentials($auth);
$client->getAuth()->refreshTokenWithAssertion();
$accessToken = $client->getAccessToken();
// other settings
$client->setClientId("XYZ.apps.googleusercontent.com"); // from API console
$service   = new Google_AdsenseService($client);
$optParams = array('metric' => array('earnings'), 'dimension' => 'date');
$data      = $service->reports->generate('2013-01-01', '2013-03-03', $optParams);

And then I got this error messege:

Fatal error: Uncaught exception 'Google_ServiceException' with message 'Error calling GET https://www.googleapis.com/adsense/v1.3/reports?startDate=2013-01-01&endDate=2013-03-03&metric=earnings&dimension=date: (403) User does not have an AdSense account.' in /opt/lampp/htdocs/googleads/google-api-php-client/io/Google_REST.php:66 Stack trace: #0 /opt/lampp/htdocs/googleads/google-api-php-client/io/Google_REST.php(36): Google_REST::decodeHttpResponse(Object(Google_HttpRequest)) #1 /opt/lampp/htdocs/googleads/google-api-php-client/service/Google_ServiceResource.php(186): Google_REST::execute(Object(Google_HttpRequest)) #2 /opt/lampp/htdocs/googleads/google-api-php-client/contrib/Google_AdSenseService.php(849): Google_ServiceResource->__call('generate', Array) #3 /opt/lampp/htdocs/googleads/index.php(28): Google_ReportsServiceResource->generate('2013-01-01', '2013-03-03', Array) #4 {main} thrown in /opt/lampp/htdocs/googleads/google-api-php-client/io/Google_REST.php on line 66


回答1:


Service accounts are not available in the AdSense Management API.

If you want to use the API without user intervention, you can use the "Web application" or "Installed application" scenarios. Once the user grants access to your app, you can start requesting access tokens.

Check out the PHP samples: https://code.google.com/p/google-api-php-client/source/browse/#svn%2Ftrunk%2Fexamples%2Fadsense




回答2:


Unfortunately at the moment AdSense API doesn't support Service Account, so AdSense data is invisible for API (that's why you getting that error).

Perhaps the best solution is to use "Web application" login: https://developers.google.com/adsense/management/getting_started#auth



来源:https://stackoverflow.com/questions/18524535/google-adsense-services-account

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!