PHP code example of jiangwang / ad-ocean-sdk

1. Go to this page and download the library: Download jiangwang/ad-ocean-sdk library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

jiangwang / ad-ocean-sdk example snippets



AdOceanSdk\Application;
use AdOceanSdk\Advertiser\Params\AdvertiserInfoGetParams;

// 初始化 SDK
$app = Application::init();

// 设置 Access Token(单账号场景最简单)
$app->client()->setAccessToken('your-access-token');

// 调用 API - 获取广告主信息
$response = $app->apis()->openAdvertiserInfoGetApi(['advertiser_id' => 123456]);

// 获取响应数据
$advertiserInfo = $response->getData();
echo $advertiserInfo->toArray();

// 访问API返回的额外字段(即使未在Data类中定义)
if (isset($advertiserInfo->extra_field)) {
    echo $advertiserInfo->extra_field;
}

use AdOceanSdk\Advertiser\Params\AdvertiserInfoGetParams;

// 使用参数对象方式调用
$params = AdvertiserInfoGetParams::from(['advertiser_id' => 123456]);
$response = $app->apis()->openAdvertiserInfoGetApi($params);

// 或者链式构造(如果参数对象支持)
$params = AdvertiserInfoGetParams::from([]);
$params->advertiser_id = 123456;
$response = $app->apis()->openAdvertiserInfoGetApi($params);

use AdOceanSdk\Application;
use AdOceanSdk\SdkConfig;

$config = SdkConfig::make()
    ->setDomain('https://api.oceanengine.com/')
    ->setTimeout(30)
    ->setAccessToken('your-access-token')
    ->addHeader('X-Trace-Id', 'trace-demo');

$app = Application::init(config: $config);

use AdOceanSdk\Application;
use AdOceanSdk\SdkConfig;
use Psr\Log\NullLogger;

$config = SdkConfig::make()
    ->setDomain('https://api.oceanengine.com/')
    ->setTimeout(20)
    ->setAccessToken('your-access-token')
    ->addHeader('X-Trace-Id', 'trace-demo')
    ->setHttpClientOptions([
        'connect_timeout' => 5,
        'proxy' => 'http://127.0.0.1:7890',
        'verify' => true,
    ])
    ->setLogger(new NullLogger())
    ->setThrowOnApiError(
        enabled: true,
        authErrorCodes: [40100, 40103, 40105],
        rateLimitErrorCodes: [40000, 40110],
    )
    ->setRetryPolicy(maxAttempts: 3, baseDelayMs: 200, maxDelayMs: 5000)
    ->setOAuthTokenProvider(
        tokenGetter: fn (): ?string => 'current-token',
        tokenRefresher: fn (): string => 'new-token',
    );

$app = Application::init(config: $config);

use AdOceanSdk\Application;
use AdOceanSdk\RequestClient;

final class OceanRequestClient extends RequestClient
{
}

$app = Application::init(OceanRequestClient::make());

use AdOceanSdk\Application;
use AdOceanSdk\SdkConfig;
use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;

$stack = HandlerStack::create();

$httpClient = new Client([
    'base_uri' => 'https://api.oceanengine.com/',
    'timeout' => 20,
    'handler' => $stack,
]);

$config = SdkConfig::make()
    ->setHttpClient($httpClient)
    ->setAccessToken('your-access-token');

$app = Application::init(config: $config);

$config = SdkConfig::make()
    ->setHttpClientOptions([
        'connect_timeout' => 5,
        'proxy' => 'http://127.0.0.1:7890',
        'verify' => '/path/to/cacert.pem',
    ]);

$client = $app->client();

$client->setAccessToken('another-access-token');
$client->addHeader('X-Debug', '1');
$client->setTimeout(10);

use AdOceanSdk\Kernel\Middleware\MiddlewareInterface;
use AdOceanSdk\Kernel\Middleware\RequestContext;
use GuzzleHttp\Promise\PromiseInterface;

final class TraceMiddleware implements MiddlewareInterface
{
    public function process(RequestContext $context, callable $next): PromiseInterface
    {
        $headers = $context->options['headers'] ?? [];
        $headers['X-Trace-Id'] = uniqid('trace_', true);

        return $next($context->withOption('headers', $headers));
    }
}

$client = Application::init()->client();
$client->addMiddleware(new TraceMiddleware());

use AdOceanSdk\Kernel\Middleware\ApiErrorMiddleware;

$client = Application::init()->client();

$client->pipeline()->insertBefore(
    ApiErrorMiddleware::class,
    new TraceMiddleware(),
);

