Proyek ini menyediakan klien PHP siap pakai untuk terhubung ke REST API InterActive QRIS. Klien ini dibangun di atas ay4t/php-rest-client, dilengkapi retry, timeout, logging, validasi, dan struktur yang mudah diintegrasikan ke aplikasi Anda.
Ay4t\QRIS adalah namespace library yang menyediakan:
- Generate QR (Create Invoice) untuk menampilkan QRIS dinamis.
- Cek status pembayaran (Check Invoice Status).
- Utilitas validasi response dan pengecekan expired (30 menit).
- Konfigurasi aman via
.envmenggunakanvlucas/phpdotenv. - Logging ke berkas
logs/qris-client.log.
Arsitektur inti berada pada:
src/Config/QrisSettings.php— membaca konfigurasi dari.env.src/Service/QrisClient.php— operasi utama create dan check status.src/Logger/QrisLogger.php— logger sederhana berbasis file.
- Tambahkan dependency via Composer:
composer require ay4t/php-rest-client vlucas/phpdotenv- Pastikan
composer.jsonmemiliki autoload PSR-4:
{
"autoload": {
"psr-4": {
"Ay4t\\QRIS\\": "src/"
}
}
}Lalu jalankan:
composer dump-autoload- Siapkan file
.envdi root proyek Anda:
# QRIS base URI (opsional, default sudah di-set)
QRIS_BASE_URI=https://qris.interactive.co.id/restapi/qris
# Kredensial
QRIS_APIKEY=your_api_key_here
QRIS_MID=your_mid_here
# Opsional
QRIS_NMID=your_nmid_hereCatatan: Library juga mendukung fallback nama variabel .env berikut untuk kompatibilitas: api_key, mID, NMID.
<?php
require __DIR__ . '/vendor/autoload.php';
use Ay4t\QRIS\Service\QrisClient;
use Ay4t\RestClient\Exceptions\ApiException;
$client = new QrisClient();
try {
// 1) Create Invoice (Generate QR)
$create = $client->createInvoice('INV-20250917-001', 10000, 'no');
$valid = $client->validateCreateResponse($create);
if (!$valid['valid']) {
// Tangani invalid/expired
var_dump($valid);
exit;
}
$invoiceId = (int)$create['data']['qris_invoiceid'];
$qrisString = $client->getQrisContentFromCreateResponse($create);
// Tampilkan $qrisString sebagai QR Code (gunakan library QR sesuai UI)
// 2) Check Status
$check = $client->checkStatus($invoiceId, 10000, date('Y-m-d'));
if ($client->isPaid($check)) {
// Update transaksi -> paid
} else {
// unpaid/failed -> lakukan retry sesuai rekomendasi dokumentasi
}
} catch (ApiException $e) {
error_log('API Error: ' . $e->getMessage());
} catch (Throwable $e) {
error_log('Error: ' . $e->getMessage());
}Skrip CLI disediakan untuk uji cepat:
php bin/qris.php create INV-20250917-001 10000 no
php bin/qris.php status 413255111 10000 2025-09-17- Perintah
createmengembalikan JSON berisiqris_content,qris_request_date,qris_invoiceid,qris_nmidketika sukses. - Perintah
statusmengembalikan JSON statuspaid/unpaidsesuai respons API.
- Simpan API key dan mID hanya di
.env(jangan commit ke repository publik). - Gunakan retry moderat dan ikuti rekomendasi dokumentasi InterActive QRIS:
- Tombol manual: timeout 15 detik, ulang 3x saat
failed. - Cron: 60 detik sekali, max 30 kali.
- Tombol manual: timeout 15 detik, ulang 3x saat
- Simpan
qris_content,qris_request_date, danqris_invoiceidsegera setelah create-invoice. - Siapkan endpoint webhook di aplikasi Anda jika suatu saat provider menyediakan callback (saat ini dokumentasi publik InterActive QRIS menekankan polling).
Kontribusi sangat kami hargai!
- Fork repository ini.
- Buat branch fitur:
git checkout -b feat/nama-fitur. - Pastikan code style rapi, tambahkan DocBlock, dan sertakan test bila memungkinkan.
- Ajukan Pull Request dengan deskripsi jelas tentang perubahan Anda.
Untuk diskusi teknis atau bug report, silakan gunakan issue tracker GitHub.
Dirilis di bawah lisensi MIT. Lihat berkas LICENSE untuk detailnya.