Ulangi pesanan dengan request_id awal dan parameter yang tidak berubah. Jangan membuat kunci baru hanya karena koneksi timeout. Di NotPanel, pengulangan mengembalikan pesanan asli dengan replayed: true, atau membuatnya jika percobaan pertama tidak pernah sampai.
Pelanggan melakukan satu pembelian. Jika respons hilang setelah dikirim ke panel, langkah berikutnya adalah menemukan hasil pembelian itu tanpa mengubah ketidakpastian menjadi pembelian baru.
Timeout menyisakan tiga kemungkinan
- Permintaan tidak sampai dan belum ada pesanan yang diterima.
- Pesanan diterima, tetapi responsnya hilang.
- Permintaan tiba saat koneksi terputus; pengulangan dengan request_id yang sama memastikan mana dari dua kemungkinan di atas yang terjadi.
Timeout tidak membedakan ketiganya. HTTP sendiri tidak menjamin keamanan pengulangan POST pembelian; perlindungannya berasal dari kontrak API. Lihat RFC 9110, §9.2.2.
Cara NotPanel mengenali pengulangan
request_id bersifat opsional, tidak boleh kosong, dan maksimal 128 karakter. idempotency_key adalah aliasnya; request_id dipilih jika keduanya dikirim. Gunakan akun, kunci, dan seluruh parameter yang sama. Pesanan yang diterima mengembalikan ID awal; kunci yang sama dengan parameter berbeda ditolak.
Tanpa kedua kolom itu, NotPanel melindungi add identik dari akun yang sama selama 60 detik: pengulangan dalam jangka itu mengembalikan pesanan pertama, bukan membuat pesanan kedua. Jangan mengandalkan jendela pendek ini untuk pengulangan yang lebih lambat.
Dua pembelian identik yang disengaja juga digabung dalam jendela tersebut. Beri setiap pembelian baru request_id berbeda agar langsung terpisah. Jangan mengganti kunci untuk melewati hasil yang belum pasti.
Parameter dan respons pembuatan pesanan
Pertahankan request_id awal setelah timeout.
Coba lagi dengan kunci dan detail pesanan yang sama.
Simpan ID pesanan asli yang dikembalikan pengulangan.
Simpan identitas pembelian sebelum mengirim
Untuk baris pembelian 8427, simpan request_id dan semua parameter sebelum percobaan pertama. Skema memakai penanda dan pemisah baris; enkode formulir sebenarnya secara normal. Kirim nilai asli hanya jika Anda menginginkan pesanan berbayar.
POST https://notpanel.com/api/v3
Content-Type: application/x-www-form-urlencoded
key=YOUR_API_KEY
&action=add
&service=YOUR_SERVICE_ID
&link=YOUR_TARGET_URL
&quantity=YOUR_VALID_QUANTITY
&request_id=checkout-8427-line-1Setelah timeout, kirim kembali checkout-8427-line-1 dengan layanan, target, jumlah, dan kolom opsional yang sama, termasuk setelah aplikasi dimulai ulang. Simpan ID yang diterima untuk status. request_id mengidentifikasi pembuatan pesanan, bukan pengganti ID pesanan untuk pemeriksaan status. Gunakan order_details untuk mencari pesanan berdasarkan request_id.
Baca seluruh respons
- Timeout atau respons tidak pasti
- Pertahankan kunci dan parameter. Batasi percobaan, beri jeda, dan patuhi Retry-After. Simpan catatan belum terselesaikan ketika batas percobaan habis.
- INTERNAL_ERROR, API_DISABLED, atau ORDER_PLACEMENT_PAUSED (retryable: true)
- Tunggu, ikuti Retry-After jika ada, lalu kirim add yang sama dengan request_id yang sama. Anda akan mendapat pesanan asli atau tepat satu pesanan baru. Jangan membuat pengganti dengan kunci berbeda.
- REQUEST_ID_CONFLICT
- Bandingkan parameter tersimpan. Pulihkan pesanan memakai parameter awal; kunci baru hanya untuk pembelian yang sengaja berbeda.
- Kesalahan validasi, autentikasi, atau batas permintaan
- Baca error_code dan retryable. Perbaiki data atau kredensial, lalu patuhi waktu tunggu. Jangan mengulangi semua kesalahan otomatis.
Uji pemulihan sebelum menerima pembelian pelanggan
Mulai dengan API tiruan di lingkungan pengujian sendiri. Tidak perlu pembelian nyata atau kunci uji khusus NotPanel.
- Simulasikan pesanan diterima lalu respons hilang; pastikan kunci dan parameter tetap sama.
- Mulai ulang klien dan pulihkan identitas tersimpan.
- Simulasikan 500 atau 503 yang dapat diulang, lalu pengulangan dengan replayed: true; pastikan hanya satu ID pesanan tersimpan.
- Simulasikan konflik atau kesalahan yang tidak dapat diulang; pastikan percobaan otomatis berhenti.
- Buat dua pembelian baru identik dengan kunci berbeda. Untuk pengujian nyata berikutnya, gunakan pesanan yang memang diinginkan dan periksa pesanan serta catatan dompet.
Pertanyaan umum
Apakah timeout berarti ditagih dua kali?
Tidak. Artinya aplikasi tidak mendapat respons yang dapat digunakan. Periksa pesanan yang ditemukan dan catatan dompet sebelum menyimpulkan adanya tagihan ganda.
Apakah request_id wajib?
Tidak. request_id dan idempotency_key opsional. Tanpanya, add identik dari akun yang sama dilindungi selama 60 detik. Kunci eksplisit menentukan identitas setiap pembelian.
Haruskah membuat kunci baru setiap percobaan?
Tidak. Simpan satu kunci sebelum percobaan pertama dan gunakan kembali dengan pesanan yang tidak berubah. Pembelian baru mendapat kunci baru.
Bisakah mencari pesanan dengan request_id?
Bisa, dengan order_details: kirim action=order_details dengan request_id yang sama untuk mendapatkan pesanan dan nomornya tanpa mengulang add. Jika tidak ada pesanan yang dibuat, hasilnya ORDER_NOT_FOUND. Aksi status tetap memerlukan nomor pesanan.
Baca berikutnya: panduan integrasi · webhook dan pemeriksaan status · referensi kesalahan.



