Google 提供了一个 PHP 客户端库,用于与 Ad Manager API 进行交互。我们建议将客户端库与 Composer 搭配使用。
首先,在您选择的 IDE 中创建一个新项目,或将依赖项添加到现有项目。Google 会将客户端库工件作为 googleads/ad-manager
发布到 Packagist。
composer require googleads/ad-manager
配置凭据
PHP 客户端库使用 OAuth2 和应用默认凭据 (ADC) 进行身份验证。
ADC 会按顺序在以下位置搜索凭据:
GOOGLE_APPLICATION_CREDENTIALS
环境变量。- 通过 Google Cloud CLI (gcloud CLI) 设置的用户凭据。
- 在 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_PROXY
和 HTTPS_PROXY
环境设置。