Binding QRIS statis
Setelah merchant dan store dipilih, ikat payload QRIS ke scope aktif:setStaticQris memvalidasi checksum dan menjalankan staticToDynamicQris sebelum menyimpan. Ia menolak bila belum ada merchant/store aktif. QRIS yang diikat direkam bersama owner-nya (staticQrisScope).
Owner QRIS dan store
Scope Shopee memakai merchant bisnis sebagaiaccountId dan store terpilih sebagai merchantId. QRIS hanya aktif ketika staticQrisScope cocok dengan merchant/store itu. Store lain tidak mewarisi QRIS lama.
staticQrisScope wajib bila QRIS tidak dapat diinfer dari restored session/store. Constructor boleh menginfer owner hanya dari session/store yang sudah dipilih.
Membuat dan memantau
shopee.payments() mengembalikan PaymentService untuk scope aktif (dibuat lazily; membutuhkan store terpilih). Event paid, expired, dan error serta start()/stop() bekerja sama seperti provider lain. Lihat Model pembayaran.
Jebakan feed ShopeePay
Normalisasi ketat
Shopee mengirim nominal seperti"30.000". Parser hanya menerima digit polos atau kelompok ribuan Indonesia yang valid. Nilai ambigu seperti "30.00", desimal, simbol mata uang, dan angka di luar safe integer ditolak.
Hanya status 3 yang sukses
Hanya status numerik3 yang dinormalisasi menjadi completed. Status lain menjadi label non-sukses shopee:<kode> dan tidak boleh dianggap lunas tanpa bukti baru.
Cursor next_position
Feed menggunakan cursornext_position. Adapter mendeteksi cursor yang berulang atau tidak maju (melempar ApiError) dan melaporkan truncation bila maxPages tercapai. Jangan memaksakan pagination offset GoPay ke Shopee.
Transisi store dan payment aktif
selectStore() menolak perpindahan bila scope lama masih memiliki payment aktif. Service rekonsiliasi disimpan per scope agar karantina nominal dan transaction id yang sudah dipakai tidak hilang saat berpindah lalu kembali. Selama login, discovery, atau pergantian store, seluruh service terkait dihentikan sampai perubahan sesi berhasil dipersist. Jika operasi gagal, sesi, cookie, dan polling sebelumnya dipulihkan.
Reference PaymentService dari store lama menjadi inactive; createPayment(), cancelPayment(), start(), dan tick() akan ditolak. Ambil kembali service aktif melalui shopee.payments() setelah transisi selesai. Jika berpindah store, jalankan set-qris shopee atau setStaticQris() untuk store baru sebelum membuat QR payment. Lihat Sesi Shopee.
Referensi
Model pembayaran
Siklus, event, dan tuning.
Referensi ShopeeProvider
setStaticQris, createPayment, payments.