Semua artikel
PanduanWaktu baca 9 menit

Notifikasi refund yang terlewat bisa membuat Anda kehilangan satu-satunya refund yang boleh Anda sanggah, dan kedua toko memungkinkan Anda memulihkannya jika Anda memeriksa tepat waktu

Saat server Anda melewatkan notifikasi refund, dua alur refund yang meminta bukti dari Anda akan ditutup tanpa Anda. Berikut cara Apple dan Google Play mengirim ulang, seberapa jauh ke belakang notifikasi refund yang terlewat bisa dipulihkan, dan di mana celah pemulihannya.

Rak server di malam hari dengan satu lampu peringatan kuning di antara lampu hijau yang menyala stabil dan sebuah laptop di atas troli di depannya, gangguan senyap yang menjadi penyebab notifikasi refund terlewat

Poin utama

  • Apple mencoba ulang pengiriman App Store Server Notifications V2 yang gagal sebanyak lima kali, yaitu 1, 12, 24, 48, dan 72 jam setelah percobaan sebelumnya, sehingga percobaan ulang kedua tiba sekitar 13 jam setelah percobaan pertama.
  • Apple meminta developer menjawab CONSUMPTION_REQUEST dalam 12 jam sejak menerimanya, sehingga server yang melewatkan pengiriman pertama dan percobaan ulang satu jam kemudian mungkin baru melihat permintaan itu setelah batas waktunya kemungkinan besar lewat.
  • Endpoint Get Notification History milik Apple mengembalikan notifikasi V2 dari 180 hari terakhir di production, 20 record per halaman, dan flag onlyFailures membatasi hasil pada notifikasi yang tidak pernah sampai ke server Anda, ditambah yang masih dicoba ulang.
  • Google Play hanya mengirim tinjauan chargeback melalui PendingRefundReviewNotification, dan pendingRefundToken yang dibutuhkan untuk memanggil orders.reviewrefund dalam 24 jam ada di notifikasi itu. Google tidak mendokumentasikan API terpisah yang menampilkan daftar tinjauan yang tertunda.
  • Google Cloud Pub/Sub menyimpan pesan yang belum di-acknowledge selama 7 hari secara default, maksimal 31 hari, dan menghapus subscription setelah 31 hari tanpa aktivitas subscriber kecuali Anda mengubah periode kedaluwarsanya.
  • Voided Purchases API Google Play memulihkan refund, pencabutan, dan chargeback dari 30 hari terakhir, dengan kuota 6.000 kueri per hari dan 30 kueri dalam setiap periode 30 detik, tetapi API ini tidak bisa memulihkan tinjauan chargeback yang tidak pernah Anda jawab.
  • Sandbox Apple mengirim setiap notifikasi sekali saja tanpa percobaan ulang, sehingga rutinitas pemulihan yang hanya pernah dijalankan di sandbox belum pernah diuji terhadap jadwal percobaan ulang Apple yang sebenarnya.

Notifikasi refund yang terlewat adalah cara senyap developer kehilangan dua keputusan refund yang masih bisa mereka pengaruhi. CONSUMPTION_REQUEST dari Apple dan tinjauan chargeback dari Google Play sama-sama dimulai dengan notifikasi, dan keduanya ditutup dengan tenggat yang singkat: 12 jam di Apple, 24 jam di Google. Jika server Anda mati, lambat, atau salah konfigurasi saat pesan itu datang, toko tidak akan menunggu Anda. Toko akan memutuskan dengan informasi yang sudah dimilikinya.

Kabar baiknya, tidak ada toko yang membuang pesan pada kegagalan pertama. Apple mencoba ulang dan menyimpan riwayat 180 hari yang bisa Anda kueri. Google memublikasikan lewat Pub/Sub, yang menahan pesan yang belum di-acknowledge selama beberapa hari. Kabar buruknya, jadwal percobaan ulang tidak sejalan dengan batas waktu respons, dan salah satu dari dua alur itu sama sekali tidak punya API pemulihan.

Cara setiap toko mengirim notifikasi refund

Apple mengirim App Store Server Notifications langsung ke URL HTTPS yang Anda atur di App Store Connect. Google tidak memanggil server Anda secara langsung. Google memublikasikan Real-time developer notifications ke topik Google Cloud Pub/Sub, lalu subscription Anda pada topik itu akan mendorongnya ke endpoint Anda atau menunggu server Anda menariknya.

