Login lewat CLI
~/.merchantid/config.json. Simpan file itu sebagai kredensial privat. Lihat Ikhtisar CLI.
Login lewat kode
1
Minta OTP
requestOtp menerima format nomor Indonesia apa pun (62/+62/08/8, dengan pemisah) dan mengirim GoID nomor subscriber polos plus country code. Ia mengembalikan LoginRequestResult dengan otpToken opsional.2
Verifikasi OTP
verifyOtp menukar OTP dengan TokenSet, menginisialisasi token manager, lalu mencoba meresolusi merchant id dan QRIS statis. phoneNumber/countryCode diterima untuk simetri API tetapi tidak dikirim ke endpoint token.3
Simpan sesi
exportSession mengembalikan SessionState berisi token dan device id. Perlakukan sebagai kredensial.LoginService untuk UI web
CLI menggerakkan login lewat prompt terminal.LoginService mengekspos alur yang sama sebagai langkah awaitable plus callback, sehingga front end React, Vue, atau Next.js dapat membangun layar login sendiri.
requestOtp melempar bila gagal, sedangkan verifyOtpAndLogin tidak pernah melempar - kegagalan dilaporkan lewat LoginResult.error sehingga UI dapat merendernya langsung. createLoginService(config?) membuat instance dengan GopayProvider baru bila tidak disediakan.
Untuk memeriksa apakah sesi tersimpan masih hidup tanpa mengganggu instance utama:
validateSession mengembalikan false untuk kegagalan apa pun (sesi ditolak maupun jaringan tak terjangkau). Untuk membedakan keduanya, lakukan request nyata dan periksa AuthError/HttpError yang dilempar.
Refresh token
GoID hanya menerima refresh token di dalam objekdata:
- Bentuk flat ditolak
401 goid:error:unauthorized- pesan generik yang terlihat seperti token kedaluwarsa, padahal request-nya malformed. - Bearer request refresh sengaja kosong agar refresh reaktif setelah
401tetap mungkin. Refresh yang bergantung pada access token yang sudah ditolak tidak akan pernah memulihkan sesi. - Refresh token baru dari server harus diadopsi dan dipersist lewat
onTokenRefreshed; jangan pin token lama. - Fallback expiry 30 menit karena access token JWE tidak dapat dibaca klaim
exp-nya dan respons tidak selalu menyediakanexpires_in.
Sesi dicabut
Login dari perangkat lain dapat mencabut sesi. Polling akan surfaceAuthError dengan code AUTH_FAILED. Perlakukan itu sebagai kebutuhan login ulang, bukan sebagai status belum dibayar. Lihat Penanganan error.
Referensi
Lihat Referensi API GopayProvider untukrequestOtp, verifyOtp, exportSession, dan refreshSession.