3.5 KiB
3.5 KiB
Manage Subscriptions
How to create and manage subscriptions using the Mollie API.
Create a Subscription
use Mollie\Api\Http\Requests\CreateSubscriptionRequest;
try {
// Create a subscription for a customer
$subscription = $mollie->send(
new CreateSubscriptionRequest(
customerId: 'cst_8wmqcHMN4U',
parameters: [
'amount' => [
'value' => '10.00',
'currency' => 'EUR'
],
'interval' => '1 month',
'description' => 'Monthly subscription',
'webhookUrl' => 'https://example.com/webhook',
'metadata' => [
'subscription_id' => time()
]
]
)
);
echo "Subscription status: {$subscription->status}\n";
} catch (\Mollie\Api\Exceptions\ApiException $e) {
echo "API call failed: " . htmlspecialchars($e->getMessage());
}
List Subscriptions
use Mollie\Api\Http\Requests\GetPaginatedSubscriptionsRequest;
try {
// List all subscriptions for a customer
$response = $mollie->send(
new GetPaginatedSubscriptionsRequest(
customerId: 'cst_8wmqcHMN4U'
)
);
foreach ($response as $subscription) {
echo "Subscription {$subscription->id}:\n";
echo "- Status: {$subscription->status}\n";
echo "- Amount: {$subscription->amount->currency} {$subscription->amount->value}\n";
echo "- Times: {$subscription->times}\n";
echo "- Interval: {$subscription->interval}\n";
echo "- Next payment: {$subscription->nextPaymentDate}\n\n";
}
} catch (\Mollie\Api\Exceptions\ApiException $e) {
echo "API call failed: " . htmlspecialchars($e->getMessage());
}
Cancel a Subscription
use Mollie\Api\Http\Requests\CancelSubscriptionRequest;
try {
// Cancel a subscription
$mollie->send(
new CancelSubscriptionRequest(
customerId: 'cst_8wmqcHMN4U',
subscriptionId: 'sub_rVKGtNd6s3'
)
);
echo "Subscription canceled\n";
} catch (\Mollie\Api\Exceptions\ApiException $e) {
echo "API call failed: " . htmlspecialchars($e->getMessage());
}
The Response
$subscription->id; // "sub_rVKGtNd6s3"
$subscription->customerId; // "cst_8wmqcHMN4U"
$subscription->mode; // "live" or "test"
$subscription->createdAt; // "2024-02-24T12:13:14+00:00"
$subscription->status; // "active", "pending", "canceled", "suspended", "completed"
$subscription->amount; // Object containing amount and currency
$subscription->times; // 12 (optional)
$subscription->timesRemaining; // 4 (optional)
$subscription->interval; // "1 month"
$subscription->startDate; // "2024-02-24"
$subscription->nextPaymentDate; // "2024-03-24"
$subscription->description; // "Monthly subscription"
$subscription->method; // null or payment method
$subscription->webhookUrl; // "https://example.com/webhook"
$subscription->metadata; // Object containing custom metadata
Additional Notes
- The customer must have a valid mandate for recurring payments
- Subscriptions can be created with various intervals (e.g., "1 month", "3 months")
- The webhook is called for every subscription payment
- Subscription status can be:
pending: Waiting for a valid mandateactive: The subscription is activecanceled: The subscription is canceledsuspended: The subscription is suspendedcompleted: The subscription has ended