PertanyaanApp StoreGoogle Play
Saluran pengirimanHTTPS POST ke URL AndaTopik Cloud Pub/Sub, push atau pull
Apa yang dianggap berhasilHTTP 200 sampai 206Acknowledge pesan Pub/Sub, atau kode sukses di endpoint push
Percobaan ulang5 untuk V2, pada 1, 12, 24, 48, dan 72 jam setelah percobaan sebelumnyaPub/Sub mengirim ulang sampai di-acknowledge atau periode retensi berakhir
Berapa lama pesan yang terlewat bertahan180 hari di Get Notification History7 hari secara default di subscription, hingga 31 hari
Refund yang meminta bukti AndaCONSUMPTION_REQUEST, dijawab dalam 12 jamPendingRefundReviewNotification, dijawab dalam 24 jam
Cadangan berbasis pull untuk refund yang disetujuiGet Notification History, Get Refund HistoryVoided Purchases API, 30 hari terakhir
Perilaku sandbox atau ujiSatu percobaan, tanpa percobaan ulangSend Test Message dari Play Console

Apa yang dianggap gagal oleh Apple

Dokumentasi Apple cukup spesifik. Kembalikan status apa pun dari 200 sampai 206 dan pengiriman dianggap selesai. Kembalikan 40x atau 50x dan Apple akan mencoba ulang. Apple juga menganggap semua kode lain tidak berhasil. Setiap percobaan dicatat dengan sendAttemptResult, dan nilainya terbaca seperti daftar periksa gangguan nyata: TIMED_OUT, TLS_ISSUE, CIRCULAR_REDIRECT, NO_RESPONSE, PREMATURE_CLOSE, UNSUCCESSFUL_HTTP_RESPONSE_CODE, dan beberapa lainnya. Untuk TIMED_OUT, saran Apple sendiri adalah memastikan server Anda tidak memproses pesan secara langsung sebelum merespons.

Apa yang dianggap gagal oleh Google

Pada subscription push, kode respons sukses dari endpoint Anda adalah acknowledgement-nya. Pada subscription pull, server Anda harus meng-acknowledge setiap pesan yang ditariknya, atau Pub/Sub akan mengirimkannya lagi. Batas waktu acknowledgement default adalah 10 detik dan maksimalnya 600 detik. Panduan RTDN Google menambahkan satu aturan yang layak diulang: notifikasi hanya memberi tahu bahwa ada sesuatu yang berubah, jadi Anda tetap perlu memanggil Google Play Developer API untuk mendapatkan status pembelian lengkap.

Mengapa jadwal percobaan ulang Apple tidak cocok dengan batas waktu 12 jam

Interval percobaan ulang Apple dihitung dari percobaan sebelumnya, bukan dari percobaan pertama. Jika dijumlahkan, Anda mendapatkan linimasa berikut untuk satu notifikasi V2 yang terus gagal diterima server Anda.

PercobaanJeda setelah percobaan sebelumnyaJam sejak percobaan pertama
Pengiriman pertamaTidak ada0
Percobaan ulang 11 jam1
Percobaan ulang 212 jam13
Percobaan ulang 324 jam37
Percobaan ulang 448 jam85
Percobaan ulang 572 jam157

Apple meminta Anda merespons dalam 12 jam sejak menerima CONSUMPTION_REQUEST. Jika server Anda mati saat pengiriman pertama dan saat percobaan ulang satu jam kemudian, percobaan berikutnya baru tiba 13 jam setelah yang pertama. Apple tidak menjelaskan apakah permintaan yang pertama kali diterima lewat percobaan ulang mendapat 12 jam baru. Tafsiran yang hati-hati adalah menganggap percobaan pertama sebagai awal hitungan, yang berarti percobaan ulang saja tidak akan menyelamatkan permintaan yang Anda lewatkan lebih dari satu jam.

Apakah Apple mencoba ulang setelah HTTP 400?

Ya, menurut dokumentasinya. Apple mencantumkan 40x dan 50x sebagai kode yang memicu percobaan ulang. Pada Maret 2026, seorang developer melaporkan di forum Apple bahwa percobaan ulang setelah respons 400 tampaknya berhenti, lalu mengatakan pengiriman kembali berjalan satu atau dua hari kemudian, dan Apple meminta laporan lewat Feedback Assistant. Jadikan perilaku yang terdokumentasi sebagai aturan, dan pemantauan Anda sendiri sebagai buktinya.

Pulihkan notifikasi App Store yang terlewat dengan Get Notification History

Get Notification History mengembalikan notifikasi versi 2 yang dicoba dikirim Apple ke server Anda dalam rentang waktu yang Anda pilih. Setiap record membawa payload lengkap yang ditandatangani, sehingga Anda bisa memasukkannya ke handler yang sama seperti notifikasi langsung. Setiap record juga menyertakan array sendAttempts hingga enam entri, satu untuk percobaan pertama dan satu untuk masing-masing dari lima percobaan ulang.

  • startDate dan endDate wajib diisi, dan startDate harus berada dalam 180 hari terakhir di production atau 30 hari terakhir di sandbox.
  • Atur onlyFailures ke true untuk hanya mendapatkan notifikasi yang belum sampai ke server Anda, ditambah yang masih dicoba ulang oleh Apple.
  • Filter berdasarkan satu notificationType, seperti CONSUMPTION_REQUEST atau REFUND, atau berdasarkan transactionId untuk satu pelanggan, tetapi tidak keduanya dalam permintaan yang sama.
  • Setiap panggilan mengembalikan hingga 20 record. Terus panggil dengan paginationToken selama hasMore bernilai true, dan kirim body permintaan yang sama setiap kali.

