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
  1. Pastikan anda sudah install aplikasi Qiospay Playstore.
  2. Registrasi akun anda dan pastikan datanya valid.
  3. 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.
  4. Setelah membuat QRIS toko silahkan menunggu 1-7 hari kerja untuk pembuatan QRIS-nya.
  5. 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)

ParametersDescription
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

ParametersDescription
statusSuccess Get ke url dengan merchant_code dan api_key berhasil.
dateTanggal dalam format YYYY-MM-DD HH:mm:ss.
amountNominal transaksi.
typeCR (Kredit), DB (Debet) format general.
qrisstatic OR dinamic.
brand_nameNama atau ID penyedia pembayaran.
issuer_reffReferensi dari Aquirer.
buyer_reffReferensi dari penyedia pembayaran.
balanceSaldo mitra setelah kredit atau debet, format general.

1.3 Tabel Respon Error

ParametersDescription
statuserror, kesalahan merchant_code atau api_key.
messagesKeterangan 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" } }