PHP code example of antoniadisio / creem-php
1. Go to this page and download the library: Download antoniadisio/creem-php 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/ */
antoniadisio / creem-php example snippets
use Antoniadisio\Creem\Client;
use Antoniadisio\Creem\Config;
use Antoniadisio\Creem\Enum\Environment;
$client = new Client(new Config(
apiKey: $_ENV['CREEM_API_KEY'],
environment: Environment::Test,
));
$product = $client->products()->get('prod_123');
use Antoniadisio\Creem\Client;
use Antoniadisio\Creem\Config;
use Antoniadisio\Creem\Enum\Environment;
$client = new Client(new Config(
apiKey: $_ENV['CREEM_API_KEY'],
environment: Environment::Test,
timeout: 10,
userAgentSuffix: 'my-app/1.2.0',
));
$config = new Config(
apiKey: $_ENV['CREEM_API_KEY'],
baseUrl: 'https://proxy.example.test',
allowUnsafeBaseUrlOverride: true,
);
use Antoniadisio\Creem\ClientFactory;
use Antoniadisio\Creem\CredentialProfile;
use Antoniadisio\Creem\CredentialProfiles;
use Antoniadisio\Creem\Enum\Environment;
$profiles = new CredentialProfiles([
'default' => new CredentialProfile(
apiKey: $_ENV['CREEM_API_KEY'],
environment: Environment::Test,
webhookSecret: $_ENV['CREEM_WEBHOOK_SECRET'],
),
'playground' => new CredentialProfile(
apiKey: $_ENV['CREEM_PLAYGROUND_API_KEY'],
environment: Environment::Test,
webhookSecret: $_ENV['CREEM_PLAYGROUND_WEBHOOK_SECRET'],
),
]);
$factory = new ClientFactory($profiles);
$merchantClient = $factory->forProfile('playground');
$product = $merchantClient->products()->get('prod_123');
use Antoniadisio\Creem\Dto\Checkout\CreateCheckoutRequest;
use Antoniadisio\Creem\Exception\TransportException;
use Antoniadisio\Creem\Exception\ValidationException;
try {
$checkout = $client->checkouts()->create(new CreateCheckoutRequest(
productId: 'prod_123',
));
} catch (ValidationException $exception) {
$errors = $exception->errors();
} catch (TransportException $exception) {
error_log($exception->getMessage());
}
use Antoniadisio\Creem\Enum\WebhookEventType;
use Antoniadisio\Creem\Webhook;
$payload = file_get_contents('php://input') ?: '';
$signature = $_SERVER['HTTP_CREEM_SIGNATURE'] ?? '';
$event = Webhook::constructEvent(
$payload,
$signature,
$_ENV['CREEM_WEBHOOK_SECRET'],
);
if ($event->eventTypeEnum() === WebhookEventType::SubscriptionActive) {
$subscriptionId = $event->object()->get('id');
}
$event = Webhook::constructEvent(
$payload,
$signature,
$_ENV['CREEM_WEBHOOK_SECRET'],
static function (\Antoniadisio\Creem\Dto\Webhook\WebhookEvent $event): bool {
// Persist event IDs in durable storage (Redis, DB, etc.) with a short TTL.
return hasSeenWebhookId($event->id());
},
);
use Antoniadisio\Creem\CredentialProfile;
use Antoniadisio\Creem\CredentialProfiles;
use Antoniadisio\Creem\Enum\Environment;
use Antoniadisio\Creem\Webhook;
$profiles = new CredentialProfiles([
'default' => new CredentialProfile(
apiKey: $_ENV['CREEM_API_KEY'],
environment: Environment::Test,
webhookSecret: $_ENV['CREEM_WEBHOOK_SECRET'],
),
'playground' => new CredentialProfile(
apiKey: $_ENV['CREEM_PLAYGROUND_API_KEY'],
environment: Environment::Test,
webhookSecret: $_ENV['CREEM_PLAYGROUND_WEBHOOK_SECRET'],
),
]);
$profile = $request->is('creem/webhook') ? 'playground' : 'default';
$event = Webhook::constructEventForProfile(
$payload,
$signature,
$profile,
$profiles,
);
namespace App\Http\Controllers;
use Antoniadisio\Creem\Exception\InvalidWebhookPayloadException;
use Antoniadisio\Creem\Exception\InvalidWebhookSignatureException;
use Antoniadisio\Creem\Webhook;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
final class CreemWebhookController
{
public function __invoke(Request $request): Response
{
$payload = $request->getContent();
$signature = (string) $request->header('creem-signature', '');
try {
$event = Webhook::constructEvent(
$payload,
$signature,
config('services.creem.webhook_secret'),
);
} catch (InvalidWebhookSignatureException|InvalidWebhookPayloadException) {
return response(status: 400);
}
// Dispatch your application logic here.
return response(status: 204);
}
}
use Antoniadisio\Creem\Dto\Product\CreateProductRequest;
use Antoniadisio\Creem\Dto\Product\SearchProductsRequest;
use Antoniadisio\Creem\Enum\BillingPeriod;
use Antoniadisio\Creem\Enum\BillingType;
use Antoniadisio\Creem\Enum\CurrencyCode;
$product = $client->products()->create(new CreateProductRequest(
name: 'Pro Plan',
price: 4900,
currency: CurrencyCode::USD,
billingType: BillingType::Recurring,
billingPeriod: BillingPeriod::EveryMonth,
));
$page = $client->products()->search(new SearchProductsRequest(
pageNumber: 1,
pageSize: 25,
));
use Antoniadisio\Creem\Dto\Customer\CreateCustomerBillingPortalLinkRequest;
use Antoniadisio\Creem\Dto\Customer\ListCustomersRequest;
$page = $client->customers()->list(new ListCustomersRequest(
pageNumber: 1,
pageSize: 25,
));
$customer = $client->customers()->findByEmail('[email protected] ');
$links = $client->customers()->createBillingPortalLink(
new CreateCustomerBillingPortalLinkRequest(customerId: 'cus_123')
);
use Antoniadisio\Creem\Dto\Subscription\CancelSubscriptionRequest;
use Antoniadisio\Creem\Dto\Subscription\UpdateSubscriptionRequest;
use Antoniadisio\Creem\Dto\Subscription\UpgradeSubscriptionRequest;
use Antoniadisio\Creem\Dto\Subscription\UpsertSubscriptionItem;
use Antoniadisio\Creem\Enum\SubscriptionCancellationMode;
use Antoniadisio\Creem\Enum\SubscriptionUpdateBehavior;
$subscription = $client->subscriptions()->update(
'sub_123',
new UpdateSubscriptionRequest(
items: [
new UpsertSubscriptionItem(
id: 'sitem_123',
priceId: 'pprice_pro_monthly',
units: 2,
),
],
updateBehavior: SubscriptionUpdateBehavior::ProrationChargeImmediately,
),
);
$subscription = $client->subscriptions()->upgrade(
'sub_123',
new UpgradeSubscriptionRequest(
productId: 'prod_enterprise',
updateBehavior: SubscriptionUpdateBehavior::ProrationChargeImmediately,
),
);
$subscription = $client->subscriptions()->cancel(
'sub_123',
new CancelSubscriptionRequest(mode: SubscriptionCancellationMode::Immediate),
);
use Antoniadisio\Creem\Dto\Checkout\CreateCheckoutRequest;
use Antoniadisio\Creem\Dto\Checkout\CheckoutCustomerInput;
$checkout = $client->checkouts()->create(new CreateCheckoutRequest(
productId: 'prod_123',
successUrl: 'https://example.com/billing/success',
customer: new CheckoutCustomerInput(email: '[email protected] '),
));
use Antoniadisio\Creem\Dto\License\ActivateLicenseRequest;
use Antoniadisio\Creem\Dto\License\DeactivateLicenseRequest;
use Antoniadisio\Creem\Dto\License\ValidateLicenseRequest;
$license = $client->licenses()->activate(new ActivateLicenseRequest(
key: 'license_key',
instanceName: 'production-web-1',
));
$license = $client->licenses()->validate(new ValidateLicenseRequest(
key: 'license_key',
instanceId: 'instance_123',
));
$license = $client->licenses()->deactivate(new DeactivateLicenseRequest(
key: 'license_key',
instanceId: 'instance_123',
));
use Antoniadisio\Creem\Dto\Discount\CreateDiscountRequest;
use Antoniadisio\Creem\Enum\DiscountDuration;
use Antoniadisio\Creem\Enum\DiscountType;
$discount = $client->discounts()->create(new CreateDiscountRequest(
name: 'Spring Sale',
type: DiscountType::Percentage,
duration: DiscountDuration::Once,
appliesToProducts: ['prod_123'],
code: 'SPRING25',
percentage: 25,
));
$discount = $client->discounts()->getByCode('SPRING25');
use Antoniadisio\Creem\Dto\Transaction\SearchTransactionsRequest;
$page = $client->transactions()->search(new SearchTransactionsRequest(
customerId: 'cus_123',
pageNumber: 1,
pageSize: 50,
));
use Antoniadisio\Creem\Dto\Stats\GetStatsSummaryRequest;
use Antoniadisio\Creem\Enum\CurrencyCode;
use Antoniadisio\Creem\Enum\StatsInterval;
use DateTimeImmutable;
$startDate = new DateTimeImmutable('-7 days');
$endDate = new DateTimeImmutable('now');
$summary = $client->stats()->summary(new GetStatsSummaryRequest(
currency: CurrencyCode::USD,
startDate: $startDate,
endDate: $endDate,
interval: StatsInterval::Day,
));
bash
composer