<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
stellarwp / licensing-api-client-wordpress example snippets
declare(strict_types=1);
namespace MyPlugin\Providers;
use Nyholm\Psr7\Factory\Psr17Factory;
use Psr\Http\Client\ClientInterface;
use Psr\Http\Message\RequestFactoryInterface;
use Psr\Http\Message\StreamFactoryInterface;
use LiquidWeb\LicensingApiClient\Api;
use LiquidWeb\LicensingApiClient\Config;
use LiquidWeb\LicensingApiClient\Contracts\LicensingClientInterface;
use LiquidWeb\LicensingApiClient\Http\ApiVersion;
use LiquidWeb\LicensingApiClient\Http\AuthContext;
use LiquidWeb\LicensingApiClient\Http\AuthState;
use LiquidWeb\LicensingApiClient\Http\RequestExecutor;
use LiquidWeb\LicensingApiClientWordPress\Http\WordPressHttpClient;
use lucatume\DI52\ServiceProvider;
use MyPlugin\Support\CurrentRequestTraceParent;
final class LicensingApiProvider extends ServiceProvider
{
public function register(): void
{
$this->container->singleton(WordPressHttpClient::class);
$this->container->singleton(Psr17Factory::class);
$this->container->when(RequestExecutor::class)
->needs(ClientInterface::class)
->give(static fn( $c ): ClientInterface => $c->get(WordPressHttpClient::class));
$this->container->bind(
RequestFactoryInterface::class,
static fn( $c ): RequestFactoryInterface => $c->get(Psr17Factory::class)
);
$this->container->bind(
StreamFactoryInterface::class,
static fn( $c ): StreamFactoryInterface => $c->get(Psr17Factory::class)
);
$this->container->singleton(
Config::class,
static function (): Config {
return new Config(
'https://licensing.example.com',
null, // Pass a token if you plan to make authenticated requests.
'my-plugin/1.0.0' // Your client user agent.
);
}
);
$this->container->singleton(
AuthState::class,
static fn( $c ): AuthState => new AuthState(
new AuthContext(),
$c->get(Config::class)->configuredToken
)
);
$this->container->singleton(
ApiVersion::class,
static fn(): ApiVersion => ApiVersion::default()
);
$this->container->singleton(CurrentRequestTraceParent::class);
$this->container->singleton(Api::class);
$this->container->bind(
LicensingClientInterface::class,
static fn( $c ): LicensingClientInterface => $c
->get(Api::class)
->withTraceParent($c->get(CurrentRequestTraceParent::class)->traceParent())
);
}
}
declare(strict_types=1);
namespace MyPlugin\Support;
use LiquidWeb\LicensingApiClient\Tracing\TraceParent;
final class CurrentRequestTraceParent
{
private TraceParent $traceParent;
public function __construct()
{
$this->traceParent = TraceParent::generate();
}
public function traceParent(): TraceParent
{
return $this->traceParent;
}
}
declare(strict_types=1);
use LiquidWeb\LicensingApiClient\Tracing\TraceContext;
use LiquidWeb\LicensingApiClient\Tracing\TraceParent;
$traceContext = TraceContext::fromValues(
TraceParent::fromString($incomingTraceparent),
$incomingTracestate ?? null
);
$api = $container
->get(Api::class)
->withTraceContext($traceContext);
use LiquidWeb\LicensingApiClient\Exceptions\Contracts\ApiErrorExceptionInterface;
use LiquidWeb\LicensingApiClient\Exceptions\NotFoundException;
use LiquidWeb\LicensingApiClient\Exceptions\ValidationException;
try {
$catalog = $api->products()->catalog('LWSW-8H9F-5UKA-VR3B-D7SQ-BP9N');
$validation = $api->licenses()->validate(
'LWSW-8H9F-5UKA-VR3B-D7SQ-BP9N',
['kadence', 'learndash'],
'customer-site.com'
);
$balances = $api->withConfiguredToken()->credits()->balance(
'LWSW-8H9F-5UKA-VR3B-D7SQ-BP9N',
'customer-site.com'
);
if ($catalog->products->isCapabilityValid('kadence', 'blocks')) {
// ...
}
if ($validation->products->isCapabilityValid('learndash', 'blocks')) {
// ...
}
} catch (NotFoundException $e) {
// Return the API message when the requested record does not exist.
return [
'success' => false,
'message' => $e->getMessage(),
];
} catch (ValidationException $e) {
// Return the validation message and log the details for debugging.
$this->logger->warning('Licensing validation failed.', [
'message' => $e->getMessage(),
'code' => $e->errorCode(),
]);
return [
'success' => false,
'message' => $e->getMessage(),
];
} catch (ApiErrorExceptionInterface $e) {
// Log unexpected API-declared errors and return a generic failure message.
$this->logger->error('Licensing API request failed.', [
'status' => $e->getResponse()->getStatusCode(),
'code' => $e->errorCode(),
'message' => $e->getMessage(),
]);
return [
'success' => false,
'message' => 'We could not complete the licensing request right now. Please try again later.',
];
}
declare(strict_types=1);
use Nyholm\Psr7\Factory\Psr17Factory;
use LiquidWeb\LicensingApiClient\Config;
use LiquidWeb\LicensingApiClientWordPress\Http\WordPressHttpClient;
use LiquidWeb\LicensingApiClientWordPress\WordPressApiFactory;
$psr17 = new Psr17Factory();
$api = (new WordPressApiFactory(
new WordPressHttpClient(),
$psr17,
$psr17
))->make(new Config(
'https://licensing.example.com',
null,
'my-plugin/1.0.0' // Your client user agent.
));
declare(strict_types=1);
use Nyholm\Psr7\Factory\Psr17Factory;
use LiquidWeb\LicensingApiClient\Config;
use LiquidWeb\LicensingApiClientWordPress\Http\WordPressHttpClient;
use LiquidWeb\LicensingApiClientWordPress\WordPressApiFactory;
$psr17 = new Psr17Factory();
$api = (new WordPressApiFactory(
new WordPressHttpClient(),
$psr17,
$psr17
))->make(new Config(
'https://licensing.example.com',
'pk_test_your_token_here',
'portal/1.0.0' // Your client user agent.
));
$trustedApi = $api->withConfiguredToken();
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.