Skip to main content
How to use Modem Pay in your Laravel application.

Using the Facade

The easiest way to use Modem Pay:
use ModemPay\Laravel\Facades\ModemPay;

// Create payment
$payment = ModemPay::paymentIntents()->create([
    'amount' => 5000,
    'currency' => 'GMD',
]);

// List payments
$payments = ModemPay::paymentIntents()->list(['limit' => 10]);

// Get payment
$payment = ModemPay::paymentIntents()->retrieve('hash');

Using Dependency Injection

Inject Modem Pay into your controllers:
use ModemPay\ModemPay;

class PaymentController extends Controller
{
    public function __construct(private ModemPay $modemPay) {}

    public function create(Request $request)
    {
        $payment = $this->modemPay->paymentIntents()->create([
            'amount' => $request->amount,
            'currency' => 'GMD',
        ]);

        return redirect($payment->data->payment_link);
    }
}

Payment Intents

Create a Payment

$payment = ModemPay::paymentIntents()->create([
    'amount' => 5000,
    'currency' => 'GMD',
    'title' => 'Order #12345',
    'metadata' => [
        'order_id' => '12345',
        'customer_id' => 'cus_123'
    ]
]);

List Payments

$payments = ModemPay::paymentIntents()->list([
    'limit' => 20,
    'offset' => 0
]);

Get Single Payment

$payment = ModemPay::paymentIntents()->retrieve('hash');

Transfers

Create a Transfer

$transfer = ModemPay::transfers()->create([
    'amount' => 1000,
    'account_number' => '7012345',
    'network' => 'wave',
    'currency' => 'GMD',
    'beneficiary_name' => 'John Doe'
], 'idempotency-key');

Get Single Transfer

$transfer = ModemPay::transfers()->retrieve('id');

Error Handling

Always wrap API calls in try-catch:
use ModemPay\Exceptions\ModemPayException;

try {
    $payment = ModemPay::paymentIntents()->create([
        'amount' => 5000,
        'currency' => 'GMD',
    ]);
} catch (ModemPayException $e) {
    return back()->with('error', $e->getMessage());
}

Example: Complete Payment Flow

public function checkout(Request $request)
{
    try {
        // Create payment
        $payment = ModemPay::paymentIntents()->create([
            'amount' => $request->total,
            'currency' => 'GMD',
            'title' => "Order #{$request->order_id}",
            'metadata' => [
                'order_id' => $request->order_id,
                'user_id' => auth()->id(),
            ]
        ]);

        // Redirect to payment page
        return redirect($payment->data->payment_link);

    } catch (ModemPayException $e) {
        return back()->with('error', 'Payment failed: ' . $e->getMessage());
    }
}
I