You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:22:44