putralangkat97 / indopay-php
Framework-agnostic PHP payment gateway package for Indonesian payment providers.
Requires
- php: ^8.1
- ext-json: *
- guzzlehttp/guzzle: ^7.8
Requires (Dev)
- phpunit/phpunit: ^10.5 || ^11.0
- squizlabs/php_codesniffer: ^3.10
This package is not auto-updated.
Last update: 2026-05-20 03:56:22 UTC
README
indopay-php adalah package payment gateway PHP yang framework-agnostic untuk integrasi pembayaran Indonesia.
Rilis v1 fokus ke Core PHP dan driver Xendit Invoice / Payment Link. Package ini memakai Guzzle untuk request HTTP langsung ke Xendit, tanpa bergantung pada SDK resmi Xendit.
Fitur v1
- Membuat Xendit invoice / payment link.
- Mengambil status pembayaran berdasarkan invoice ID.
- Memproses webhook invoice dari Xendit.
- Validasi webhook dengan header
x-callback-token. - DTO dan enum sederhana untuk request, response, status, dan metode pembayaran.
PaymentManagersebagai wrapper opsional di atas gateway.
Refund Xendit Invoice belum didukung di v1. Method refund() sudah ada di contract, tetapi driver Xendit akan melempar NotSupportedException.
Requirement
- PHP
^8.1 - Composer
- Akun Xendit
- Xendit secret key
- Xendit callback token untuk validasi webhook
Instalasi
composer require putralangkat97/indopay-php
Jika project belum memuat Composer autoload, panggil autoloader lebih dulu:
<?php require __DIR__ . '/vendor/autoload.php';
Quick Start
1. Create Gateway
Simpan secret key dan callback token di environment variable.
<?php require __DIR__ . '/vendor/autoload.php'; use PutraLangkat\Indopay\GatewayFactory; $gateway = GatewayFactory::make('xendit', [ 'secret_key' => $_ENV['XENDIT_SECRET_KEY'], 'callback_token' => $_ENV['XENDIT_CALLBACK_TOKEN'] ?? null, ]);
2. Create Payment Response
<?php use PutraLangkat\Indopay\DTO\ChargeRequest; use PutraLangkat\Indopay\Enums\PaymentMethod; $response = $gateway->charge(new ChargeRequest( externalId: 'order-1001', amount: 150000, payerEmail: 'buyer@example.com', description: 'Order #1001', paymentMethods: [PaymentMethod::BCA, PaymentMethod::QRIS], callbackUrl: 'https://merchant.test/webhooks/xendit', metadata: ['order_id' => 'order-1001'], ));
$response memakai struktur standar dari indopay-php. Data asli dari gateway tetap tersedia penuh di raw.
<?php $response->provider; // xendit $response->id; // invoice/payment ID $response->externalId; // order-1001 $response->status; // PaymentStatus enum $response->amount; // 150000 $response->checkoutUrl; // checkout/payment link $response->raw; // full response asli Xendit $array = $response->toArray();
3. Webhook Result
<?php use PutraLangkat\Indopay\DTO\WebhookPayload; $result = $gateway->handleWebhook(new WebhookPayload( headers: getallheaders(), body: file_get_contents('php://input') ?: '' )); $array = $result->toArray();
WebhookResult::$raw berisi payload webhook mentah. WebhookResult::$payment memakai PaymentDetails, dengan struktur standar yang sama dan payload asli tersedia di $result->payment->raw.
Response Shape
ChargeResponse dan PaymentDetails punya top-level shape yang sama:
[
'provider' => 'xendit',
'id' => 'inv-...',
'externalId' => 'order-...',
'status' => 'pending',
'amount' => 150000,
'checkoutUrl' => 'https://...',
'raw' => [
// full response asli gateway
],
]
status di object adalah enum PaymentStatus. Di toArray(), status dikembalikan sebagai string value seperti pending, paid, atau settled.
Dokumentasi Detail
Development
composer install
composer validate --strict
composer test
composer lint