Skip to content

Latest commit

Β 

History

32 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

GoPay Merchant Gateway

Node.js Express OTP Auth QRIS Deploy Options

Chat Owner Β  Channel

API Gateway self-hosted berbasis Node.js untuk otomatisasi cek transaksi dan cetak QRIS dinamis dari akun GoPay / GoFood Merchant kamu.


Note

πŸ’¬ HUBUNGI OWNER & BERGABUNG CHANNEL:

Tip

πŸ“£ PENGUMUMAN & UPDATE TERBARU: Sistem Login OTP Terminal & Auto-Refresh Token Gateway ini sekarang menggunakan sistem autentikasi OTP Terminal (node login.js). Kamu tidak perlu lagi copy-paste cookie browser atau memasukkan password. Cukup masukkan nomor HP GoBiz & kode OTP 1 kali saja β€” token akan tersimpan dan otomatis di-refresh oleh server di background setiap 6 jam tanpa perlu login ulang!

Caution

🚨 PERSYARATAN DEPLOYMENT (VPS / cPanel / Pterodactyl Panel) Gateway ini dapat di-deploy di VPS, cPanel Hosting, maupun Pterodactyl Panel (Node.js Egg v18.x/v20.x) yang memiliki penyimpanan permanen 24/7. DILARANG MENGGUNAKAN HOSTING SERVERLESS GRATISAN (seperti Render Free, Vercel, Netlify) karena container akan sleep dan menghapus file sesi (.GOPAY_SESI_JANGAN_DIHAPUS.json), yang mengakibatkan sesi hangus dan harus login OTP ulang.

Warning

⚠️ DISCLAIMER PROYEK TIDAK RESMI: Project ini tidak berafiliasi dengan PT GoTo Gojek Tokopedia Tbk / GoPay. Gunakan dengan bijak. Polling yang terlalu agresif bisa memicu pembatasan akun. Risiko ditanggung pengguna sepenuhnya. Seluruh data berjalan 100% aman di server Anda sendiri tanpa dikirim ke pihak ketiga.


✨ Fitur Utama

  • πŸ” Login OTP Terminal β€” Login resmi via SMS/WA (node login.js) menggunakan nomor HP GoBiz.
  • πŸ”„ Auto-Refresh Token (Set-and-Forget) β€” Token diperbarui otomatis di background. Login cukup 1 kali saja.
  • 🧾 QRIS Dinamis (EMVCo) β€” Generate QRIS nominal custom dari QRIS statis merchant secara lokal dengan parser EMVCo presisi tinggi (CRC16).
  • πŸ“± Halaman Checkout QRIS Interaktif β€” UI web modern siap pakai dengan timer hitung mundur 5 menit, tombol cek manual anti-banned, & auto-polling opsional (8s).
  • βœ… Cek Pembayaran Real-Time β€” Cocokkan nominal + waktu transaksi secara otomatis. Setiap payment memiliki trx_id unik sehingga dua payment nominal sama tidak akan saling klaim (anti duplikat klaim per TRX-ID).
  • πŸ“‹ Riwayat Mutasi Transaksi β€” Ambil daftar mutasi QRIS/GoPay/Kartu dalam rentang waktu tertentu.
  • 🌐 Dua Cara Request (GET & POST) β€” Bisa dipanggil via URL query di browser atau JSON body dari backend web store.
  • πŸ”’ Proteksi API Key & Public QR API β€” Endpoint backend dilindungi API_KEY rahasia, serta mendukung endpoint check status public aman untuk frontend UI.
  • 🐳 Docker, PM2 & Pterodactyl Ready β€” Siap di-deploy ke VPS Linux, cPanel, atau Pterodactyl Panel dalam hitungan menit.

πŸ’» Persyaratan System

  • VPS / Dedicated Server dengan Linux (Ubuntu 20.04/22.04, Debian, AlmaLinux, dll) & Node.js β‰₯ 18.
  • Akun GoBiz / GoFood Merchant aktif yang terdaftar dengan nomor HP.
  • QRIS statis dari aplikasi GoBiz (untuk fitur generate QRIS dinamis).

πŸ› οΈ Quick Start (Pengujian Lokal)

1. Clone & Install Dependencies

git clone https://github.com/ahmadzakiyox/gopay-api-gateaway.git
cd gopay-api-gateaway
npm install

2. Konfigurasi .env

Salin template .env.example ke .env:

cp .env.example .env

Isi variabel di file .env:

PORT=3000
API_KEY=YOUR_API_KEY_HERE
QRIS_STATIC=YOUR_QRIS_STATIC_HERE
GOPAY_MERCHANT_ID=YOUR_MERCHANT_ID_HERE

3. Login OTP di Terminal (1 Kali Saja)

