π Bridge Transaksi IP Center yang Simple & Powerful
Backend bridge untuk transaksi pulsa, kuota, voucher game, dan produk digital lainnya ke IP Center.
β¨ Features β’ π Quick Start β’ π‘ API Docs β’ βοΈ Configuration
Auvyn Apies adalah bridge sederhana yang menghubungkan backend utama Anda (misal Cloudflare Worker) dengan IP Center (engine penyedia produk digital).
- Abstraksi Sempurna: Backend utama tidak perlu tahu detail rumit IP Center
- API Clean: Komunikasi terstruktur dan mudah dipahami
- Production Ready: Sudah include monitoring, logging, dan notifikasi
- Secure: Built-in authentication dan sanitization
β οΈ Catatan Penting
Credential pada README ini hanya contoh dummy. Konfigurasi asli wajib via.envatau installer.
- β Signature SHA1 + Base64URL untuk transaksi IP Center
- β
Secret-based authentication untuk semua endpoint
/api/* - β Callback Secret untuk validasi webhook ke backend
- β Payload sanitization untuk keamanan data
- β Structured logging dengan Winston (success, pending, failed, report)
- β Notifikasi Telegram per kategori transaksi + report
- β Monitoring saldo otomatis + alert saldo rendah
- β
Endpoint
/reportuntuk webhook final dari IP Center
- β RESTful API yang simpel dan intuitif
- β Callback system event-driven
- β Support custom metadata untuk tracking
- β Multi-event types (transaction, balance, ticket)
- β
Instalasi satu perintah pakai
setup.sh(PM2) - β PM2 process manager (lebih tahan & gampang restart)
- β
Script pembersih log otomatis
cleanup-logs.sh - β
Script update cepat
update.sh(PM2)
βββββββββββββββββββββββ
β Frontend / Web β
ββββββββββββ¬βββββββββββ
β
βΌ
βββββββββββββββββββββββ
β Backend Utama β
β (Cloudflare) ββββΊ POST /api/transaction (secret)
ββββββββββββ¬βββββββββββ
β
βΌ
βββββββββββββββββββββββ
β Auvyn Apies β
β (VPS Server) β
β β
β β’ Buat signature β
β β’ Kirim ke Center β
β β’ Parse response β
β β’ Klasifikasi β
β β’ Log & Notify β
β β’ Callback β
ββββββββββββ¬βββββββββββ
β
βΌ
βββββββββββββββββββββββ
β IP Center β
β (Otomax/SW) β
β β
β β’ Proses transaksi β
β β’ Kirim report β
βββββββββββββββββββββββ
- Request β Backend utama call
/api/transactiondengan product & dest - Processing β Auvyn Apies kirim request ke IP Center β dapat respon awal (biasanya pending)
- Callback β Auvyn Apies kirim callback sanitized event
transaction.requestke backend - Report β IP Center kirim report final ke endpoint
/report - Final β Auvyn Apies klasifikasi final, log, telegram, lalu callback event
transaction.report
Jalankan sebagai root:
bash <(curl -fsSL https://raw.githubusercontent.com/Matsumiko/auvyn-apies/main/setup.sh)Mulai versi 1.2.x, installer memakai PM2 (bukan systemd). Cek status:
pm2 lsβ’ Log:pm2 logs auvyn-apiesβ’ Restart:pm2 restart auvyn-apies
- β Install dependencies (curl, git, node.js)
- β
Clone/update repo ke
/opt/auvyn-apies - β Install npm packages
- β
Setup
.envinteraktif - β Start app pakai PM2 + enable auto-start
# Check status
pm2 ls
# View logs real-time
pm2 logs auvyn-apies
# Restart
pm2 restart auvyn-apies
# Stop
pm2 stop auvyn-apiesauvyn-apies/
βββ π server.js # Entry point
βββ π package.json # Dependencies
βββ π§ setup.sh # Installer script
βββ π§ update.sh # Update script
βββ π§ cleanup-logs.sh # Log cleanup script
βββ π .env.example # Environment template
βββ π logs/ # Log files
β βββ combined.log
β βββ error.log
β βββ trx-success.log
β βββ trx-pending.log
β βββ trx-failed.log
β βββ report.log
βββ π src/
βββ config.js # Configuration loader
βββ logger.js # Winston logger
βββ telegram.js # Telegram notifications
βββ callback.js # Callback handler
βββ store.js # Data store
βββ ipCenter.js # IP Center integration
βββ server.js # Express server
βββ middleware/
β βββ auth.js # Authentication middleware
βββ routes/
βββ api.js # API routes
βββ report.js # Report webhook
Buat file .env di root project atau isi lewat installer:
# Server Configuration
PORT=5882
# IP Center Credentials
CENTER_URL=http://10.0.0.1:6969
MEMBER_ID=AG000001
PIN=0000
PASSWORD=MyStrongPassword123
SIGN_PREFIX=ENGINE
# API Security
AUVYN_SECRET=super-secret-random-string
# Callback Configuration
CALLBACK_URL=https://worker.example.com/auvyn/callback
CALLBACK_SECRET=another-secret-or-same-as-above
# Logging & Monitoring
LOGS_DIR=./logs
BALANCE_LOW_LIMIT=50000
# Telegram Notifications (Optional)
TG_SUCCESS_BOT_TOKEN=
TG_SUCCESS_CHAT_ID=
TG_PENDING_BOT_TOKEN=
TG_PENDING_CHAT_ID=
TG_FAILED_BOT_TOKEN=
TG_FAILED_CHAT_ID=
TG_SYSTEM_BOT_TOKEN=
TG_SYSTEM_CHAT_ID=| Parameter | Required | Deskripsi |
|---|---|---|
PORT |
β | Port server (default: 5882) |
CENTER_URL |
β | Base URL IP Center |
MEMBER_ID |
β | ID agen provider |
PIN |
β | PIN agen |
PASSWORD |
β | Password IP Center |
SIGN_PREFIX |
β | Prefix signature (ikuti aturan provider) |
AUVYN_SECRET |
β | Secret untuk akses endpoint /api/* |
CALLBACK_URL |
βͺ | URL backend utama untuk menerima callback |
CALLBACK_SECRET |
βͺ | Secret callback (default: sama dengan AUVYN_SECRET) |
LOGS_DIR |
β | Direktori penyimpanan log (default: ./logs) |
BALANCE_LOW_LIMIT |
β | Batas alert saldo rendah dalam Rupiah (e.g., 50000) |
TG_*_BOT_TOKEN |
βͺ | Token bot Telegram per kategori |
TG_*_CHAT_ID |
βͺ | Chat ID Telegram per kategori |
π Authentication Required
Semua endpoint/api/*wajib menyertakan header:x-auvyn-secret: <AUVYN_SECRET>
GET /Response:
{
"ok": true,
"name": "auvyn-apies",
"message": "IP center bridge online",
"time": "2025-01-01T00:00:00.000Z"
}Test koneksi API dengan endpoint ini.
POST /api/ping
x-auvyn-secret: <your-secret>Response:
{
"ok": true,
"message": "pong"
}Endpoint utama untuk memproses transaksi produk digital.
POST /api/transaction
Content-Type: application/json
x-auvyn-secret: <your-secret>Request Body:
{
"product": "PFF",
"dest": "085727035336",
"qty": 1,
"refID": "AVN1234567890",
"meta": {
"orderId": "INV-123",
"source": "kuota-worker",
"client_id": "avn_cl_xxxxx"
}
}Multi-client callback routing Jika kamu pakai fitur clients/webhooks, pastikan request
/api/transactionmenyertakanmeta.client_idsupaya callback diarahkan ke webhook milik client tersebut.
Response (Internal - ke Backend Utama):
{
"ok": true,
"statusCode": 200,
"refID": "AVN1736425720255",
"product": "PFF",
"dest": "085727035336",
"qty": 1,
"raw": "[INTERNAL DATA]",
"balanceInfo": {
"remaining": 77827622
},
"category": "pending",
"providerResult": {
"state": "PENDING",
"code": "PENDING_AKAN_DIPROSES"
},
"meta": {
"orderId": "INV-123"
}
}Category Types:
successβ Transaksi berhasilpendingβ Transaksi sedang diprosesfailedβ Transaksi gagal
β οΈ Penting
Response dari/api/transactionadalah payload internal untuk backend utama.
Jika akan diteruskan ke frontend publik, lakukan filtering di backend utama.
Cek saldo member di IP Center.
POST /api/balance
Content-Type: application/json
x-auvyn-secret: <your-secret>Request Body (Optional):
{
"memberId": "AG000001",
"meta": {
"source": "manual-check"
}
}Response:
{
"ok": true,
"balance": 12345678,
"memberId": "AG000001"
}Request tiket deposit (M-Bal) ke IP Center.
POST /api/ticket-mbal
Content-Type: application/json
x-auvyn-secret: <your-secret>Request Body:
{
"amount": 25000000,
"memberId": "AG000001"
}Response:
{
"ok": true,
"ticket": "TICKET123456",
"amount": 25000000,
"memberId": "AG000001"
}Endpoint untuk menerima laporan final dari IP Center.
ALL /reportBehavior:
- Menerima semua HTTP method (GET, POST, PUT, dll)
- Log raw report ke
logs/report.log - Klasifikasi status final transaksi
- Kirim notifikasi Telegram
- Callback event
transaction.reportke backend utama
π‘ Info
Endpoint ini biasanya di-hit langsung oleh IP Center setelah transaksi selesai diproses.
Jika CALLBACK_URL di-set, Auvyn Apies akan mengirim callback ke backend utama setiap kali ada event.
POST <CALLBACK_URL>
Content-Type: application/json
x-auvyn-callback-secret: <CALLBACK_SECRET>
x-auvyn-event: <event-type>transaction.requestβ Respon awal transaksi dari IP Centertransaction.reportβ Laporan final transaksibalance.checkβ Hasil cek saldobalance.ticketβ Hasil request tiket M-Bal
Selain callback legacy via CALLBACK_URL, versi ini mendukung webhook per client yang dikelola dari endpoint admin.
Event yang dipakai untuk webhook client:
invoice.paid(category=success)invoice.failed(category=failed)invoice.pending(category=pending)
Event di atas diturunkan otomatis dari event internal transaction.request dan transaction.report.
Routing: webhook client ditentukan dari meta.client_id pada request /api/transaction.
Yang dibuang / disensor sebelum callback:
centerUrlβ URL IP Centersignβ Signature hashmemberIDβ ID member- Bagian sensitif pada
raw(HRG, M-Bal, SN/Ref, dll)
{
"ok": true,
"statusCode": 200,
"refID": "AVN1736425720255",
"product": "PFF",
"dest": "085727035336",
"qty": 1,
"category": "success",
"raw": "[REDACTED]",
"providerResult": {
"state": "SUCCESS",
"code": "SUKSES",
"sn": "[REDACTED]",
"raw": "[REDACTED]"
},
"meta": {
"orderId": "INV-123"
}
}π Keamanan
Payload callback sudah di-sanitize untuk melindungi data sensitif.
Backend utama hanya menerima informasi yang aman untuk diproses.
Semua endpoint /admin/* wajib menyertakan:
x-admin-secret: <ADMIN_SECRET>
x-admin-pin: <ADMIN_PIN>
x-admin-keys: <ADMIN_KEYS>GET /admin/client/list-clientsGET /admin/client/list-webhookPOST /admin/client/add-clients
Content-Type: application/json
{
"client_name": "fadzpay",
"url": "https://domain.com/api/v1/callback/webhook",
"events": ["invoice.paid","invoice.failed","invoice.pending"]
}Response akan mengembalikan client_secret, client_pin, client_keys dan secret_callback (ditampilkan sekali). Simpan segera.
POST /admin/client/del-clients
Content-Type: application/json
{ "client_id": "avn_cl_xxxxx" }Semua endpoint /client/* wajib menyertakan:
x-client-secret: <CLIENT_SECRET>
x-client-pin: <CLIENT_PIN>
x-client-keys: <CLIENT_KEYS>POST /client/rotate/secret-callbackPOST /client/rotate/url-callback
Content-Type: application/json
{
"webhook_id": "avn_wh_xxxxx",
"url": "https://domain.com/new-callback",
"events": ["invoice.paid","invoice.failed","invoice.pending"]
}| File | Isi |
|---|---|
combined.log |
Semua aktivitas aplikasi |
error.log |
Error & exception |
trx-success.log |
Transaksi sukses |
trx-pending.log |
Transaksi pending |
trx-failed.log |
Transaksi gagal |
report.log |
Webhook /report dari IP Center |
Auvyn Apies mendukung 4 kategori bot Telegram yang terpisah:
| Bot | Fungsi |
|---|---|
| SUCCESS | Notifikasi transaksi berhasil |
| PENDING | Notifikasi transaksi pending |
| FAILED | Notifikasi transaksi gagal |
| SYSTEM | Alert saldo rendah, report, error |
π‘ Pro Tip
Payload Telegram tetap full internal (aman karena hanya dikirim ke bot pribadi kamu).
Berbeda dengan callback ke backend yang sudah di-sanitize.
Bersihkan log lama untuk menghemat disk space.
cd /opt/auvyn-apies
./cleanup-logs.sh
# Atau custom retention
KEEP_DAYS=14 ./cleanup-logs.shSetup cron job untuk cleanup otomatis setiap hari jam 3 pagi:
crontab -eTambahkan line ini:
0 3 * * * /bin/bash /opt/auvyn-apies/cleanup-logs.sh >> /var/log/cleanup-auvyn.log 2>&1Kalau ada update di repository, jalankan:
sudo /opt/auvyn-apies/update.sh- β Auto stash kalau ada perubahan lokal
- β Pull update terbaru dari GitHub
- β Install dependency kalau ada perubahan
- β
Restart app via PM2 (
pm2 restart auvyn-apies) - β
File
.envtidak ditimpa
bash <(curl -fsSL https://raw.githubusercontent.com/Matsumiko/auvyn-apies/main/update.sh)Error:
error: Your local changes would be overwritten by merge
Solusi Cepat:
cd /opt/auvyn-apies
git stash
git pull --ff-only
git stash pop
pm2 restart auvyn-apiesAtau langsung pakai update.sh karena sudah auto-stash.
Checklist:
- β
Cek
CALLBACK_URLsudah benar - β Pastikan backend utama bisa diakses dari VPS
- β
Verifikasi
CALLBACK_SECRETcocok di kedua sisi - β Check firewall/security group
- β
Lihat log
combined.loguntuk error
Checklist:
- β Pastikan token bot benar
- β Bot sudah join grup/chat
- β Chat ID benar
- β Bot punya permission untuk send message
- β
Cek log
error.loguntuk detail error
Test Manual:
curl -X POST "https://api.telegram.org/bot<TOKEN>/sendMessage" \
-d "chat_id=<CHAT_ID>" \
-d "text=Test from Auvyn Apies"Debug:
# Lihat status detail
pm2 ls
# Lihat log error
pm2 logs auvyn-apies --lines 50
# Test manual run
cd /opt/auvyn-apies
node server.jsError:
Error: listen EADDRINUSE: address already in use :::5882
Solusi:
# Cari process yang pakai port
sudo lsof -i :5882
# Kill process
sudo kill -9 <PID>
# Atau ubah PORT di .envContributions are welcome! Kalau kamu punya ide atau perbaikan:
- Fork repository ini
- Buat branch baru (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push ke branch (
git push origin feature/amazing-feature) - Buat Pull Request
MIT License - lihat file LICENSE untuk detail.
Punya pertanyaan atau butuh bantuan?
- π Bug Report: GitHub Issues
- π‘ Feature Request: GitHub Discussions
Project ini dibuat untuk membantu seller produk digital Indonesia.
Kalau bermanfaat, jangan lupa kasih star β
Made with β€οΈ by Indonesian Developers
Ada contoh lengkap request curl di file (jalankan dengan , lalu edit host/secret sesuai kebutuhan).