如何通过CURL/SOAP调用Google AdWords API获取账户总消费金额
使用Google AdWords API在PHP中获取账户总消费金额
我之前做AdWords相关开发时刚好踩过类似的坑,给你分享一个亲测可行的PHP实现方案,步骤和代码都整理好了:
先搞定前置准备
- 首先通过Composer安装官方客户端库:
composer require googleads/googleads-php-lib - 确保你已经拿到了AdWords API的所有必要凭据:
- 开发者Token(Developer Token)
- OAuth2的Client ID、Client Secret、Refresh Token
- 目标账户的客户ID(Customer ID,格式是xxx-xxx-xxxx)
完整实现代码
下面的代码会通过AdWords Reporting API直接获取指定账户的总消费,你只需要替换掉对应的凭据和日期范围即可:
<?php require __DIR__ . '/vendor/autoload.php'; use Google\AdsApi\AdWords\AdWordsServices; use Google\AdsApi\AdWords\AdWordsSession; use Google\AdsApi\AdWords\AdWordsSessionBuilder; use Google\AdsApi\AdWords\v201809\cm\ReportDefinition; use Google\AdsApi\AdWords\v201809\cm\ReportDefinitionDateRangeType; use Google\AdsApi\AdWords\v201809\cm\ReportDownloader; use Google\AdsApi\AdWords\v201809\cm\Selector; use Google\AdsApi\Common\OAuth2TokenBuilder; use Google\AdsApi\Common\GoogleAdsException; // 替换成你的真实凭据 define('DEVELOPER_TOKEN', 'YOUR_DEVELOPER_TOKEN'); define('CLIENT_ID', 'YOUR_CLIENT_ID'); define('CLIENT_SECRET', 'YOUR_CLIENT_SECRET'); define('REFRESH_TOKEN', 'YOUR_REFRESH_TOKEN'); define('CUSTOMER_ID', 'YOUR_CUSTOMER_ID'); // 格式示例:123-456-7890 try { // 初始化OAuth2认证 $oAuth2Credential = (new OAuth2TokenBuilder()) ->withClientId(CLIENT_ID) ->withClientSecret(CLIENT_SECRET) ->withRefreshToken(REFRESH_TOKEN) ->build(); // 创建AdWords会话 $session = (new AdWordsSessionBuilder()) ->withDeveloperToken(DEVELOPER_TOKEN) ->withOAuth2Credential($oAuth2Credential) ->withCustomerId(CUSTOMER_ID) ->build(); $adWordsServices = new AdWordsServices(); $reportDownloader = $adWordsServices->get($session, ReportDownloader::class); // 构建报告查询:聚焦账户层级的消费数据 $selector = new Selector(); $selector->setFields(['Cost']); // 设置自定义日期范围,格式为YYYYMMDD,也可以换成预设值比如LAST_30_DAYS $dateRange = new \Google\AdsApi\AdWords\v201809\cm\DateRange(); $dateRange->setMin('20240101'); // 开始日期 $dateRange->setMax('20240601'); // 结束日期 $selector->setDateRange($dateRange); // 定义报告规则 $reportDefinition = new ReportDefinition(); $reportDefinition->setReportName('Account Total Cost Report'); $reportDefinition->setDateRangeType(ReportDefinitionDateRangeType::CUSTOM_DATE); $reportDefinition->setReportType('ACCOUNT_PERFORMANCE_REPORT'); $reportDefinition->setSelector($selector); $reportDefinition->setDownloadFormat('CSV'); // 下载并解析报告 $reportCsv = $reportDownloader->downloadReport($reportDefinition); $lines = explode("\n", trim($reportCsv)); // 计算总消费:跳过表头,转换微单位为实际金额 $totalCost = 0; foreach ($lines as $index => $line) { if ($index === 0) continue; // 跳过表头行 $columns = str_getcsv($line); if (isset($columns[0])) { // AdWords返回的Cost是微单位(1美元=1000000微单位),需转换 $totalCost += (float)$columns[0] / 1000000; } } echo "指定账户总消费金额:$totalCost 美元\n"; } catch (GoogleAdsException $e) { printf( "API请求出错:%s\n错误详情:\n%s\n", $e->getMessage(), $e->getError()->getXml() ); } catch (Exception $e) { printf("程序执行错误:%s\n", $e->getMessage()); } ?>
关键注意事项
- 单位转换:AdWords API返回的金额是微单位(比如1美元对应1000000),一定要除以1000000转换成实际货币单位,不然数值会大100万倍。
- 日期灵活调整:如果不需要自定义日期,可以把
DateRangeType换成LAST_7_DAYS、LAST_MONTH等预设值,不用手动设置start和end日期。 - API版本兼容:代码里用的是v201809版本,你可以根据官方文档换成最新的API版本(注意不同版本的类结构可能略有差异)。
- 权限验证:确保你的OAuth2账号拥有目标账户的访问权限,否则会返回权限不足的错误。
内容的提问来源于stack exchange,提问作者Pankaj K
相关产品推荐
相关产品推荐

