PHPackages                             xgenious/paymentgateway - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Payment Processing](/categories/payments)
4. /
5. xgenious/paymentgateway

ActiveLibrary[Payment Processing](/categories/payments)

xgenious/paymentgateway
=======================

A Laravel package to manage multiple payment gateways with a unified API

v5.0.5(2mo ago)0521[1 issues](https://github.com/XgeniousLLC/paymentgateway/issues)MITPHPPHP ^8.2

Since Mar 31Pushed 2mo agoCompare

[ Source](https://github.com/XgeniousLLC/paymentgateway)[ Packagist](https://packagist.org/packages/xgenious/paymentgateway)[ Docs](https://github.com/XgeniousLLC/paymentgateway)[ RSS](/packages/xgenious-paymentgateway/feed)WikiDiscussions main Synced 4w ago

READMEChangelog (5)Dependencies (35)Versions (8)Used By (0)

XGenious Payment Gateway
========================

[](#xgenious-payment-gateway)

A Laravel package to manage multiple payment gateways with a unified API.

- **Package:** `xgenious/paymentgateway`
- **Author:** Sharifur Rahman
- **License:** MIT
- **PHP:** ^8.2
- **Laravel:** ^12.x

---

Supported Payment Gateways
--------------------------

[](#supported-payment-gateways)

\#Gateway\#Gateway1PayPal2Stripe3Paytm4Midtrans5Razorpay6Mollie7Flutterwave8Paystack9Payfast10Cashfree11Instamojo12Mercado Pago13SquarePay14[CinetPay](CinetPay.md)15PayTabs16BillPlz17Zitopay18Toyyibpay19Pagali20Authorize.Net21SitesWay22TransactionCloud23WiPay24KineticPay25Senangpay26SaltPay27Iyzipay28Paymob29PowertranzPay30AwdPay31YooMoney32CoinPayments33SSLCommerz34Xendit35[Adyen](AdyenPay.md)36Airwallex---

Installation
------------

[](#installation)

```
composer require xgenious/paymentgateway
```

**Step 3 — Publish the config file:**

```
php artisan vendor:publish --provider="Xgenious\Paymentgateway\Providers\PaymentgatewayServiceProvider"
```

This creates `config/paymentgateway.php`.

---

Basic Usage
-----------

[](#basic-usage)

Every gateway follows the same two-method pattern:

1. `charge_customer(array $data)` — initiates payment, returns redirect response
2. `ipn_response()` — handles the webhook/IPN callback

### Common `charge_customer` parameters

[](#common-charge_customer-parameters)

```
[
    'amount'       => 10,
    'title'        => 'Order #56',
    'description'  => 'Payment for order #56',
    'ipn_url'      => route('payment.gateway.ipn'),
    'order_id'     => 56,
    'track'        => 'unique_tracking_id',
    'cancel_url'   => route('payment.failed'),
    'success_url'  => route('payment.success'),
    'email'        => 'customer@example.com',
    'name'         => 'Customer Name',
    'payment_type' => 'order',
]
```

---

Gateway Setup Examples
----------------------

[](#gateway-setup-examples)

### Stripe

[](#stripe)

```
// charge_customer
$stripe = XgPaymentGateway::stripe();
$stripe->setSecretKey('sk_test_...');
$stripe->setPublicKey('pk_test_...');
$stripe->setCurrency('USD');
$stripe->setEnv(true); // true = sandbox, false = live

$response = $stripe->charge_customer([...]);
return $response;

// ipn_response
$stripe = XgPaymentGateway::stripe();
$stripe->setSecretKey('sk_test_...');
$stripe->setPublicKey('pk_test_...');
$stripe->setEnv(true);
dd($stripe->ipn_response());
```

**IPN Route:**

```
Route::post('/stripe-ipn', [PaymentLogController::class, 'stripe_ipn'])->name('payment.stripe.ipn');
```

---

### PayPal

[](#paypal)

```
// charge_customer
$paypal = XgPaymentGateway::paypal();
$paypal->setClientId('client_id');
$paypal->setClientSecret('client_secret');
$paypal->setAppId('app_id');
$paypal->setCurrency('USD');
$paypal->setEnv(true); // true = sandbox

$response = $paypal->charge_customer([...]);
return $response;

// ipn_response
$paypal = XgPaymentGateway::paypal();
$paypal->setClientId('client_id');
$paypal->setClientSecret('client_secret');
$paypal->setAppId('app_id');
$paypal->setEnv(true);
dd($paypal->ipn_response());
```

**IPN Route:**

```
Route::get('/paypal-ipn', [PaymentLogController::class, 'paypal_ipn'])->name('payment.paypal.ipn');
```

---

### Paytm

[](#paytm)

```
// charge_customer
$paytm = XgPaymentGateway::paytm();
$paytm->setMerchantId('your_merchant_id');
$paytm->setMerchantKey('your_merchant_key');
$paytm->setMerchantWebsite('WEBSTAGING');
$paytm->setChannel('WEB');
$paytm->setIndustryType('Retail');
$paytm->setCurrency('INR');
$paytm->setEnv(true); // true = sandbox
$paytm->setExchangeRate(74); // required if currency is not INR

$response = $paytm->charge_customer([...]);
return $response;

// ipn_response
$paytm = XgPaymentGateway::paytm();
$paytm->setMerchantId('your_merchant_id');
$paytm->setMerchantKey('your_merchant_key');
$paytm->setMerchantWebsite('WEBSTAGING');
$paytm->setChannel('WEB');
$paytm->setIndustryType('Retail');
$paytm->setEnv(true);
dd($paytm->ipn_response());
```

---

### Midtrans

[](#midtrans)

```
// charge_customer
$midtrans = XgPaymentGateway::midtrans();
$midtrans->setClientKey('your_client_key');
$midtrans->setServerKey('your_server_key');
$midtrans->setCurrency('IDR');
$midtrans->setEnv(true); // true = sandbox
$midtrans->setExchangeRate(14000); // required if currency is not IDR

$response = $midtrans->charge_customer([...]);
return $response;

// ipn_response
$midtrans = XgPaymentGateway::midtrans();
$midtrans->setClientKey('your_client_key');
$midtrans->setServerKey('your_server_key');
$midtrans->setEnv(true);
dd($midtrans->ipn_response());
```

**IPN Route:**

```
Route::get('/midtrans-ipn', [PaymentLogController::class, 'midtrans_ipn'])->name('payment.midtrans.ipn');
```

**Midtrans Test Cards:**

```
VISA (3DS Enabled):      4811 1111 1111 1114
VISA (3DS Disabled):     4411 1111 1111 1118
Mastercard (3DS Enabled): 5211 1111 1111 1117
Mastercard (3DS Disabled): 5410 1111 1111 1116

```

---

### Razorpay

[](#razorpay)

```
// charge_customer
$razorpay = XgPaymentGateway::razorpay();
$razorpay->setApiKey('your_api_key');
$razorpay->setApiSecret('your_api_secret');
$razorpay->setCurrency('INR');
$razorpay->setEnv(true);
$razorpay->setExchangeRate(74); // required if currency is not INR

$response = $razorpay->charge_customer([...]);
return $response;

// ipn_response
$razorpay = XgPaymentGateway::razorpay();
$razorpay->setApiKey('your_api_key');
$razorpay->setApiSecret('your_api_secret');
$razorpay->setEnv(true);
dd($razorpay->ipn_response());
```

---

### Mollie

[](#mollie)

```
// charge_customer
$mollie = XgPaymentGateway::mollie();
$mollie->setApiKey('your_api_key');
$mollie->setCurrency('EUR');
$mollie->setEnv(true);

$response = $mollie->charge_customer([...]);
return $response;

// ipn_response
$mollie = XgPaymentGateway::mollie();
$mollie->setApiKey('your_api_key');
$mollie->setCurrency('EUR');
$mollie->setEnv(true);
dd($mollie->ipn_response());
```

**IPN Route:**

```
Route::get('/mollie-ipn', [PaymentLogController::class, 'mollie_ipn'])->name('payment.mollie.ipn');
```

---

### Flutterwave

[](#flutterwave)

```
// charge_customer
$flutterwave = XgPaymentGateway::flutterwave();
$flutterwave->setPublicKey('your_public_key');
$flutterwave->setSecretKey('your_secret_key');
$flutterwave->setSecretHash('your_secret_hash');
$flutterwave->setCurrency('NGN');
$flutterwave->setEnv(true);

$response = $flutterwave->charge_customer([...]);
return $response;

// ipn_response
$flutterwave = XgPaymentGateway::flutterwave();
$flutterwave->setSecretKey('your_secret_key');
$flutterwave->setSecretHash('your_secret_hash');
$flutterwave->setEnv(true);
dd($flutterwave->ipn_response());
```

**IPN Route:**

```
Route::get('/flutterwave-ipn', [PaymentLogController::class, 'flutterwave_ipn'])->name('payment.flutterwave.ipn');
```

**Flutterwave Test Cards:**

```
Mastercard (PIN): 5531 8866 5214 2950 | CVV: 564 | Expiry: 09/32 | PIN: 3310 | OTP: 12345
Visa:             4556 0527 0417 2643 | CVV: 899 | Expiry: 09/32 | PIN: 3310 | OTP: 12345

```

---

### Paystack

[](#paystack)

```
// charge_customer
$paystack = XgPaymentGateway::paystack();
$paystack->setPublicKey('your_public_key');
$paystack->setSecretKey('your_secret_key');
$paystack->setMerchantEmail('merchant@example.com');
$paystack->setCurrency('NGN');
$paystack->setEnv(true);

$response = $paystack->charge_customer([...]);
return $response;

// ipn_response
$paystack = XgPaymentGateway::paystack();
$paystack->setSecretKey('your_secret_key');
$paystack->setEnv(true);
dd($paystack->ipn_response());
```

---

### Payfast

[](#payfast)

```
// charge_customer
$payfast = XgPaymentGateway::payfast();
$payfast->setMerchantId('your_merchant_id');
$payfast->setMerchantKey('your_merchant_key');
$payfast->setPassphrase('your_passphrase');
$payfast->setCurrency('ZAR');
$payfast->setEnv(true);

$response = $payfast->charge_customer([...]);
return $response;

// ipn_response
$payfast = XgPaymentGateway::payfast();
$payfast->setMerchantId('your_merchant_id');
$payfast->setMerchantKey('your_merchant_key');
$payfast->setPassphrase('your_passphrase');
$payfast->setEnv(true);
dd($payfast->ipn_response());
```

---

### Cashfree

[](#cashfree)

```
// charge_customer
$cashfree = XgPaymentGateway::cashfree();
$cashfree->setAppId('your_app_id');
$cashfree->setSecretKey('your_secret_key');
$cashfree->setCurrency('INR');
$cashfree->setEnv(true); // true = test mode

$response = $cashfree->charge_customer([...]);
return $response;

// ipn_response
$cashfree = XgPaymentGateway::cashfree();
$cashfree->setAppId('your_app_id');
$cashfree->setSecretKey('your_secret_key');
$cashfree->setEnv(true);
dd($cashfree->ipn_response());
```

---

### Instamojo

[](#instamojo)

```
// charge_customer
$instamojo = XgPaymentGateway::instamojo();
$instamojo->setClientId('your_client_id');
$instamojo->setClientSecret('your_client_secret');
$instamojo->setCurrency('INR');
$instamojo->setEnv(true); // true = test mode

$response = $instamojo->charge_customer([...]);
return $response;

// ipn_response
$instamojo = XgPaymentGateway::instamojo();
$instamojo->setClientId('your_client_id');
$instamojo->setClientSecret('your_client_secret');
$instamojo->setEnv(true);
dd($instamojo->ipn_response());
```

---

### Mercado Pago

[](#mercado-pago)

```
// charge_customer
$mercadopago = XgPaymentGateway::mercadopago();
$mercadopago->setClientId('your_client_id');
$mercadopago->setClientSecret('your_client_secret');
$mercadopago->setCurrency('BRL');
$mercadopago->setEnv(true);

$response = $mercadopago->charge_customer([...]);
return $response;

// ipn_response
$mercadopago = XgPaymentGateway::mercadopago();
$mercadopago->setClientId('your_client_id');
$mercadopago->setClientSecret('your_client_secret');
$mercadopago->setEnv(true);
dd($mercadopago->ipn_response());
```

---

### CinetPay

[](#cinetpay)

```
$cinetpay = XgPaymentGateway::cinetpay();
```

See detailed setup: [CinetPay.md](CinetPay.md)

---

### Authorize.Net

[](#authorizenet)

```
// charge_customer
$authorizenet = XgPaymentGateway::authorizenet();
$authorizenet->setApiLoginId('your_login_id');
$authorizenet->setTransactionKey('your_transaction_key');
$authorizenet->setCurrency('USD');
$authorizenet->setEnv(true);

$response = $authorizenet->charge_customer([...]);
return $response;

// ipn_response
$authorizenet = XgPaymentGateway::authorizenet();
$authorizenet->setApiLoginId('your_login_id');
$authorizenet->setTransactionKey('your_transaction_key');
$authorizenet->setEnv(true);
dd($authorizenet->ipn_response());
```

---

### Adyen

[](#adyen)

See detailed setup: [AdyenPay.md](AdyenPay.md)

---

### Other Gateways

[](#other-gateways)

The following gateways follow the same `charge_customer` / `ipn_response` pattern. Refer to the individual gateway class in `src/Base/Gateways/` for available setter methods:

Facade MethodGateway`XgPaymentGateway::squareup()`SquarePay`XgPaymentGateway::paytabs()`PayTabs`XgPaymentGateway::billplz()`BillPlz`XgPaymentGateway::zitopay()`ZitoPay`XgPaymentGateway::toyyibpay()`Toyyibpay`XgPaymentGateway::pagalipay()`Pagali`XgPaymentGateway::sitesway()`SitesWay`XgPaymentGateway::transactionclud()`TransactionCloud`XgPaymentGateway::wipay()`WiPay`XgPaymentGateway::kineticpay()`KineticPay`XgPaymentGateway::senangpay()`Senangpay`XgPaymentGateway::saltpay()`SaltPay`XgPaymentGateway::iyzipay()`Iyzipay`XgPaymentGateway::paymob()`Paymob`XgPaymentGateway::powertranz()`PowertranzPay`XgPaymentGateway::awdPay()`AwdPay`XgPaymentGateway::yoomoney()`YooMoney`XgPaymentGateway::coinpayments()`CoinPayments`XgPaymentGateway::sslcommerz()`SSLCommerz`XgPaymentGateway::xendit()`Xendit`XgPaymentGateway::airwallex()`Airwallex`XgPaymentGateway::adyen()`Adyen---

Developer Guide: Adding a New Gateway
-------------------------------------

[](#developer-guide-adding-a-new-gateway)

This guide walks through adding a new payment gateway to the package.

### Architecture Overview

[](#architecture-overview)

```
src/
├── Base/
│   ├── PaymentGatewayBase.php       ← abstract base class all gateways extend
│   ├── PaymentGatewayHelpers.php    ← registers all gateway factory methods
│   └── Gateways/
│       └── YourGatewayPay.php       ← your new gateway class
├── Traits/
│   ├── PaymentEnvironment.php       ← provides setEnv() / getEnv()
│   ├── CurrencySupport.php          ← provides setCurrency() / getCurrency() / setExchangeRate()
│   └── ConvertUsdSupport.php        ← provides get_amount_in_usd() for currency conversion
src/Facades/
│   └── XgPaymentGateway.php         ← the facade users call
config/
│   └── paymentgateway.php           ← gateway credentials config

```

Every gateway class must extend `PaymentGatewayBase` and implement six abstract methods.

---

### Step 1 — Create the Gateway Class

[](#step-1--create-the-gateway-class)

Create `src/Base/Gateways/YourGatewayPay.php`:

```
