PHP

Google 提供了一个 PHP 客户端库,用于与 Ad Manager API 进行交互。我们建议将客户端库与 Composer 搭配使用。

首先,在您选择的 IDE 中创建一个新项目,或将依赖项添加到现有项目。Google 会将客户端库工件作为 googleads/ad-manager 发布到 Packagist。

composer require googleads/ad-manager

配置凭据

PHP 客户端库使用 OAuth2 和应用默认凭据 (ADC) 进行身份验证。

ADC 会按顺序在以下位置搜索凭据:

  1. GOOGLE_APPLICATION_CREDENTIALS 环境变量。
  2. 通过 Google Cloud CLI (gcloud CLI) 设置的用户凭据。
  3. 在 Google Cloud 上运行时,请使用关联到 Google Cloud 资源的服务账号。

如需创建和配置 ADC 凭据,请参阅身份验证

提交第一个请求

每项服务都有一个 ServiceClient 对象,其中包含适用于每个 REST 方法的方法。以下示例会读取 Network 对象。

<?php

use Google\Ads\AdManager\V1\Client\NetworkServiceClient;
use Google\Ads\AdManager\V1\GetNetworkRequest; use Google\Ads\AdManager\V1\Network; use Google\ApiCore\ApiException; /** * API to retrieve a Network object. * * @param string $formattedName Resource name of Network. * Format: networks/{network_code} * Please see {@see NetworkServiceClient::networkName()} for help formatting this field. */ function get_network_sample(string $formattedName): void { // Create a client. $networkServiceClient = new NetworkServiceClient(); // Prepare the request message. $request = (new GetNetworkRequest()) ->setName($formattedName); // Call the API and handle any network failures. try { /** @var Network $response */ $response = $networkServiceClient->getNetwork($request); printf('Response data: %s' . PHP_EOL, $response->serializeToJsonString()); } catch (ApiException $ex) { printf('Call failed with message: %s' . PHP_EOL, $ex->getMessage()); } } /** * Helper to execute the sample. * */ function callSample(): void { $formattedName = NetworkServiceClient::networkName('NETWORK_CODE'); get_network_sample($formattedName); }

如需查看其他方法和资源的示例,请参阅 GitHub 代码库 googleapis/php-ads-ad-manager

记录 HTTP 请求和响应

PHP 客户端库支持符合 PSR-3 标准的日志记录器,用于记录 HTTP 请求和响应。默认情况下,日志记录功能处于停用状态。

如需启用对标准输出的默认日志记录,请在 PHP 代码或环境中将环境变量 GOOGLE_SDK_PHP_LOGGING 设置为 true

putenv('GOOGLE_SDK_PHP_LOGGING=true');

$client = new NetworkServiceClient();
export GOOGLE_SDK_PHP_LOGGING=true

或者,您也可以在构建服务客户端时传递任何符合 PSR-3 的记录器:

use Monolog\Handler\StreamHandler;
use Monolog\Level;
use Monolog\Logger;

$monologLogger = new Logger('sdk client');
$monologLogger->pushHandler(new StreamHandler('php://stdout', Level::Debug));

$client = new NetworkServiceClient([
    'logger' => $monologLogger
]);

处理错误

在 PHP 客户端库中,所有 Ad Manager API 错误都会抛出 ApiException 类型的异常:

解析错误

“错误原因”字段用于唯一标识错误类型。使用此字段确定如何处理错误。

try {
    $response = $networkServiceClient->getNetwork($formattedName);
    printf('Response data: %s' . PHP_EOL, $response->serializeToJsonString());
} catch (ApiException $ex) {
    printf('Error message: %s' . PHP_EOL, $ex->getBasicMessage());
    printf('Reason: %s' . PHP_EOL, $ex->getReason());
}

Ad Manager API 错误还包含一个唯一的 request_id,您可以将其提供给支持团队,以寻求排查问题方面的帮助。以下示例会提取 request_id

$requestInfo = null;
foreach ($ex->getMetadata() as $metadata) {
    if($metadata["@type"] === "type.googleapis.com/google.rpc.RequestInfo") {
        $requestInfo = $metadata;
        break;
    }
}
if ($requestInfo == null) {
    printf('Unexpected empty RequestInfo');
} else {
    printf('RequestId: %s' . PHP_EOL, $requestInfo['requestId']);
}

构建资源名称

客户端库提供了一些辅助类,用于根据 ID 构建资源名称。

use Google\Ads\AdManager\V1\Client\OrderServiceClient;

//  Constructs a String in the format:
//  "networks/{networkCode}/orders/{orderId}"
$orderName = OrderServiceClient::orderName("NETWORK_CODE", "ORDER_ID");

配置代理设置

PHP 客户端库会遵循 HTTP_PROXYHTTPS_PROXY 环境设置。