1. Go to this page and download the library: Download andy87/php-client-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/ */
andy87 / php-client-sdk example snippets
declare(strict_types=1);
use and_y87\PhpClientSdk\Request\Prompt\AbstractPrompt;
/**
* Describes a request for loading one user by identifier.
*/
final class GetUserPrompt extends AbstractPrompt
{
protected const METHOD = 'GET';
protected const ENDPOINT = '/users/{id}';
protected const FIELD_MAP = [
'id' => 'id',
'
declare(strict_types=1);
use and_y87\PhpClientSdk\Request\Prompt\PrivatePrompt;
use and_y87\PhpClientSdk\Request\Prompt\PublicPrompt;
/**
* Describes a public health-check request.
*/
final class HealthPrompt extends PublicPrompt
{
protected const METHOD = 'GET';
protected const ENDPOINT = '/health';
}
/**
* Describes a private order creation request.
*/
final class CreateOrderPrompt extends PrivatePrompt
{
protected const METHOD = 'POST';
protected const ENDPOINT = '/orders';
protected const AUTHORIZATION_PROFILE = 'orders-api';
}
declare(strict_types=1);
use and_y87\PhpClientSdk\Response\Model\AbstractResponse;
/**
* Contains user data returned by the API.
*/
final class GetUserResponse extends AbstractResponse
{
protected const FIELD_MAP = [
'id' => 'id',
'name' => 'name',
];
protected const REQUIRED_FIELDS = ['id', 'name'];
public int $id;
public string $name;
}
declare(strict_types=1);
use and_y87\PhpClientSdk\Client\Provider\AbstractProvider;
/**
* Provides typed access to user API methods.
*/
final class UsersProvider extends AbstractProvider
{
/**
* Loads one user by identifier.
*
* @param int $id User identifier.
*
* @return GetUserResponse Typed API response.
*
* @throws InvalidArgumentException When prompt validation fails.
* @throws RuntimeException When authorization or transport fails.
* @throws UnexpectedValueException When a successful response misses
declare(strict_types=1);
use and_y87\PhpClientSdk\Security\Authorization\Strategy\NullAuthorizationStrategy;
use and_y87\PhpClientSdk\Client\Config\ClientOptions;
use and_y87\PhpClientSdk\Transport\Native\NativeHttpTransport;
use and_y87\PhpClientSdk\Transport\Retry\DefaultRetryPolicy;
$provider = new UsersProvider(
baseUrl: 'https://api.example.com',
authorizationStrategy: new NullAuthorizationStrategy(),
transport: new NativeHttpTransport(),
options: new ClientOptions(
timeout: 30,
retryPolicy: new DefaultRetryPolicy(maxAttempts: 2),
),
);
$response = $provider->getUser(123);
if ($response->hasError()) {
$error = $response->getError();
echo $error?->message ?? 'API request failed.';
}
echo $response->getStatusCode();
declare(strict_types=1);
use and_y87\PhpClientSdk\Client\Config\ClientOptions;
$options = new ClientOptions(
strictValidation: true,
validatePrompt: false,
);
declare(strict_types=1);
use and_y87\PhpClientSdk\Client\Config\BaseUrl;
$baseUrl = new BaseUrl(
host: 'api.example.com',
protocol: 'https',
prefix: 'api/v1',
);
declare(strict_types=1);
use and_y87\PhpClientSdk\Client\Event\BeforeRequestEvent;
use and_y87\PhpClientSdk\Client\Event\ClientEvents;
use and_y87\PhpClientSdk\Client\Runtime\ClientRuntime;
$runtime = new ClientRuntime(
headers: [
'X-Client' => 'crm',
],
events: [
ClientEvents::BEFORE_REQUEST => static function (BeforeRequestEvent $event): void {
$event->request->headers['X-Trace-Id'] = bin2hex(random_bytes(8));
},
],
);
$runtime->addHeaders([
'X-Account' => 'main',
]);
declare(strict_types=1);
use and_y87\PhpClientSdk\Security\Authorization\Strategy\NullAuthorizationStrategy;
$authorization = new NullAuthorizationStrategy();
declare(strict_types=1);
use and_y87\PhpClientSdk\Security\Authorization\Strategy\ClientCredentialsAuthorizationStrategy;
$authorization = new ClientCredentialsAuthorizationStrategy(
tokenUrl: 'https://auth.example.com/oauth/token',
clientId: 'client-id',
clientSecret: 'client-secret',
scope: 'users.read',
timeout: 30,
);
declare(strict_types=1);
use and_y87\PhpClientSdk\Security\Authorization\Strategy\ClientCredentialsAuthorizationStrategy;
use and_y87\PhpClientSdk\Transport\Cache\SimpleCacheAdapter;
$authorization = new ClientCredentialsAuthorizationStrategy(
tokenUrl: 'https://auth.example.com/oauth/token',
clientId: 'client-id',
clientSecret: 'client-secret',
tokenCache: new SimpleCacheAdapter($psr16Cache),
tokenCacheKey: 'oauth:example:client-id',
clockSkew: 60,
);
protected const AUTHORIZATION_REQUIRED = false;
declare(strict_types=1);
use and_y87\PhpClientSdk\Security\Authorization\Strategy\ApiKeyAuthorizationStrategy;
use and_y87\PhpClientSdk\Security\Authorization\Resolver\AuthorizationProfileStrategyResolver;
use and_y87\PhpClientSdk\Security\Authorization\Resolver\PromptClassAuthorizationStrategyResolver;
use and_y87\PhpClientSdk\Client\Config\ClientOptions;
$options = new ClientOptions(
authorizationResolver: new PromptClassAuthorizationStrategyResolver([
GetUserPrompt::class => new ApiKeyAuthorizationStrategy('X-Api-Key', 'secret'),
]),
);
$options = new ClientOptions(
authorizationResolver: new AuthorizationProfileStrategyResolver([
'orders-api' => new ApiKeyAuthorizationStrategy('X-Api-Key', 'secret'),
]),
);
declare(strict_types=1);
use and_y87\PhpClientSdk\Contracts\Http\HttpTransportInterface;
use and_y87\PhpClientSdk\Transport\Http\HttpRequest;
use and_y87\PhpClientSdk\Transport\Http\HttpResponse;
/**
* Sends HTTP requests through an application-specific client.
*/
final class CustomTransport implements HttpTransportInterface
{
/**
* Sends an HTTP request.
*
* @param HttpRequest $request Request data.
*
* @return HttpResponse Response data.
*
* @throws RuntimeException When the request cannot be sent.
*/
public function send(HttpRequest $request): HttpResponse
{
throw new RuntimeException('Implement transport integration here.');
}
}
declare(strict_types=1);
use and_y87\PhpClientSdk\Security\Authorization\Strategy\NullAuthorizationStrategy;
use and_y87\PhpClientSdk\Client\Config\ClientOptions;
use and_y87\PhpClientSdk\Testing\Mock\MockTransport;
use and_y87\PhpClientSdk\Testing\Mock\PromptClassMockResponseResolver;
use and_y87\PhpClientSdk\Testing\Mock\RouteMockResponseResolver;
$resolver = (new RouteMockResponseResolver())
->addJson('GET', '/users/{id}', [
'id' => 123,
'name' => 'Mock User',
]);
$provider = new UsersProvider(
baseUrl: 'https://api.example.com',
authorizationStrategy: new NullAuthorizationStrategy(),
transport: new MockTransport($resolver),
options: new ClientOptions(validatePrompt: false),
);
declare(strict_types=1);
use and_y87\PhpClientSdk\Testing\Mock\MockTransport;
use and_y87\PhpClientSdk\Testing\Mock\PromptClassMockResponseResolver;
$resolver = (new PromptClassMockResponseResolver())
->addJson(GetUserPrompt::class, [
'id' => 123,
'name' => 'Mock User',
]);
$provider = new UsersProvider(
baseUrl: 'https://api.example.com',
authorizationStrategy: new NullAuthorizationStrategy(),
transport: new MockTransport($resolver),
);
declare(strict_types=1);
use and_y87\PhpClientSdk\Transport\Native\NativeHttpTransport;
use and_y87\PhpClientSdk\Transport\Trace\TraceableTransport;
use and_y87\PhpClientSdk\Security\Authorization\Strategy\NullAuthorizationStrategy;
$transport = new TraceableTransport(new NativeHttpTransport());
$provider = new UsersProvider(
baseUrl: 'https://api.example.com',
authorizationStrategy: new NullAuthorizationStrategy(),
transport: $transport,
);
$response = $provider->getUser(123);
$lastRecord = $transport->getLastRecord();