Baca kode alasan refund yang sudah diterima server Anda, dan itu memberi tahu apakah harus memperbaiki aplikasi atau melawan pelanggan
Setiap refund yang dikirim Apple dan Google ke server Anda membawa kode alasan. Google Play mencantumkan salah satu dari sembilan alasan dan satu sumber pada setiap void, Apple menandai apakah refund itu menyalahkan aplikasi Anda. Berikut arti setiap kode, cara memilahnya menjadi perbaiki, lawan, atau terima, dan berapa nilainya dalam uang.

Poin utama
- Setiap refund yang dikirim Apple atau Google ke server Anda membawa kode alasan refund, dan itulah satu bagian dari refund yang bisa Anda baca setelah uang sudah berpindah. Kode itu memberi tahu mengapa refund terjadi, yang menunjukkan apa yang harus Anda lakukan berikutnya.
- Voided Purchases API milik Google Play mencantumkan dua angka pada setiap void: voidedReason dari 0 sampai 8 (other, remorse, not received, defective, accidental purchase, fraud, friendly fraud, chargeback, unacknowledged purchase) dan voidedSource 0 pengguna, 1 developer, atau 2 Google.
- Apple memberi Anda sinyal yang lebih sempit tapi tajam. Pada transaksi yang di-refund, revocationReason bernilai 1 ketika App Store me-refund karena masalah nyata atau yang dianggap ada di dalam aplikasi Anda, dan 0 ketika refund terjadi karena alasan lain seperti pembelian tidak sengaja.
- Kode-kode itu terbagi menjadi tiga tumpukan. Defective, not received, unacknowledged, dan kode issue-in-app dari Apple menunjuk ke produk Anda, jadi Anda perbaiki. Fraud, friendly fraud, dan chargeback adalah sengketa yang Anda lawan atau cegah. Remorse dan accidental purchase memang tidak pernah bisa Anda hentikan.
- voidedReason 8, unacknowledged purchase, adalah refund yang Anda tagih sendiri. Google otomatis me-refund dan mencabut pembelian apa pun yang gagal diakui aplikasi Anda dalam tiga hari, dan kode ini adalah cara Anda menemukan bug itu dalam integrasi Anda sendiri.
- voidedReason 7, chargeback, adalah yang mahal. Untuk pesanan Google Play yang dibuat pada atau setelah 3 Agustus 2026, chargeback yang kalah membuat developer menanggung harga pembelian dikurangi biaya layanan Play ditambah biaya chargeback bank, jadi menghitung void berkode chargeback Anda berarti menghitung biaya tambahan yang nyata.
- Voided Purchases API hanya menengok 30 hari ke belakang, dan memfilter berdasarkan kapan Google melihat void itu, bukan kapan pembelian terjadi, jadi kode alasan yang tidak Anda tangkap dalam jendela itu adalah kode alasan yang hilang selamanya.
Ketika Apple atau Google me-refund salah satu pelanggan Anda, uang biasanya sudah hilang sebelum Anda sempat ikut memutuskan. Yang mendarat di server Anda sesudahnya tampak seperti tanda terima, dan kebanyakan tim memperlakukannya begitu. Padahal lebih dari itu. Setiap refund membawa kode alasan refund, dan itulah satu-satunya bagian dari refund yang masih bisa Anda baca setelah keputusan dibuat. Google Play memberi tahu Anda bahwa refund itu adalah chargeback, atau permintaan remorse, atau pembelian yang tidak pernah diakui aplikasi Anda sendiri. Apple memberi tahu apakah refund itu menyalahkan sesuatu di dalam aplikasi Anda. Baca kode itu dan sebuah refund berhenti menjadi baris dalam laporan lalu menjadi instruksi: perbaiki ini, lawan ini, atau lepaskan yang satu ini. Berikut arti setiap kode, cara memilahnya, dan berapa biaya masing-masing.
Apa sebenarnya kode alasan refund itu
Kode alasan refund adalah label toko sendiri untuk alasan sebuah pembelian dibatalkan. Anda tidak menetapkannya dan tidak bisa membantahnya. Kode itu datang menempel pada refund setelah kejadian, dan kedua toko menampilkannya dalam bentuk berbeda dan dengan resolusi yang sangat berbeda.
Google Play mencantumkan alasan dan sumber pada setiap void
Voided Purchases API milik Google Play mengembalikan satu catatan per pembelian yang dibatalkan, dan setiap catatan membawa dua bilangan bulat yang penting. voidedReason menyatakan mengapa pembelian dibatalkan. voidedSource menyatakan siapa yang memulainya. Bersama-sama keduanya mengubah refund telanjang menjadi sebuah kalimat: pesanan ini dibatalkan karena chargeback, dimulai oleh Google, atau dibatalkan sebagai remorse, dimulai oleh pengguna. Anda membacanya dengan melakukan polling ke API atau dengan berlangganan notifikasi developer real-time yang memicu saat sebuah void mendarat. Bagaimanapun caranya, dua angka itulah payload yang layak disimpan.
Apple memberi sinyal yang lebih sempit, tapi tajam
Apple tidak memberi Anda alasan sembilan arah. Pada transaksi yang di-refund, Apple menetapkan revocationReason ke salah satu dari dua nilai. Nilai 1 berarti App Store me-refund transaksi karena masalah nyata atau yang dianggap ada di dalam aplikasi Anda. Nilai 0 berarti refund terjadi karena alasan lain, misalnya pembelian tidak sengaja. Field ini hanya muncul pada transaksi yang di-refund atau dicabut, bersama revocationDate, di dalam signed transaction info dari REFUND App Store Server Notification. Dua nilai memang tidak banyak, tapi yang penting, yaitu 1, adalah Apple memberi tahu Anda bahwa refund itu tentang produk Anda, bukan keraguan pelanggan.
Sembilan alasan yang diberikan Google Play
voidedReason milik Google adalah yang lebih kaya dari keduanya, dan setiap nilai layak dikenali begitu terlihat karena masing-masing menunjuk ke tempat berbeda. Berikut set lengkapnya, langsung dari resource VoidedPurchase, dengan apa yang sebenarnya diperintahkan setiap kode kepada Anda.
| voidedReason | Label Google | Apa yang diperintahkan kode ini |
|---|---|---|
| 0 | Lainnya | Tidak ada alasan spesifik yang tercatat. Kelompokkan dan pantau volumenya, bukan kasus tunggalnya. |
| 1 | Remorse (berubah pikiran) | Pelanggan berubah pikiran. Tidak ada yang salah dengan aplikasi Anda. |
| 2 | Tidak diterima | Pelanggan mengatakan tidak pernah menerima yang mereka bayar. Masalah pengiriman yang perlu diperiksa. |
| 3 | Defektif | Pembelian tidak berfungsi. Bug produk, dan kode paling bisa ditindaklanjuti dalam daftar ini. |
| 4 | Pembelian tidak sengaja | Salah klik atau pembelian tak diinginkan. Pertimbangkan langkah konfirmasi yang lebih jelas. |
| 5 | Penipuan | Google menandai transaksi sebagai penipuan. Bukan pelanggan Anda, dan bukan pendapatan yang berhak Anda simpan. |
| 6 | Friendly fraud | Pembeli menyengketakan tagihan yang mereka buat dan terima. Bukti masih bisa menyentuh yang satu ini. |
| 7 | Chargeback | Bank membalikkan tagihan. Jalur paling mahal, kini dengan biaya tambahan. |
| 8 | Pembelian tidak diakui | Aplikasi Anda tidak pernah mengakui pembelian, jadi Google otomatis me-refund. Bug dalam kode Anda. |
voidedSource memberi tahu siapa yang menarik pelatuk
Di samping alasan ada voidedSource, dan itu menjawab pertanyaan berbeda: siapa yang membalikkan ini. Nilai 0 berarti pengguna yang melakukannya, lewat swalayan atau bank. Nilai 1 berarti developer yang melakukannya, yaitu Anda atau perkakas Anda sendiri yang menerbitkan refund. Nilai 2 berarti Google yang melakukannya, atas penilaiannya sendiri, termasuk auto-refund untuk pembelian tidak diakui. Ketika Anda melihat lonjakan void, sumber adalah pemilahan pertama. Dinding penuh source 2 adalah Google bertindak atas akun Anda, dan itu biasanya sinyal yang menunjuk kembali ke integrasi Anda, bukan ke pelanggan Anda.
Pilah setiap refund menjadi perbaiki, lawan, atau terima
Alasan sebuah kode berguna adalah karena ia memberi tahu Anda mana dari tiga respons yang pantas untuk sebuah refund. Kebanyakan tim memperlakukan semua refund sama dan membuang tenaga pada yang tidak pernah bisa mereka menangkan. Kode-kode itu terbagi dengan rapi.
Perbaiki: refund yang disebabkan produk Anda
Beberapa kode adalah laporan bug berbaju refund. Defektif (3) dan tidak diterima (2) di Google, dan revocationReason bernilai 1 di Apple, semuanya mengatakan hal yang sama: pelanggan membayar dan aplikasi Anda tidak mengantarkan. Pembelian tidak diakui (8) adalah yang paling tajam di antaranya karena kesalahan sepenuhnya ada di kode penagihan Anda. Ini adalah refund paling murah untuk dihilangkan, karena Anda menghilangkannya dengan memperbaiki sesuatu yang Anda miliki, bukan dengan meyakinkan siapa pun. Jumlah yang naik di tumpukan ini adalah cacat produk dengan angka dolar yang menempel.
Lawan: refund yang sedang digarap seseorang
Penipuan (5), friendly fraud (6), dan chargeback (7) adalah sengketanya. Penipuan murni (5) bukan pelanggan Anda dan bukan pendapatan yang pernah akan Anda simpan. Friendly fraud (6), di mana pembeli mendapat persis apa yang mereka bayar lalu menyengketakannya, adalah satu-satunya sengketa yang masih bisa digerakkan oleh bukti Anda, dan chargeback (7) adalah tempat bukti itu diajukan. Ketika salah satunya mendarat, Anda cabut akses jika belum, dan bila ada jendela peninjauan yang terbuka Anda jawab dengan apa yang Anda ketahui tentang akun itu.
Terima: refund yang memang tidak pernah bisa Anda hentikan
Remorse (1) dan pembelian tidak sengaja (4) adalah perubahan pikiran pelanggan sendiri. revocationReason bernilai 0 dari Apple juga ada di sini. Tidak ada fitur yang gagal dan tidak ada penipuan yang terjadi. Anda bisa melunakkan tumpukan tidak sengaja dengan konfirmasi pembelian yang lebih jelas, tapi Anda tidak bisa membantah refund remorse, dan waktu yang dihabiskan untuk mencoba adalah waktu yang diambil dari tumpukan perbaiki tempat uang sebenarnya berada.
| Kelompok | Kode Google | Sinyal Apple | Langkah Anda |
|---|---|---|---|
| Perbaiki | 2 tidak diterima, 3 defektif, 8 tidak diakui | revocationReason 1 | Cari akar penyebab bug produk atau penagihan di baliknya |
| Lawan | 5 penipuan, 6 friendly fraud, 7 chargeback | (muncul lewat REFUND, bukan lewat alasan) | Cabut akses, jawab jendela peninjauan dengan bukti |
| Terima | 1 remorse, 4 pembelian tidak sengaja | revocationReason 0 | Catat, sesuaikan alur pembelian, lanjutkan |