Ada satu catatan penting untuk refund. Apple menyatakan bahwa record riwayat mencerminkan status pembelian saat notifikasi pertama kali dikirim, bukan status saat ini. Jadi REFUND yang dipulihkan adalah fakta tentang masa lalu. Sebelum mencabut akses, periksa status terkini dengan endpoint status transaksi atau langganan.

Notifikasi V1 tidak bisa dipulihkan dengan cara ini

Get Notification History hanya mencakup versi 2. Apple mencoba ulang notifikasi V1 tiga kali, pada 6, 24, dan 48 jam setelah percobaan sebelumnya, dan jika semuanya gagal, tidak ada riwayat yang bisa diputar ulang. Itu satu alasan lagi untuk memindahkan aplikasi yang masih memakai V1 ke V2.

Pulihkan notifikasi refund Google Play yang terlewat

Jaring pengaman Google adalah Pub/Sub itu sendiri. Selama subscription Anda masih ada, pesan yang belum di-acknowledge siapa pun tetap tersimpan selama periode retensi, 7 hari secara default dan hingga 31 hari jika Anda menaikkannya. Saat endpoint Anda kembali aktif, pengiriman berlanjut. Ada dua pengaturan yang diam-diam bisa menggagalkan hal itu.

  • Topik dead-letter memindahkan pesan keluar dari subscription Anda setelah sejumlah percobaan pengiriman gagal. Defaultnya 5, dan dengan kebijakan percobaan ulang default berupa pengiriman ulang langsung, lima percobaan bisa lewat dengan cepat. Jika Anda memakainya, pantau topik dead-letter seperti kotak masuk kedua.
  • Subscription tanpa aktivitas subscriber, seperti koneksi terbuka, pull aktif, atau push yang berhasil, kedaluwarsa setelah 31 hari secara default. Endpoint yang rusak selama sebulan bisa kehilangan subscription itu sendiri, beserta semua yang menunggu di dalamnya.

Refund yang dibatalkan punya cadangan 30 hari

Untuk refund yang sudah terjadi, Voided Purchases API adalah cadangan berbasis pull. API ini menampilkan pembelian yang dibatalkan dari 30 hari terakhir, hingga 1.000 per halaman, dengan kuota 6.000 kueri per hari dan 30 kueri dalam setiap periode 30 detik untuk setiap aplikasi. Kirim type 1 untuk menyertakan langganan bersama produk sekali beli. Menjalankannya setiap hari akan menangkap refund apa pun yang terlewat oleh pipeline notifikasi Anda, sehingga hak akses dan angka pendapatan tetap akurat.

Tinjauan chargeback tidak punya cadangan

PendingRefundReviewNotification berbeda. Notifikasi ini membawa pendingRefundToken yang harus Anda kirim ke orders.reviewrefund, dan Anda punya 24 jam sejak menerimanya untuk mengirim preferensi refund dan bukti penggunaan. Google mencatat panggilan pertama Anda dan mengabaikan sisanya. Dokumentasi Google tidak menjelaskan endpoint apa pun yang menampilkan daftar tinjauan tertunda, jadi jika pesan Pub/Sub itu hilang, bukti Anda untuk chargeback tersebut ikut hilang.

Berapa biaya notifikasi refund yang terlewat

Notifikasi yang terlewat untuk refund yang sudah final hanya merepotkan pembukuan. Anda menemukannya belakangan di Voided Purchases API atau Get Notification History, mencabut akses jika kebijakan Anda mengharuskannya, dan laporan Anda menyusul. Merepotkan, tetapi murah.

Notifikasi yang terlewat di salah satu dari dua alur yang bisa disanggah menimbulkan kerugian uang yang nyata, karena toko memutuskan tanpa bukti Anda. Di Apple, artinya keputusan refund dibuat tanpa data konsumsi Anda. Di Google Play, untuk pesanan yang dibuat setelah 3 Agustus 2026, chargeback yang kalah membuat Anda kehilangan harga pembelian dikurangi biaya layanan Play, ditambah biaya chargeback yang dikenakan bank pembeli. Google hanya menanggung biaya layanannya sendiri.