node login.js
  • Masukkan nomor HP GoBiz (contoh: 085119772671).
  • Masukkan kode OTP (4 digit) yang dikirimkan via SMS/WA.
  • Sesi login akan disimpan secara permanen di file .GOPAY_SESI_JANGAN_DIHAPUS.json.

πŸš€ Panduan Deploy Lengkap ke VPS (Production Setup)

Untuk memastikan gateway berjalan 24/7 non-stop di VPS dan token auto-refresh bekerja dengan baik, ikuti langkah deploy di bawah ini:

πŸ“ Langkah 1: Install Node.js & Git di VPS

Jalankan perintah ini di terminal VPS kamu (contoh untuk Ubuntu/Debian):

# Update package list & install Git
sudo apt update && sudo apt install -y git curl

# Install Node.js v20 LTS via NodeSource
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs

πŸ“ Langkah 2: Setup Project & Login OTP Pertama Kali

# Clone repository
git clone https://github.com/ahmadzakiyox/gopay-api-gateaway.git
cd gopay-api-gateaway

# Install dependencies
npm install

# Buat & sesuaikan .env
cp .env.example .env
nano .env   # (isi API_KEY & QRIS_STATIC kamu)

# Jalankan login OTP (masukkan no HP & OTP)
node login.js

πŸ“ Langkah 3: Pilih Metode Deploy Production

Kamu bisa memilih salah satu dari 2 metode deploy production berikut:

🟒 Metode A: Deploy Menggunakan PM2 (Sangat Direkomendasikan)

PM2 adalah Process Manager untuk Node.js agar server otomatis hidup kembali jika terjadi crash atau VPS di-reboot.

  1. Install PM2 secara global:

    sudo npm install -g pm2
  2. Jalankan gateway dengan PM2:

    pm2 start server.js --name "gopay-gateway"
  3. Simpan agar otomatis jalan saat VPS di-reboot:

    pm2 save
    pm2 startup

    (Jalankan perintah yang dimunculkan oleh pm2 startup jika ada).

  4. Perintah Berguna PM2:

    • Cek status server: pm2 status
    • Cek log real-time: pm2 logs gopay-gateway
    • Restart server: pm2 restart gopay-gateway

🐳 Metode B: Deploy Menggunakan Docker & Docker Compose

Jika VPS kamu sudah terinstall Docker:

  1. Pastikan file .env dan .GOPAY_SESI_JANGAN_DIHAPUS.json sudah ada.
  2. Jalankan container di background:
    docker compose up -d
  3. Cek status & log container:
    docker compose logs -f

πŸ”’ (Opsional) Langkah 4: Setup Nginx Reverse Proxy & SSL HTTPS