Jebakan 30 hari yang membuat kode alasan mudah hilang
Ada batas keras di sisi Google yang mengubah ini dari fitur pelaporan menjadi tenggat. Jika Anda tidak menangkap kode secara terus-menerus, Anda kehilangannya.
Voided Purchases API hanya menengok 30 hari ke belakang
Google jelas menyatakan bahwa API hanya bisa menampilkan pembelian yang dibatalkan dari 30 hari terakhir. Void yang lebih lama tidak dikembalikan apa pun startTime yang Anda kirim, dan nilai startTime itu sendiri tidak bisa disetel lebih awal dari 30 hari lalu. Lebih buruk lagi bagi integrasi yang naif, jendela 30 hari diukur dari kapan sistem Google melihat sebuah pembelian sebagai dibatalkan, bukan dari kapan pembelian dilakukan atau bahkan dari voidedTimeMillis dalam catatan. Jadi kode alasan refund yang tidak Anda tarik dalam jendela itu hilang, dan pekerjaan ekspor bulanan dengan celah apa pun akan diam-diam membuang void yang terlambat ditangkap.
Berapa nilai kode alasan dalam uang
Dua kode membawa harga spesifik, dan membacanya adalah cara Anda menaruh angka pada masalah yang jika tidak akan tersembunyi di dalam tingkat refund agregat.
Satu kode adalah tagihan yang Anda tulis sendiri
voidedReason 8, unacknowledged purchase, adalah contoh paling bersih dari refund yang Anda sebabkan. Google Play mewajibkan aplikasi Anda mengakui pembelian dalam tiga hari sejak memberikan entitlement, dan jika tidak, Google otomatis me-refund pesanan dan mencabut item. Setiap void bercap 8 adalah penjualan nyata, dari pelanggan yang menginginkan produk, dikembalikan karena panggilan untuk mengakui pembelian tidak pernah dipicu. Jumlah yang hilang adalah harga jual penuh ditambah komputasi, panggilan API, dan penyimpanan yang sudah Anda keluarkan untuk mengantarkannya. Ini bukan refund yang Anda negosiasikan. Ini bug yang Anda tutup, dan kode adalah cara Anda menemukannya.
Kode chargeback kini membawa biaya
voidedReason 7, chargeback, berubah biayanya pada 3 Agustus 2026. Untuk pesanan Google Play yang dibuat pada atau setelah tanggal itu, chargeback yang kalah membuat developer menanggung harga pembelian dikurangi biaya layanan Play, ditambah biaya chargeback bank, sementara Google hanya menutup biaya layanannya sendiri. Karena biaya chargeback bersifat tetap sementara harga produk tidak, pada pembelian dalam aplikasi yang murah biaya itu saja bisa melebihi apa yang dibayar pelanggan. Menghitung void kode 7 Anda kini berarti menghitung item biaya, bukan sekadar penjualan yang hilang, yang persis mengapa tumpukan chargeback layak mendapat barisnya sendiri di laporan refund mana pun yang Anda bangun.
| Kode alasan | Apa yang menimbulkan biaya bagi Anda | Mengapa kode itu penting |
|---|---|---|
| 8 Pembelian tidak diakui | Harga jual penuh ditambah biaya pengiriman, atas penjualan yang diinginkan pelanggan | Bersifat merugikan diri sendiri, jadi kode ini adalah pelacak bug |
| 7 Chargeback (pesanan pada atau setelah 3 Agustus 2026) | Harga jual dikurangi biaya layanan Play, ditambah biaya chargeback bank | Satu-satunya kode yang menambah biaya di atas penjualan yang hilang |
| 3 Defektif | Harga jual ditambah biaya pengiriman, berulang untuk setiap pelanggan yang terkena bug | Volume pada kode ini mengukur cacat produk dalam dolar |
| 1 Remorse | Harga jual, dan biaya pengiriman yang sudah Anda keluarkan | Biaya nyata, tapi bukan yang bisa dipulihkan oleh perubahan kode |
Bagaimana Apple dan Google berbaris
Kedua toko menjawab pertanyaan yang sama pada resolusi berbeda, jadi laporan refund lintas-toko harus menormalkannya, bukan mengharapkan keduanya cocok.
| Pertanyaan | App Store | Google Play |
|---|---|---|
| Di mana kode berada | revocationReason di dalam signed transaction dari notifikasi REFUND | voidedReason di Voided Purchases API dan notifikasinya |
| Berapa banyak alasan | Dua: 1 masalah di aplikasi Anda, 0 lainnya | Sembilan, dari 0 lainnya sampai 8 pembelian tidak diakui |
| Siapa yang melakukannya | Tidak dirinci | voidedSource: 0 pengguna, 1 developer, 2 Google |
| Seberapa jauh ke belakang bisa dibaca | Tersedia pada transaksi kapan pun Anda mengueri | Hanya 30 hari void terakhir |
| Sinyal paling tajam | Nilai 1 berarti refund tentang produk Anda | Kode 3, 8, dan 7 masing-masing menunjuk biaya berbeda yang bisa diperbaiki |
Kedua toko tidak akan pernah memberi Anda kode yang sama untuk refund yang sama, dan itu tidak masalah. Yang penting adalah keduanya memberi Anda alasan yang bisa dibaca mesin, dan keduanya menghargai tim yang membacanya. Satu bit dari Apple memberi tahu Anda kapan sebuah refund adalah kesalahan produk Anda. Sembilan alasan Google dan flag sumbernya memberi tahu Anda bug produk yang mana, sengketa yang mana, dan celah penagihan yang merugikan diri sendiri yang mana yang sedang Anda hadapi. Tidak ada kode yang menghentikan refund. Keduanya memberi tahu apa yang harus dilakukan agar yang berikutnya tidak terjadi.
RefundHalt menangkap kode alasan pada setiap refund begitu tiba, di kedua toko, dan menyimpannya dengan aman di dalam jendela 30 hari Google sehingga tidak ada yang lolos. Ia memilah setiap void menjadi perbaiki, lawan, atau terima, sehingga lonjakan kode 3 defektif sampai kepada Anda sebagai peringatan produk dan lonjakan kode 8 tidak diakui sampai kepada Anda sebagai bug integrasi, bukan sebagai penurunan pendapatan yang samar. Ia menjawab CONSUMPTION_REQUEST dari Apple dalam 12 jam dan peninjauan chargeback Google Play dalam 24, dan mencabut akses begitu refund atau chargeback mendarat. Anda tidak bisa mengubah kode yang dicap toko pada sebuah refund. Anda bisa memastikan Anda membaca setiap kode, dan menindaklanjuti yang benar-benar milik Anda untuk diperbaiki.
Pertanyaan yang sering diajukan
- Apa itu kode alasan refund di App Store dan Google Play?
- Itu adalah label toko sendiri untuk alasan sebuah pembelian dibalik, dikirim ke server Anda bersama refund. Voided Purchases API milik Google Play mengembalikan voidedReason dari 0 sampai 8 dan voidedSource 0 pengguna, 1 developer, atau 2 Google. Apple menetapkan revocationReason ke 1 ketika refund terjadi karena masalah di dalam aplikasi Anda atau 0 untuk alasan lain seperti pembelian tidak sengaja. Anda tidak menetapkan kode dan tidak bisa mengubahnya, tapi membacanya memberi tahu apakah refund menunjuk ke produk Anda, sebuah sengketa, atau perubahan pikiran pelanggan.
- Apa saja nilai voidedReason Google Play?
- Ada sembilan: 0 lainnya, 1 remorse, 2 tidak diterima, 3 defektif, 4 pembelian tidak sengaja, 5 penipuan, 6 friendly fraud, 7 chargeback, dan 8 pembelian tidak diakui. Masing-masing dikembalikan per pembelian yang dibatalkan oleh Voided Purchases API bersama voidedSource yang menyatakan siapa yang memulai void. Kode 2, 3, dan 8 menunjuk masalah di aplikasi Anda sendiri, kode 5, 6, dan 7 adalah sengketa, dan kode 1 dan 4 adalah keputusan pelanggan sendiri.
- Apa arti revocationReason 1 dari Apple?
- Artinya App Store me-refund transaksi karena masalah nyata atau yang dianggap ada di dalam aplikasi Anda, berlawanan dengan nilai 0 yang berarti refund terjadi karena alasan lain seperti pembelian tidak sengaja. Field ini hanya muncul pada transaksi yang di-refund atau dicabut, bersama revocationDate, di dalam signed transaction info dari REFUND App Store Server Notification. Nilai 1 adalah Apple memberi tahu Anda bahwa refund itu tentang produk Anda.
- Mengapa Google me-refund pembelian dengan kode alasan tidak diakui?
- Karena aplikasi Anda tidak mengakui pembelian tepat waktu. Google Play mewajibkan Anda mengakui pembelian dalam tiga hari sejak memberikan entitlement, dan jika tidak, Google otomatis me-refund pesanan dan mencabut item, mencap void dengan voidedReason 8. Ini refund yang Anda sebabkan dengan bug penagihan, bukan permintaan pelanggan, jadi perbaikannya ada di kode pemrosesan pembelian Anda, bukan di negosiasi apa pun.
- Seberapa jauh ke belakang saya bisa membaca kode alasan refund?
- Di Google Play, hanya 30 hari. Voided Purchases API mengembalikan void dari 30 hari terakhir dan mengabaikan startTime yang lebih lama dari itu, dan ia mengukur jendela berdasarkan kapan Google melihat void, bukan kapan pembelian dilakukan. Kode yang tidak Anda tangkap dalam 30 hari akan hilang, jadi Anda sebaiknya berlangganan notifikasi void-purchase real-time atau melakukan polling terjadwal dengan aman di dalam jendela. revocationReason Apple tetap ada pada transaksi kapan pun Anda mengueri.
Sumber dan bacaan lanjutan
- Google Play Developer API: REST Resource purchases.voidedpurchases (voidedReason and voidedSource values)
- Google Play Developer API: Method purchases.voidedpurchases.list (30-day lookback window)
- Google Play: Voided Purchases API overview
- Apple Developer: revocationReason (App Store Server Notifications)
- Apple Developer: Transaction.RevocationReason (StoreKit)
- Apple Developer: Handling refund notifications (revocationDate and revocationReason on REFUND)
- Google Play Console Help: Updates to refund protection and chargeback cost responsibility (August 3, 2026)
- Google Play Billing: Integrate the Google Play Billing Library (acknowledge within three days or auto-refund)
RefundHalt
Autopilot refund untuk App Store dan Google Play
Baca selanjutnya
Pembelian dalam aplikasi tanpa izin yang dilakukan anak-anak hampir selalu dikembalikan ke orang tua, dan Anda yang menanggung biayanya
Ketika seorang anak membeli paket koin di ponsel orang tuanya, baik Apple maupun Google mengembalikan uangnya dan tidak satu pun dari mereka bertanya kepada Anda lebih dulu. Regulator yang merancangnya seperti itu. Berikut cara kerja pengembalian dana pembelian dalam aplikasi tanpa izin ini di setiap toko, jendela 15 menit tempat uang itu berpindah, dan berapa biaya sebenarnya bagi Anda.
Anda tidak pernah memiliki pajak refund aplikasi, jadi sebuah refund menghabiskan bagian Anda, bukan total pada struk
Refund sebuah pembelian dalam aplikasi dan struk menampilkan harga plus pajak yang dikembalikan. Pajak itu tidak pernah menjadi uang Anda. Apple dan Google memungut dan menyetorkannya sebagai merchant of record, lalu membalikkannya saat refund tanpa menyentuh bagian Anda. Inilah biaya sebenarnya dari sebuah refund, dan satu penyiapan di mana pajak itu menjadi milik Anda.