Dan uang yang Anda keluarkan untuk memberikan pembelian itu sudah habis sebelum sengketa dimulai.

  • Komputasi: waktu GPU dan server di balik setiap hasil generasi, render, atau respons model yang sudah dipakai pembeli.
  • Panggilan API: permintaan ke pihak ketiga yang ditagih saat itu juga, sering kali per panggilan.
  • Penyimpanan: file dan media yang dibuat pembeli, masih tercantum di tagihan hosting Anda.
  • Pembayaran: bagi hasil yang sudah dibayarkan ke kreator, afiliasi, atau mitra atas penjualan itu.

Tidak satu pun dari itu kembali saat refund disetujui. Bukti yang Anda kirim dalam 12 atau 24 jam itu adalah satu-satunya alat yang Anda punya, dan notifikasi yang terlewat menghilangkannya.

Rutinitas pemulihan yang andal

  • Acknowledge dulu. Simpan payload mentah, kembalikan kode sukses, lalu proses di antrean.
  • Lakukan polling Get Notification History milik Apple dengan onlyFailures setiap beberapa menit untuk CONSUMPTION_REQUEST, sehingga gangguan hanya menghabiskan beberapa menit dari batas waktu 12 jam.
  • Jalankan sapuan Get Notification History harian dengan onlyFailures untuk beberapa hari terakhir di semua tipe, lalu putar ulang apa yang Anda temukan.
  • Jalankan panggilan Voided Purchases API harian dengan type 1 untuk setiap aplikasi Google Play, lalu cocokkan dengan refund yang sudah Anda catat.
  • Di Pub/Sub, pertahankan retensi pesan 7 hari atau lebih, pasang peringatan pada topik dead-letter jika Anda memakainya, dan pasang peringatan saat pesan yang belum terkirim menumpuk.
  • Uji seluruh jalurnya di production juga. Sandbox Apple mengirim setiap notifikasi sekali tanpa percobaan ulang, sedangkan Request a Test Notification bersama Get Test Notification Status menunjukkan persis bagaimana server Anda merespons.
Sebuah ponsel tergeletak menghadap ke atas di samping cangkir kopi dan buku catatan di atas meja dalam cahaya pagi, awal yang tenang untuk pemeriksaan harian notifikasi refund yang terlewat

RefundHalt menerima notifikasi dari kedua toko untuk Anda dan menjawab CONSUMPTION_REQUEST serta tinjauan chargeback secara otomatis dalam batas waktunya, jadi bukan Anda yang harus terus mengawasi jam.

Pertanyaan yang sering diajukan

Berapa lama Apple terus mencoba ulang notifikasi server App Store yang gagal?
Sekitar enam setengah hari untuk versi 2. Apple mencoba ulang lima kali, pada 1, 12, 24, 48, dan 72 jam setelah percobaan sebelumnya, sehingga percobaan ulang terakhir datang 157 jam setelah pengiriman pertama. Notifikasi versi 1 mendapat tiga percobaan ulang, pada 6, 24, dan 48 jam setelah percobaan sebelumnya.
Seberapa jauh ke belakang saya bisa memulihkan notifikasi server App Store yang terlewat?
180 hari di production. Endpoint Get Notification History milik Apple mengembalikan notifikasi versi 2 dari 180 hari terakhir, atau 30 hari terakhir di sandbox, 20 record per panggilan, dan flag onlyFailures membatasi hasil pada notifikasi yang tidak pernah sampai ke server Anda.
Apakah Apple mencoba ulang notifikasi jika server saya mengembalikan HTTP 400?
Ya, menurut dokumentasi Apple. Apple mencoba ulang saat server Anda mengembalikan status 40x atau 50x, dan menganggap 200 sampai 206 sebagai berhasil. Status lain apa pun juga dihitung sebagai tidak berhasil.
Bisakah saya memulihkan tinjauan chargeback Google Play yang terlewat?
Hanya selama pesan Pub/Sub masih ada. pendingRefundToken yang Anda butuhkan untuk orders.reviewrefund datang di PendingRefundReviewNotification, dan Google tidak mendokumentasikan API yang menampilkan daftar tinjauan tertunda, jadi pesan yang belum di-acknowledge di subscription, yang disimpan 7 hari secara default, adalah satu-satunya salinan Anda.
Bagaimana cara menemukan refund Google Play yang terlewat oleh server saya?
Panggil Voided Purchases API. API ini mengembalikan pembelian yang dibatalkan dari 30 hari terakhir, termasuk refund, pencabutan, dan chargeback, hingga 1.000 hasil per halaman dengan kuota 6.000 kueri per hari per aplikasi. Kirim type 1 untuk menyertakan langganan.

Sumber dan bacaan lanjutan

RefundHalt

Autopilot refund untuk App Store dan Google Play

Baca selanjutnya

Permintaan refund berikutnya sudah menuju kepada Anda.

Siapkan RefundHalt dalam waktu yang dibutuhkan untuk membaca satu lagi email dukungan tentang refund yang tidak sempat Anda sengketakan.