use AdOceanSdk\Kernel\Middleware\MiddlewareInterface;
use AdOceanSdk\Kernel\Middleware\RequestContext;
use GuzzleHttp\Promise\PromiseInterface;

final class AccessTokenMiddleware implements MiddlewareInterface
{
    public function process(RequestContext $context, callable $next): PromiseInterface
    {
        $headers = $context->options['headers'] ?? [];
        $advertiserId = $context->params['advertiser_id'] ?? null;

        if ($advertiserId !== null) {
            $headers['Access-Token'] = $this->resolveTokenByAdvertiserId((int) $advertiserId);
        }

        return $next($context->withOption('headers', $headers));
    }

    private function resolveTokenByAdvertiserId(int $advertiserId): string
    {
        // 从缓存/数据库中读取当前 advertiser 对应的 token
        return 'resolved-token';
    }
}

$config = \AdOceanSdk\SdkConfig::make()
    ->setHttpClient(new \GuzzleHttp\Client(['base_uri' => 'https://api.oceanengine.com/']))
    ->addMiddleware(new AccessTokenMiddleware());

$app = \AdOceanSdk\Application::init(config: $config);

$config = SdkConfig::make()
    ->setAccessToken('your-access-token')
    ->setThrowOnApiError()
    ->setRetryPolicy(maxAttempts: 3, baseDelayMs: 200, maxDelayMs: 5000)
    ->setOAuthTokenProvider(
        tokenGetter: fn () => 'current-token',
        tokenRefresher: fn () => 'new-token',
    );

$config = SdkConfig::make()->setThrowOnApiError(
    enabled: true,
    authErrorCodes: [40100, 40103, 40105],
    rateLimitErrorCodes: [40000, 40110],
);

$config = SdkConfig::make()
    ->setThrowOnApiError(rateLimitErrorCodes: [40000, 40110])
    ->setRetryPolicy(maxAttempts: 4, baseDelayMs: 200, maxDelayMs: 3000);

$config = SdkConfig::make()
    ->setThrowOnApiError(authErrorCodes: [40100, 40103, 40105])
    ->setOAuthTokenProvider(
        tokenGetter: fn (): ?string => 'current-token',
        tokenRefresher: fn (): string => 'new-token',
    );

use Psr\Log\NullLogger;

$config = SdkConfig::make()->setLogger(new NullLogger());

use AdOceanSdk\Advertiser\Params\AdvertiserInfoGetParams;

$promise = $app->client()->callAsync(
    'AdOceanSdk\\Advertiser\\Api\\AdvertiserInfoGetApi',
    AdvertiserInfoGetParams::from(['advertiser_id' => 123456])
);

$response = $promise->wait();

$results = $app->client()->callBatch([
    'a' => ['AdOceanSdk\\Advertiser\\Api\\AdvertiserInfoGetApi', ['advertiser_id' => 1]],
    'b' => ['AdOceanSdk\\Advertiser\\Api\\AdvertiserInfoGetApi', ['advertiser_id' => 2]],
], concurrency: 5);

use AdOceanSdk\RequestFormatEnum;
use AdOceanSdk\RequestMethodEnum;

$client = $app->client();

// GET / DELETE 默认按 QUERY 发送参数
$client->get('open_api/2/advertiser/info/', [
    'advertiser_id' => 123456,
]);

$client->delete('open_api/2/tools/item/', [
    'id' => 7,
]);

// POST / PUT / PATCH 默认按 JSON 发送参数
$client->post('open_api/2/tools/bind/', [
    'advertiser_id' => 123456,
    'name' => 'demo',
]);

// 也可以显式指定 method / format / headers / timeout / domain
$client->request(
    RequestMethodEnum::PATCH,
    'open_api/2/tools/item/',
    ['status' => 'paused'],
    RequestFormatEnum::FORM_PARAMS,
    ['X-Trace-Id' => 'trace-001'],
    timeout: 10,
    domain: 'https://api.oceanengine.com/'
);

use AdOceanSdk\RequestApi;
use AdOceanSdk\RequestParams;
use AdOceanSdk\RequestMethodEnum;

class CustomApi extends RequestApi
{
    protected string $address = 'open_api/2/custom/api/';
    protected RequestMethodEnum $method = RequestMethodEnum::GET;
}

class CustomParams extends RequestParams
{
    public int $custom_param;
}

// 方式一:直接通过 client 调用
$app = Application::init();
$response = $app->client()->call(new CustomApi(), CustomParams::from([
    'custom_param' => 123
]));

// 方式二:注册到 OpenApi 调度器
$app->registerApi('customApi', CustomApi::class);
$response = $app->apis()->customApi([
    'custom_param' => 123,
]);