PHP code example of damms005 / laravel-cashier

1. Go to this page and download the library: Download damms005/laravel-cashier 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/ */

    

damms005 / laravel-cashier example snippets


use Damms005\LaravelMultipay\Services\SubscriptionService;
use Damms005\LaravelMultipay\Contracts\PaymentHandlerInterface;

$handler = app(PaymentHandlerInterface::class);

$plan = SubscriptionService::createPaymentPlan(
    handler: $handler,
    name: 'Pro Monthly',
    amount: '5000',        // in minor currency unit (e.g., kobo, cents)
    interval: 'monthly',   // 'monthly', 'quarterly', 'biannually', or 'yearly'
    description: 'Pro plan - billed monthly',
    currency: 'NGN'
);

$plan = SubscriptionService::findOrCreatePaymentPlan(
    handler: $handler,
    amount: '5000',
    interval: 'monthly',
    description: 'Pro plan - billed monthly',
    currency: 'NGN'
);

use Damms005\LaravelMultipay\Services\SubscriptionService;
use Damms005\LaravelMultipay\Contracts\PaymentHandlerInterface;

$handler = app(PaymentHandlerInterface::class);

return SubscriptionService::subscribeToPlan(
    handler: $handler,
    user: $user,
    plan: $plan,
    completionUrl: route('dashboard')
);

return SubscriptionService::subscribeToPlan(
    handler: $handler,
    user: $user,
    plan: $plan,
    completionUrl: route('dashboard'),
    transactionReference: 'MY-CUSTOM-REF-001',
    metadata: ['order_id' => 123],
    displayAmount: '50.00'  // human-readable amount (e.g., naira) — defaults to plan amount if omitted
);

use Damms005\LaravelMultipay\Services\SubscriptionService;

$subscription = SubscriptionService::getActiveSubscriptionFor($user, $plan);

if ($subscription) {
    // User has an active subscription
    // $subscription->next_payment_due_date
}

use Damms005\LaravelMultipay\Services\SubscriptionService;

// inside your subscription.create webhook handling
SubscriptionService::recordProviderSubscriptionData(
    $subscription,
    subscriptionCode: $request->input('data.subscription_code'),
    emailToken: $request->input('data.email_token'),
);

$details = $handler->getSubscriptionDetails('SUB_xxxxxxxx');
// ['subscription_code' => ..., 'email_token' => ..., 'status' => ..., 'next_payment_date' => ...]

use Damms005\LaravelMultipay\Services\SubscriptionService;
use Damms005\LaravelMultipay\Contracts\PaymentHandlerInterface;

$handler = app(PaymentHandlerInterface::class); // must implement ManagesSubscriptions (Paystack does)

// Pause — subscription stops renewing, status becomes "paused"
SubscriptionService::pauseSubscription($handler, $subscription);

// Resume — only valid for a paused subscription, status becomes "active"
SubscriptionService::resumeSubscription($handler, $subscription);

// Cancel — subscription stops renewing permanently, status becomes "cancelled"
SubscriptionService::cancelSubscription($handler, $subscription);

/**
 * @var Damms005\LaravelMultipay\ValueObjects\ReQuery $outcome
 */
$outcome = LaravelMultipay::reQueryUnsuccessfulPayment($payment)

session(['multipay::paystack_terminal_id' => 'your_terminal_id']);

use Damms005\LaravelMultipay\Services\PaymentHandlers\PaystackTerminal\Terminal;

$terminal = app(Terminal::class);

$payment = $terminal->createPaymentRequest(
    model: 'App\Models\User',
    modelId: 123,
    email: '[email protected]',
    description: 'Product purchase',
    amount: 50000  // Amount in kobo (50,000 kobo = 500 NGN)
);

try {
    $status = $terminal->waitForTerminalHardware();
    // Terminal is online
} catch (\Exception $e) {
    // Terminal is offline or not configured
}

try {
    $eventId = $terminal->pushToTerminal($payment);
    // Payment has been pushed to terminal
} catch (\Exception $e) {
    // Failed to push to terminal
}

try {
    $result = $terminal->terminalReceivedPaymentRequest($eventId);
    // Terminal has received the payment request
} catch (\Exception $e) {
    // Could not verify receipt
}

use Damms005\LaravelMultipay\Models\Payment;
use Damms005\LaravelMultipay\Contracts\WebhookPayloadPackager;

class MyWebhookPayloadPackager implements WebhookPayloadPackager
{
    public function getWebhookPayload(Payment $payment): array
    {
        return [
            'transaction_reference' => $payment->transaction_reference,
            'amount_paid' => $payment->original_amount_displayed_to_user,
            'payment_processor_name' => $payment->payment_processor_name,
            // ...add any app-specific data you need
        ];
    }
}

config()->set(
    'laravel-multipay.webhook.payload_packager',
    \App\Services\MyWebhookPayloadPackager::class,
);
bash
php artisan vendor:publish --tag=laravel-multipay-config
bash
php artisan migrate
js
    content: [
        ...,
        './vendor/damms005/laravel-multipay/views/**/*.blade.php',
    ],
    ...
bash
php artisan multipay:send-payments-webhook