cakkatrok-orkutapie
v1.5.1
Published
Library QRIS dan OrderKuota dengan login OTP, mutasi langsung, payment checker, dan payment link.
Maintainers
Readme
cakkatrok-orkutapie
Library Node.js untuk QRIS dinamis dan integrasi OrderKuota: generate QRIS nominal unik, buat link gambar QRIS, login OTP, ambil mutasi QRIS, dan cek status pembayaran.
Endpoint OrderKuota yang dipakai bukan API publik resmi. Perubahan endpoint, parameter, autentikasi, atau rate limit dapat terjadi kapan saja. Gunakan hanya untuk akun milik sendiri dan ikuti ketentuan layanan yang berlaku.
Credit dan contact person resmi: t.me/rintisdep. Tidak ada pihak lain yang mewakili package ini.
Fitur
- Generate QRIS dinamis dari
BASE_QRIS - Tambah kode unik otomatis pada nominal pembayaran
- Buat gambar QRIS PNG dan link upload
- Login OTP OrderKuota
- Ambil mutasi QRIS langsung dari akun OrderKuota
- Cek pembayaran berdasarkan nominal, referensi, atau window waktu
- Support CommonJS, ESM, dan TypeScript declaration
Instalasi
npm install cakkatrok-orkutapieMinimal runtime:
node >= 18Keamanan
Package ini tidak membawa credential bawaan dan tidak membaca .env otomatis. Semua data sensitif harus dikirim dari aplikasi pemakai.
Data yang wajib disimpan aman:
BASE_QRISORKUT_USERNAMEORKUT_PASSWORDORKUT_TOKENORKUT_DEVICE_SEED- session login OrderKuota
Simpan credential di environment variable, secret manager, database terenkripsi, atau storage aman lain. Jangan commit .env, session JSON, QRIS asli, token, atau hasil mutasi berisi data user.
Source package juga tidak menulis endpoint/secret default sebagai plain text penuh. Nilai default tertentu dipacking sebagai byte array, memakai key terpecah, lalu didecode saat runtime. Ini obfuscation untuk mengurangi kebocoran tidak sengaja dan scan string sederhana, bukan pengganti secret manager.
Environment
Contoh .env di aplikasi user:
BASE_QRIS=000201010211...
ORKUT_USERNAME=username_orderkuota
ORKUT_PASSWORD=password_orderkuota
ORKUT_DEVICE_SEED=device_seed_tetap
ORKUT_TOKEN=123456:token_rahasiaJika memakai dotenv, load dari aplikasi user:
require('dotenv').config();Package ini sengaja tidak memanggil dotenv.config() agar bisa dipakai di server, worker, CLI, atau platform deployment yang berbeda.
Quick Start
CommonJS:
const { QRISPaymentLink } = require('cakkatrok-orkutapie');
const paymentLink = new QRISPaymentLink({
baseQrString: process.env.BASE_QRIS,
expiredMs: 24 * 60 * 60 * 1000
});
const result = await paymentLink.create(50_000);
console.log({
id: result.data.id,
imageurl: result.data.imageurl,
totalbayar: result.data.totalbayar,
expired_at: result.data.expired_at
});ESM:
import { QRISPaymentLink } from 'cakkatrok-orkutapie';
const paymentLink = new QRISPaymentLink({
baseQrString: process.env.BASE_QRIS
});
const result = await paymentLink.create(50_000);
console.log(result.data.imageurl);TypeScript:
import { QRISPaymentLink, type QRISPaymentLinkResponse } from 'cakkatrok-orkutapie';
const paymentLink = new QRISPaymentLink({
baseQrString: process.env.BASE_QRIS!
});
const result: QRISPaymentLinkResponse = await paymentLink.create(50_000);
console.log(result.data.totalbayar);Contoh response:
{
"status": true,
"data": {
"id": "QRIS-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "PENDING",
"imageurl": "https://domain-upload.example/qr/xxxx.png",
"nominal": 50000,
"kodeunik": 606,
"totalbayar": 50606,
"created_at": "2026-07-06T00:00:00.000Z",
"expired_at": "2026-07-07T00:00:00.000Z"
},
"code": 201
}Generate QRIS Manual
const { QRISGenerator } = require('cakkatrok-orkutapie');
const generator = new QRISGenerator({
baseQrString: process.env.BASE_QRIS
});
const payment = generator.generateQrStringWithUniqueCode(50_000, {
min: 1,
max: 999
});
console.log({
nominal: payment.baseAmount,
kodeunik: payment.uniqueCode,
totalbayar: payment.totalAmount
});Login OTP OrderKuota
const {
OrderKuotaAuth,
createOrderKuotaSessionData,
redactSessionData
} = require('cakkatrok-orkutapie');
const auth = new OrderKuotaAuth({
username: process.env.ORKUT_USERNAME,
password: process.env.ORKUT_PASSWORD,
deviceSeed: process.env.ORKUT_DEVICE_SEED
});
const request = await auth.requestOtp();
console.log('OTP dikirim ke:', request.destination);
const session = await auth.verifyOtp('123456');
const sessionData = createOrderKuotaSessionData({
username: process.env.ORKUT_USERNAME,
token: session.token,
deviceSeed: process.env.ORKUT_DEVICE_SEED,
deviceSeedSource: 'env'
});
console.log(redactSessionData(sessionData));redactSessionData() hanya untuk log/preview. Simpan sessionData asli di storage aman aplikasi.
Cek Mutasi dan Pembayaran
const { PaymentChecker } = require('cakkatrok-orkutapie');
const checker = new PaymentChecker({
auth_username: process.env.ORKUT_USERNAME,
auth_token: process.env.ORKUT_TOKEN,
deviceSeed: process.env.ORKUT_DEVICE_SEED,
allowAmountOnly: true
});
const result = await checker.waitForPayment({
reference: 'ORDER-123',
amount: 50_606,
startedAt: new Date(),
matchMode: 'amount'
}, {
intervalMs: 5_000,
timeoutMs: 24 * 60 * 60 * 1000
});
console.log(result);Custom Upload Endpoint
QRISPaymentLink memakai uploader default bawaan. Untuk production, sebaiknya pakai uploader milik aplikasi sendiri agar file QRIS berada di storage yang kamu kontrol.
const paymentLink = new QRISPaymentLink({
baseQrString: process.env.BASE_QRIS,
upload: async (image, fileName) => {
await myStorage.put(fileName, image, { contentType: 'image/png' });
return myStorage.publicUrl(fileName);
}
});Menjalankan Example
npm run example:payment-link:cjs
npm run example:payment-link:mjs
npm run example:payment-link:tsxGit Bash:
export BASE_QRIS='000201010211...'
npm run example:payment-link:cjsLoad .env manual di Git Bash:
set -a
source .env
set +a
npm run example:payment-link:cjsTest
npm testDry-run package sebelum publish:
npm run pack:checkCatatan
ORKUT_DEVICE_SEEDdisarankan stabil per user/perangkat agar identitas device konsisten.- Jika
ORKUT_DEVICE_SEEDkosong pada example tertentu, package dapat memakai IP jaringan lokal atau fallback. - Jangan tampilkan token penuh di log. Gunakan
maskSecret()atauredactSessionData()untuk preview aman. - Credit/contact resmi hanya t.me/rintisdep.
Lisensi
MIT
