Introduction
Qiospay adalah aplikasi server pulsa dan PPOB, serta menyediakan payments QRIS yang dapat diintegrasikan ke sistem anda dan saat ini support untuk Server : w38s, SERPUL, BUKAOLSHOP.
Panduan Step By Step penggunaan QRIS Qiospay
- Pastikan anda sudah install aplikasi Qiospay Playstore.
- Registrasi akun anda dan pastikan datanya valid.
- Setelah akun selesai registrasi silahkan menuju ke menu QRIS Toko untuk pembuatan QRIS-nya. Kami rekomendasikan menggunakan nama brand/usaha anda dengan jelas contoh : Warung Coto Mas Adi, Qiospay Payment, Angga Store, Qiosku Payment dll.
- Setelah membuat QRIS toko silahkan menunggu 1-7 hari kerja untuk pembuatan QRIS-nya.
- Kemudian setelah semuanya jadi silahkan ke website -> profil -> Qiospay Api atau bisa klik link ini Dashboard QRIS Merchant.
Note :
- Pastikan anda akses Dashboard QRIS merchant via website dan login terlebih dahulu.
- Pastikan anda mengerti pemrograman sehingga anda mudah dalam integrasikan.
GET - Get Mutasi
Endpoint ini digunakan untuk menarik data mutasi transaksi QRIS Anda secara langsung melalui URL parameter. Gunakan endpoint ini untuk sinkronisasi data mutasi ke sistem Anda.
GET
https://qiospay.id/api/mutasi/qris/{merchant_code}/{api_key}
Tabel Kredensial (URL Parameters)
| Parameters | Description |
|---|---|
| merchant_code | Merchant Code yang ada pada Dashboard (Integrasi API). |
| api_key | Api Key yang ada pada Dashboard (Integrasi API). |
1.2 Tabel Response Success
| Parameters | Description |
|---|---|
| status | Success Get ke url dengan merchant_code dan api_key berhasil. |
| date | Tanggal dalam format YYYY-MM-DD HH:mm:ss. |
| amount | Nominal transaksi. |
| type | CR (Kredit), DB (Debet) format general. |
| qris | static OR dinamic. |
| brand_name | Nama atau ID penyedia pembayaran. |
| issuer_reff | Referensi dari Aquirer. |
| buyer_reff | Referensi dari penyedia pembayaran. |
| balance | Saldo mitra setelah kredit atau debet, format general. |
1.3 Tabel Respon Error
| Parameters | Description |
|---|---|
| status | error, kesalahan merchant_code atau api_key. |
| messages | Keterangan tambahan. |
Example Request
CURL
curl --location 'https://qiospay.id/api/mutasi/qris/CP0xx/137c9ddc5e055636ef79dxxx'
Example Response Success
JSON
{
"status": "success",
"data": [
{
"date": "2024-07-03 22:38:07",
"amount": "13000",
"type": "CR",
"brand_name": "93600014",
"balance": "1893938"
}
]
}
POST - Callback QRIS
Callback adalah fitur notifikasi real-time yang dikirimkan oleh server Qiospay ke URL server Anda segera setelah dana masuk terdeteksi.
POST
https://domain-anda.com/api/callback/accept/{secret_key}
Full Implementation Script (CodeIgniter 3)
application/controllers/Endpoint.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Endpoint extends CI_Controller
{
public function __construct()
{
parent::__construct();
date_default_timezone_set('Asia/Jakarta');
}
public function accept($key = '')
{
$SECRET_KEY = 'mysecret';
if ($key !== $SECRET_KEY) {
return $this->output
->set_status_header(403)
->set_content_type('application/json')
->set_output(json_encode([
'status' => 'reject',
'message' => 'Invalid secret key',
'data' => null
]));
}
$inputRaw = file_get_contents('php://input');
$json = json_decode($inputRaw, true);
$responseData = [
'name' => null,
'nmid' => null,
'amount' => null,
'type' => null,
'fee' => null,
'refid' => null,
'issuer' => null,
'balance' => null,
'time' => null,
];
if (is_array($json) && isset($json['data']) && is_array($json['data'])) {
$data = $json['data'];
$responseData = [
'name' => $data['name'] ?? null,
'nmid' => $data['nmid'] ?? null,
'amount' => $data['amount'] ?? null,
'type' => $data['type'] ?? null,
'fee' => $data['fee'] ?? null,
'refid' => $data['refid'] ?? null,
'issuer' => $data['issuer'] ?? null,
'balance' => $data['balance'] ?? null,
'time' => $data['time'] ?? null,
];
}
// Log Otomatis ke application/logs/callback_qris/
$logDir = APPPATH . 'logs/callback_qris/';
$nameLog = preg_replace('/[^a-zA-Z0-9_-]/', '', $responseData['name'] ?? 'unknown');
$nmidLog = preg_replace('/[^a-zA-Z0-9_-]/', '', $responseData['nmid'] ?? 'nonmid');
$logFile = $logDir . "data[$nameLog]-$nmidLog.json";
if (!is_dir($logDir)) {
mkdir($logDir, 0777, true);
}
$logEntry = [
'time' => date('Y-m-d H:i:s'),
'ip' => $this->input->ip_address(),
'raw' => $inputRaw,
'json' => $json
];
$logs = [];
if (file_exists($logFile)) {
$content = file_get_contents($logFile);
$logs = json_decode($content, true);
if (!is_array($logs)) $logs = [];
}
$logs[] = $logEntry;
if (count($logs) > 50) {
$logs = array_slice($logs, -50);
}
file_put_contents($logFile, json_encode($logs, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES));
return $this->output
->set_content_type('application/json')
->set_output(json_encode([
'status' => 'accept',
'message' => 'Data received successfully',
'data' => $responseData
]));
}
}
Contoh Request Callback (Payload) :
JSON POST Body
{
"status": "success",
"data": {
"name": "JHON",
"nmid": "ID20233072912345",
"amount": 1000,
"type": "CR",
"fee": 0,
"refid": 295094156,
"issuer": "93600002",
"balance": "24100",
"time": "17/06/2025 18:52"
}
}