Paymenku Docs

SDK resmi

SDK PHP, Node.js, dan Go untuk API Paymenku — instalasi, contoh, dan verifikasi webhook.

Tiga SDK resmi tersedia. Semuanya mencakup seluruh endpoint publik, menangani envelope status/success, menyediakan tipe galat, dan memverifikasi tanda tangan webhook.

Instalasi

composer require paymenku/sdk-php

Membuat transaksi

use Paymenku\Client;

$client = new Client(getenv('PAYMENKU_API_KEY'));

$trx = $client->transactions->create([
    'channel_code'   => 'qris',
    'amount'         => 15000,
    'reference_id'   => 'INV-20261027-001',
    'customer_name'  => 'Budi Santoso',
    'customer_email' => 'budi@example.com',
    'return_url'     => 'https://tokoanda.com/selesai',
], ['idempotencyKey' => 'INV-20261027-001']);

echo $trx['trx_id'];
echo $trx['payment_info']['qr_url'];

Peta metode

AksiPHPNode.jsGo
Buat transaksitransactions->create()transactions.create()Transactions.Create()
Cek statustransactions->get()transactions.get()Transactions.Get()
Daftar transaksitransactions->list()transactions.list()Transactions.List()
Batalkantransactions->cancel()transactions.cancel()Transactions.Cancel()
Refundtransactions->refund()transactions.refund()Transactions.Refund()
Kanal aktifpaymentChannels->list()paymentChannels.list()PaymentChannels.List()
Hitung feefees->calculate()fees.calculate()Fees.Calculate()
Panduan bayarpaymentInstructions->get()paymentInstructions.get()PaymentInstructions.Get()
Payment linkpaymentLinks->create() / ->get()paymentLinks.create() / .get()PaymentLinks.Create() / .Get()
Walletwallet->balance() / ->pendingBalance()wallet.balance() / .pendingBalance()Wallet.Balance() / .PendingBalance()
Verifikasi webhookWebhook::verify()verifyWebhookSignature()VerifyWebhook()

Menangani galat

use Paymenku\Exception\ApiException;
use Paymenku\Exception\NetworkException;

try {
    $client->transactions->create($input);
} catch (ApiException $e) {
    $e->statusCode();   // 422
    $e->getMessage();   // Validation failed
    $e->errors();       // ['amount' => ['validation.min']]
    $e->errorCode();
} catch (NetworkException $e) {
    // timeout atau koneksi gagal
}

Semua SDK memperlakukan envelope status: "error" atau success: false sebagai galat, meskipun HTTP-nya 200.

Verifikasi webhook

use Paymenku\Webhook;

$raw = file_get_contents('php://input');
$valid = Webhook::verify(
    $raw,
    $_SERVER['HTTP_X_PAYMENKU_TIMESTAMP'] ?? '',
    $_SERVER['HTTP_X_PAYMENKU_SIGNATURE'] ?? '',
    getenv('PAYMENKU_WEBHOOK_SECRET'),
);

Verifikasi memakai body mentah. Jangan parse JSON lalu marshal ulang — urutan kunci dan spasi berubah dan tanda tangan tidak cocok.

Catatan

  • Kunci sk_test_... untuk sandbox, sk_live_... untuk produksi (butuh KYC).
  • Nominal pada respons berupa string desimal; jangan dihitung sebagai float.
  • payment_info berbeda per kanal; transaction_id tidak selalu ada.
  • SDK tidak melakukan retry otomatis. Hormati Retry-After pada 429 dan gunakan Idempotency-Key saat mengulang.
  • Status resmi tetap datang dari webhook, bukan polling.

Tautan

On this page