putralangkat97/indopay-php

Framework-agnostic PHP payment gateway package for Indonesian payment providers.

Maintainers

Package info

github.com/putralangkat97/indopay-php

pkg:composer/putralangkat97/indopay-php

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

dev-master 2026-05-20 03:43 UTC

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.
  • PaymentManager sebagai 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