Jika kamu ingin mengakses gateway via domain HTTPS (misal https://gopay.domainkamu.com):

server {
    server_name gopay.domainkamu.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Gunakan Certbot untuk SSL gratis:

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d gopay.domainkamu.com

🌐 Panduan Deploy ke cPanel Hosting (Setup Node.js App)

Bagi kamu yang menggunakan cPanel Shared Hosting / Web Hosting (seperti Niagahoster, Hostinger cPanel, DomaiNesia, JagoanHosting, dll), ikuti panduan setup berikut:

Important

⚠️ WAJIB MENGGUNAKAN NODE.JS VERSION 18.x DI CPANEL! Jangan memilih Node.js 20.x di cPanel karena fitur internal WebAssembly (undici) di Node 20 akan menyebabkan error RangeError: WebAssembly.instantiate(): Out of memory akibat pembatasan Virtual Memory CloudLinux cPanel. Gunakan versi Node.js 18.x.

πŸ“ Langkah 1: Upload File ke cPanel

  1. Masuk ke cPanel -> File Manager.
  2. Buat folder baru (misal gopay-gateway) atau upload seluruh source code ke folder yang diinginkan.
  3. Pastikan file .env sudah ada dan diisi (salin dari .env.example).
    • ⚠️ Perhatian Port: Jangan menyetel PORT=443 atau PORT=80 di .env. Biarkan PORT=3000 atau hapus baris PORT. cPanel akan secara otomatis menangani SSL HTTPS domain kamu.

πŸ“ Langkah 2: Setup Aplikasi di cPanel

  1. Buka menu Setup Node.js App di cPanel.
  2. Klik Create Application.
  3. Isi konfigurasi sebagai berikut:
    • Node.js version: Pilih 18.x (Wajib 18.x)
    • Application mode: Production
    • Application root: Nama folder tempat upload (contoh: gopay-gateway)
    • Application URL: Domain/subdomain kamu (contoh: gopay.domainkamu.com)
    • Application startup file: server.js (Wajib diubah dari default app.js)
  4. Klik Create di pojok kanan atas.

πŸ“ Langkah 3: Install Dependencies & Login OTP via Terminal cPanel

  1. Masuk ke menu Terminal di cPanel (atau SSH ke cPanel).

  2. Copy perintah pengaktifan virtualenv dari bagian atas halaman Setup Node.js App (contoh: source /home/user/nodevenv/gopay-gateway/18/bin/activate && cd /home/user/gopay-gateway).

  3. Jalankan script otomatisasi setup.sh:

    bash setup.sh

    Script ini akan otomatis meng-install dependencies dan memandu login OTP GoPay (node login.js).

  4. Kembali ke menu Setup Node.js App di cPanel, lalu klik tombol Restart.

  5. Cek aplikasi di browser: https://gopay.domainkamu.com/health.


πŸ¦– Panduan Deploy ke Pterodactyl Panel (Bot / App Hosting)

Bagi kamu yang menggunakan Pterodactyl Panel (panel hosting yang umum digunakan untuk Discord bot / server Node.js), ikuti langkah-langkah berikut:

Important

πŸ’‘ TIPS LOGIN OTP UNTUK PTERODACTYL: Karena konsol web Pterodactyl terkadang kurang responsif untuk input interaktif terminal (node login.js), disarankan untuk melakukan login OTP 1x di PC lokal / VPS terlebih dahulu, kemudian mengunggah file .GOPAY_SESI_JANGAN_DIHAPUS.json yang dihasilkan ke File Manager Pterodactyl.

πŸ“ Langkah 1: Persiapkan Sesi Login (Lokal / VPS)

  1. Jalankan npm install dan node login.js di komputer lokal atau VPS kamu.
  2. Masukkan nomor HP GoBiz & kode OTP 4-digit.
  3. Setelah berhasil login, file .GOPAY_SESI_JANGAN_DIHAPUS.json akan otomatis dibuat.

πŸ“ Langkah 2: Upload Files ke Pterodactyl

  1. Buka Pterodactyl Panel -> Pilih Server kamu -> Masuk ke File Manager.
  2. Upload seluruh file project (termasuk server.js, sessionManager.js, package.json, dll).
  3. Upload juga file .GOPAY_SESI_JANGAN_DIHAPUS.json yang sudah dibuat pada Langkah 1.
  4. Buat file .env di File Manager Pterodactyl:
    PORT=3000
    API_KEY=API_KEY_RAHASIA_KAMU
    QRIS_STATIC=00020101021126...
    GOPAY_MERCHANT_ID=MERCHANT_ID_KAMU
    (Pterodactyl akan menyesuaikan port secara otomatis sesuai alokasi port server kamu).

πŸ“ Langkah 3: Konfigurasi Startup & Console

  1. Masuk ke menu Startup di Pterodactyl Panel:
    • Set Startup Command: node server.js atau npm start
    • Set JS File / Entry File: server.js
  2. Masuk ke menu Console Pterodactyl.
  3. Jalankan npm install jika package belum terinstall otomatis.
  4. Klik Start / Restart server.

πŸ“ Langkah 4: Cek Status Server

Lihat log pada Console. Jika berhasil, akan muncul:

[SERVER] Gateway running on port 3000
[GOPAY-SESSION] Verification successful. Merchant name: TOKO KAMU

Kamu bisa mengakses endpoint health melalui URL server Pterodactyl kamu (misal: http://IP_PANEL:PORT/health).


πŸ“‘ API Reference

Semua endpoint memerlukan autentikasi. Bisa lewat Header atau Query Parameter:

Header   : X-Api-Key: <API_KEY>
Query    : ?api_key=<API_KEY>

GET /token-status β€” Cek Status Sesi Token

Memverifikasi apakah token GoPay Merchant masih aktif dan valid.

GET http://vps-ip:3000/token-status?api_key=RAHASIA

Respon Sukses:

{
  "success": true,
  "data": {
    "token_status": "valid",
    "message": "Token dan Sesi GoPay Merchant Aktif"
  }
}

GET /create-qris β€” Buat QRIS Dinamis

Membuat QRIS nominal custom dari QRIS statis secara in-memory (lokal). QR aktif selama 5 menit.

GET http://vps-ip:3000/create-qris?amount=25000&api_key=RAHASIA
Parameter Tipe Keterangan
amount number Nominal transaksi dalam Rupiah (wajib)
api_key string API Key kamu

Respon Sukses:

{
  "success": true,
  "data": {
    "qris_id": "abc123xyz",
    "trx_id": "TRX-A3F8K2M9",
    "qris_url": "http://vps-ip:3000/qr/abc123xyz",
    "qris_code": "00020101021126...",
    "amount": 25000,
    "expires_at": "2026-07-24T00:20:00.000Z",
    "expires_in": "5 menit"
  }
}

Tip

Simpan trx_id yang dikembalikan. Gunakan nilai ini sebagai parameter trx_id saat memanggil /check-payment agar dua payment dengan nominal sama tidak saling klaim transaksi satu sama lain.

GET /qr/:id β€” Halaman Pembayaran QRIS Interaktif (Web UI)

Membuka halaman HTML pembayaran QRIS yang interaktif. Dilengkapi dengan:

  • Tombol Cek Manual ("πŸ”„ Cek Status Pembayaran") β€” (Paling Aman / Anti-Banned) Pengecekan 1x klik instan setelah pembeli transfer.
  • Hitung Mundur Kedaluwarsa 5 Menit β€” Countdown visual batas waktu transaksi.
  • Checkbox Toggle Auto-Polling (Opsional) β€” Off secara default untuk proteksi rate-limit. Jika dicentang pembeli, mengecek status setiap 8 detik di background.
  • Format gambar mentah bisa diakses dengan query ?format=raw atau ?raw=1.

GET /api/qr-status/:id β€” Status Check Public (Tanpa API Key)

Endpoint public yang digunakan oleh halaman HTML /qr/:id untuk memeriksa status pembayaran tanpa perlu mengekspos API_KEY di browser pembeli.

GET http://vps-ip:3000/api/qr-status/abc123xyz

GET /check-payment β€” Cek Pembayaran Masuk (Backend / Server-to-Server)

Mencari transaksi yang cocok berdasarkan nominal dan timestamp. Setiap transaksi hanya bisa diklaim 1x per trx_id (anti klaim ganda, termasuk untuk dua payment dengan nominal sama).

GET http://vps-ip:3000/check-payment?amount=25000&trx_id=TRX-A3F8K2M9&api_key=RAHASIA
Parameter Tipe Default Keterangan
amount number β€” Nominal transaksi yang dicari (wajib)
trx_id string β€” TRX-ID dari /create-qris β€” scope klaim agar tidak tabrakan dengan payment nominal sama (sangat direkomendasikan)
startTime string 24 jam lalu Timestamp ISO awal pencarian
api_key string β€” API Key kamu

Respon Sukses (Lunas):

{
  "success": true,
  "paid": true,
  "transaction": {
    "transaction_id": "gopay-internal-tx-id",
    "order_id": "GOPAY-1234567890",
    "amount": 25000,
    "payer_issuer": "GoPay / BCA",
    "payment_type": "QRIS",
    "transaction_time": "2026-07-24T00:15:12.000Z"
  }
}

GET /transactions β€” Riwayat Mutasi Transaksi

GET http://vps-ip:3000/transactions?api_key=RAHASIA
Parameter Tipe Default Keterangan
startTime unix timestamp 3 hari lalu Waktu awal (dalam detik)
endTime unix timestamp Sekarang Waktu akhir (dalam detik)
pageSize number 20 Jumlah transaksi yang diambil

GET /api/logs β€” Log Aktivitas Gateway

GET http://vps-ip:3000/api/logs?api_key=RAHASIA

🌐 Cara Request: GET vs POST

Gateway ini sangat fleksibel untuk diintegrasikan ke sistem toko online (PHP, Laravel, Node.js, Python, WordPress, dll):

Metode Contoh Pemanggilan
GET (URL Query) http://vps-ip:3000/create-qris?amount=25000&api_key=RAHASIA
POST (JSON Body) POST /create-qris dengan Body: {"amount": 25000} & Header X-Api-Key

πŸ“ Struktur Project

gopay-gateway/
β”œβ”€β”€ server.js                         # Express API Server & Logika Gateway
β”œβ”€β”€ login.js                          # CLI Login OTP Interaktif Terminal (Encrypted)
β”œβ”€β”€ sessionManager.js                 # Auto-Refresh Sesi & Token Manager (Encrypted)
β”œβ”€β”€ setup.sh                          # Script Omatisasi Install & Setup (Linux/cPanel)
β”œβ”€β”€ .env                              # File Konfigurasi Rahasia (Local)
β”œβ”€β”€ .env.example                      # Template Konfigurasi
β”œβ”€β”€ .GOPAY_SESI_JANGAN_DIHAPUS.json   # File Sesi Aktif (Wajib Ada di VPS/cPanel)
β”œβ”€β”€ Dockerfile                        # Konfigurasi Docker
└── docker-compose.yml                # Konfigurasi Docker Compose

πŸ’¬ Kontak & Komunitas

Ada pertanyaan, error, atau mau diskusi? Hubungi langsung:

Chat Owner Β  Channel


β˜• Dukung Project Ini

Kalau project ini bermanfaat buat kamu, traktir saya kopi ya! β˜•

QRIS Donasi ahmadzakiyo
Nominal bebas β€” terima kasih banyak! πŸ™

About

API Gateway mandiri (Autonomous) berkinerja tinggi untuk memantau mutasi transaksi GoPay Merchant dan men-generate QRIS Dinamis (EMVCo) secara otomatis.

Topics

Resources

Stars

199 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages