1. Go to this page and download the library: Download syriable/laravel-payments 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/ */
syriable / laravel-payments example snippets
use Syriable\Payments\Data\Checkout;
use Syriable\Payments\Facades\Gateway;
$result = Gateway::driver('stripe')->checkout(new Checkout(
amount: 2500, // minor units — 2500 == $25.00
currency: 'USD',
reference: "order_{$order->id}",
successUrl: route('orders.success', $order),
cancelUrl: route('orders.cancel', $order),
));
return redirect($result->redirectUrl);
use Syriable\Payments\Data\Checkout;
use Syriable\Payments\Facades\Gateway;
$checkout = new Checkout(
amount: 2500,
currency: 'USD',
reference: 'order_42',
successUrl: 'https://shop.test/success',
cancelUrl: 'https://shop.test/cancel',
customerEmail: '[email protected]', // optional
metadata: ['order_id' => 42], // optional
);
// Explicit gateway:
$result = Gateway::driver('stripe')->checkout($checkout);
// Or the default gateway from config — __call passthrough handles this:
$result = Gateway::checkout($checkout);
return redirect($result->redirectUrl);
$result->id; // gateway's payment/session id
$result->status; // PaymentStatus enum (Pending, RequiresAction, Processing, Paid, Failed, Canceled, PartiallyRefunded, Refunded)
$result->redirectUrl; // hosted-checkout URL, if any
$result->reference; // your checkout reference, when the gateway echoes it (e.g. on retrieve())
$result->amount; // gateway-reported amount in minor units, when available
$result->currency; // gateway-reported ISO 4217 currency, when available
$result->raw; // full untouched gateway response
$result = Gateway::driver('stripe')->retrieve($order->gateway_payment_id);
if ($result->status === PaymentStatus::Paid) {
$order->markPaid();
}
use Syriable\Payments\Jobs\ReconcilePayment;
ReconcilePayment::dispatch('stripe', $order->gateway_payment_id);
use Syriable\Payments\Contracts\Refundable;
$gateway = Gateway::driver('stripe');
if ($gateway instanceof Refundable) {
$gateway->refund($paymentId); // full refund
$gateway->refund($paymentId, 1000); // partial — 1000 minor units
}
use Syriable\Payments\Events\PaymentSucceeded;
Event::listen(PaymentSucceeded::class, function (PaymentSucceeded $event) {
// $event->event is a normalized WebhookEvent. Reconcile on ->reference
// (your own checkout reference, echoed back by the gateway) rather than
// ->paymentId: the gateway id can point at different objects across
// events (a Stripe session id vs. a payment intent id).
$order = Order::where('reference', $event->event->reference)->first();
// Always verify the amount before fulfilling.
if ($order && $event->event->amount === $order->total_minor
&& $event->event->currency === $order->currency) {
$order->markPaid();
}
});
use Syriable\Payments\Facades\Gateway;
Gateway::extend('paymob', fn ($app) => new \App\Payments\PaymobGateway(
config('payment-gateways.gateways.paymob')
));
namespace Vendor\LaravelPaymentsPaymob;
use Illuminate\Support\ServiceProvider;
use Syriable\Payments\Facades\Gateway;
class PaymobServiceProvider extends ServiceProvider
{
public function boot(): void
{
Gateway::extend('paymob', fn ($app) => new PaymobGateway(
config('payment-gateways.gateways.paymob', [])
));
}
}
use Syriable\Payments\Contracts\Gateway;
use Syriable\Payments\Contracts\Refundable;
final class PaymobGateway implements Gateway, Refundable
{
public function name(): string { /* ... */ }
public function checkout(Checkout $checkout): PaymentResult { /* ... */ }
public function retrieve(string $paymentId): PaymentResult { /* ... */ }
public function webhook(Request $request): WebhookEvent { /* ... */ }
public function refund(string $paymentId, ?int $amount = null): PaymentResult { /* ... */ }
}
use Syriable\Payments\Facades\Gateway;
it('checks the customer out', function () {
$fake = Gateway::fake();
$this->post('/checkout', ['order' => 42]);
$fake->assertCheckedOut(fn ($checkout) => $checkout->amount === 2500);
});