Bir Google Play satın alması iade edildiğinde veya ters ibraz edildiğinde, bunu Voided Purchases API ile öğrenirsiniz
Google Play, bir satın alma iade edildiğinde veya ters ibraz edildiğinde onu sessizce geçersiz kılar. Voided Purchases API bu siparişlerin listesidir, böylece erişimi geri alabilirsiniz. İşte her alan, 30 günlük pencere, siparişleri gizleyen geri alma seçeneği ve maliyeti.

Önemli noktalar
- Voided Purchases API, yani purchases.voidedpurchases.list yöntemi, Google Play'in iptal ettiği, iade ettiği veya ters ibraz ettiği siparişleri döndürür, böylece müşterinin artık sahip olmadığı şeye erişimi kesen bir geri alma sistemi kurabilirsiniz.
- Yalnızca geri alınan siparişler görünür. Geri alma seçeneği olmadan verilen bir geliştirici iadesi bu API'de görünmez, bu yüzden erişimi çekmek istiyorsanız geri alma açıkken iade etmeniz gerekir.
- Pencere 30 gündür. startTime 30 günden daha eskiye ayarlanamaz, bu yüzden bir aydan uzun süre çalışmayan bir sunucu o geçersiz kılınan siparişleri kalıcı olarak kaybeder. Bir programa göre sorgulayın.
- voidedSource siparişi kimin geçersiz kıldığını söyler: 0 kullanıcı, 1 geliştirici, 2 Google'dır. voidedReason nedenini söyler, 0 Other'dan 7 Chargeback ve 8 Unacknowledged_purchase'a kadar.
- Real-time developer notifications, bir satın alma geçersiz kılındığı anda bir VoidedPurchaseNotification gönderir, ancak bunu bir sinyal olarak ele alın. Geri almadan önce yetkili liste için Voided Purchases API'yi çağırın.
- Abonelik yenilemelerini purchaseToken ile değil orderId ile tanımlayın. Tek bir purchaseToken bir aboneliğin her yenilemesini kapsar, bu yüzden token tek başına iki yenilemeyi ayırt edemez.
- Kotalar günde 6,000 sorgu ve herhangi bir 30 saniyelik pencerede 30 sorgudur, bu yüzden sonuçları devam belirteciyle sayfalayın ve zaman penceresine göre sorgulayın, asla sipariş başına bir çağrı yapmayın.
Google Play'de bir iade kapınızı çalmaz. Para hareket eder, müşteri uygulamayı açık tutar ve siz arayıp bakmadığınız sürece sizin tarafınızda hiçbir şey değişmez. Voided Purchases API, arayıp baktığınız yerdir. Size iptal edilen, iade edilen veya ters ibraz edilen siparişlerin bir listesini verir, böylece müşterinin artık ödemediği şeye erişimi geri alabilirsiniz. Zamanlanmış bir işi ona yöneltin, listeyi okuyun, yetkiyi kesin. Döngünün tamamı budur.
Çoğu ekibi yolundan çıkaran bir tuzak var ve o kodun içinde değil. Burada yalnızca geri alınan siparişler görünür. Play Console'da geri alma seçeneğini işaretlemeden bir satın almayı iade ederseniz, o sipariş bu API'ye asla ulaşmaz ve iade edilen bir müşteri sattığınız her şeyi elinde tutarken işiniz sorunsuz çalışır. Bu yazı API'yi alan alan, onu sınırlayan sayıları ve bunu atladığınızda paranın nereden sızdığını adım adım ele alır.
Voided Purchases API aslında neyi döndürür
API tek bir soruyu yanıtlar: bu uygulamanın hangi siparişleri son zamanlarda geçersiz kılındı. Geçersiz kılma (void), hepsi müşterinin parasını geri almasıyla biten üç sonucu kapsar. Bir iptal, bir iade veya bir ters ibraz. Tek seferlik uygulama içi ürünlere ve aboneliklere uygulanır ve kapsamı tek bir parametreyle seçersiniz. type'ı 0 yapın, yalnızca geçersiz kılınan uygulama içi ürün satın almalarını alırsınız, ki bu varsayılandır. 1 yapın, geçersiz kılınan uygulama içi satın almaları ve geçersiz kılınan abonelik satın almalarını birlikte alırsınız.
Listedeki her giriş bir voided purchase nesnesidir. Alanlar azdır ve her biri önemlidir.
Bir voided purchase üzerindeki alanlar
| Alan | Neyi barındırır |
|---|---|
| orderId | Tek seferlik bir satın almayı, bir abonelik satın almasını veya tek bir abonelik yenilemesini benzersiz şekilde tanımlayan sipariş kimliği. Bu sizin birleştirme anahtarınızdır |
| purchaseToken | Tek seferlik bir satın almayı veya bir aboneliği tanımlayan belirteç. Yenilemeleri ayırt etmez, bu yüzden onlar için orderId kullanın |
| purchaseTimeMillis | Satın almanın yapıldığı zaman, epoch'tan bu yana milisaniye cinsinden |
| voidedTimeMillis | Satın almanın iptal edildiği, iade edildiği veya ters ibraz edildiği zaman, epoch'tan bu yana milisaniye cinsinden |
| voidedSource | Geçersiz kılmayı kim başlattı: 0 kullanıcı, 1 geliştirici, 2 Google |
| voidedReason | Satın almanın neden geçersiz kılındığı, 0'dan 8'e kadar bir tam sayı |
| voidedQuantity | Miktar tabanlı kısmi bir iadeden gelen geçersiz kılınan miktar, yalnızca includeQuantityBasedPartialRefund true olduğunda döndürülür |
Harekete geçmeden önce voidedReason'ı okuyun
voidedReason, ham bir listeyi bir karara dönüştüren alandır. Bir alıcı pişmanlığı iadesi ve bir banka ters ibrazı ikisi de aynı listeye düşer, ama aynı olay değildirler ve ağustos fiyatlandırması bunlardan birini pahalı hale getirir. İşte tam liste.
| voidedReason | Etiket | Sizin için ne anlama gelir |
|---|---|---|
| 0 | Other | Hiçbir kategori atanmadı. Geri alın ve devam edin |
| 1 | Remorse | Alıcı fikrini değiştirdi. Sıradan bir iade |
| 2 | Not_received | Müşteri ürünü hiç almadığını söylüyor. Teslimatınızı kontrol etmeye değer |
| 3 | Defective | Ürün çalışmadı. Bir kalite sinyali, kaydedin |
| 4 | Accidental_purchase | İstenmeyen bir satın alma, genellikle paylaşılan bir cihaz |
| 5 | Fraud | Google işlemi sahtekârlık olarak işaretledi |
| 6 | Friendly_fraud | Meşru kart sahibinin kendi yaptığı bir ücrete itiraz ettiği bir ters ibraz |
| 7 | Chargeback | Müşterinin bankası ödemeyi geri çevirdi. Bankada kesindir ve artık size fatura edilir |
| 8 | Unacknowledged_purchase | Google, uygulamanızın hiç onaylamadığı bir satın almayı otomatik iade etti |
30 günlük pencere, listenizi boşaltan tuzaktır
Voided Purchases API yalnızca son 30 gündeki geçersiz kılınan satın almaları gösterebilir. startTime parametresi varsayılan olarak şu anki zaman eksi 30 gündür ve bundan daha eskiye ayarlanamaz. endTime varsayılan olarak şimdidir. Yani uç nokta bir arşiv değil, bir aylık kayan bir penceredir.
Sonuç serttir. Sorgulama işiniz bozulur ve beş hafta boyunca kimse fark etmezse, birinci haftanın geçersiz kılmaları API'den zaman aşımına uğramış olur. Onları geri getiren hiçbir çağrı yoktur. O siparişleri geri almazsınız ve başka bir şekilde yakalamadıysanız var olduklarını bile bilmezsiniz. API, en kötü kesintinizin boyutunda bir deliği olan bir güvenlik ağıdır.
Geri alma seçeneği, bir siparişin görünüp görünmeyeceğine karar verir
Bu, bir ekibin API'yi bozuk olarak bildirmesinin en yaygın nedenidir. Yalnızca geri alınan siparişler döndürülür. Kullanıcı kaynaklı iadeler, iptaller, ters ibrazlar ve Google kaynaklı iadeler her zaman geri alınır, bu yüzden her zaman görünürler. Geliştirici kaynaklı bir iade farklıdır. Bir siparişi Play Console veya Orders API aracılığıyla kendiniz iade ettiğinizde, onu ayrıca geri alıp almayacağınızı seçersiniz. Geri almadan iade edin, sipariş müşteriyle çözülür ama Voided Purchases API'de asla ortaya çıkmaz.
Bundan çıkan kural basittir. Amacınız erişimi çekmekse, geri alma seçeneği açıkken iade edin. Aksi takdirde parayı geri vermiş ve kapıyı açık bırakmışsınızdır ve ne kadar iyi yazılmış olursa olsun geri alma işinizin üzerinde hareket edeceği hiçbir şey yoktur.
Kotayı tetiklemeden nasıl sorgulanır
Uç nokta hız sınırlıdır ve sınırlar, naif bir döngünün onlara takılacağı kadar düşüktür. Günde 6,000 sorgu (Pasifik Saati'ne göre sayılır) ve herhangi bir 30 saniyelik dönemde en fazla 30 sorgu alırsınız. Bu bütçe pencereli sorgulama için uygundur ve sipariş başına bir istek tasarımlarına düşmandır.
Sorgu pencereleri ve devam belirteci
maxResults varsayılan olarak 1,000'dir, ki bu aynı zamanda üst sınırdır. Bir pencere bir sayfadan fazla geçersiz kılma barındırdığında, yanıt bir nextPageToken içeren bir tokenPagination nesnesi taşır. Sayfalarda gezinmek için o belirteci sonraki çağrıya geri geçirin. İlgilendiğiniz pencereyi sınırlamak için startTime ve endTime ayarlayın, belirteç tükenene kadar sayfalayın, sonra pencereyi ilerletin. Bu desen sizi hem 30 saniyelik patlama sınırı hem de günlük tavan içinde tutar.
Real-time developer notifications boşluğu kapatır
Her gün sorgulamak yine de bir güne kadar körlük bırakır ve 30 günlük pencere uzun boşlukları cezalandırır. Real-time developer notifications gecikmeyi ortadan kaldırır. Google, bir satın alma geçersiz kılındığı anda sahibi olduğunuz bir Cloud Pub/Sub konusuna bir VoidedPurchaseNotification yayınlar ve arka ucunuz onu saniyeler içinde tüketir. Mesaj küçüktür.
| RTDN alanı | Neyi barındırır |
|---|---|
| purchaseToken | Orijinal satın almadan gelen belirteç |
| orderId | Geçersiz kılınan işlemin sipariş kimliği, abonelik yenilemesi başına yeni bir tane |
| productType | Abonelik için 1, tek seferlik satın alma için 2 |
| refundType | Tam iade için 1, miktar tabanlı kısmi iade için 2 |

Bunun size para açısından maliyeti
API bir tesisattır, ama onu bağlamanın nedeni bir faturadır. O listedeki her geçersiz kılma gerçek bir sayıya karşılık gelir ve bunlardan ikisi daha pahalı hale geliyor.
Ters ibraz faturası 3 Ağustos 2026'dan itibaren size geliyor
3 Ağustos 2026'dan itibaren Google, bir ters ibrazın maliyetini geliştiriciye kaydırıyor. Satın alma fiyatını kaybedersiniz ve üstüne bankanın ters ibraz ücretini ödersiniz. 7 olan bir voidedReason artık sadece kaybedilmiş bir satış değil, ekli bir ücreti olan bir gider kalemidir. Bir ters ibrazı geri alamazsınız, o bankada kesindir, ama sonrasındaki kanamayı durdurabilirsiniz. Geçersiz kılmayı hızlı yakalamak, yetkiyi geri almanıza ve hâlâ sunduğunuz her şey için, iade edilen ve sonra geri çevrilen bir müşteriye harcama yapmayı durdurmanıza olanak tanır.
İade edilen bir müşteriye hizmet vermek için ödemeye devam edersiniz
Bir geçersiz kılma ortaya çıktığı anda satın alma fiyatı gitmiştir. Hâlâ kontrol ettiğiniz şey, sunmaya devam etmenin maliyetidir. İade edilen bir yetki canlı kaldığı her saat, müşterinin artık finanse etmediği şeyler için ödemeye devam edersiniz: işlem gücü, model API çağrıları, depolama ve onların kullanımına bağlı herhangi bir içerik üreticisi veya ortak ödemesi. Bu API tarafından yönetilen bir geri alma sistemi, o sayacı kapatmanın yoludur. Onu atlayın, mağazanın zaten tazmin ettiği kişiler için ürünü finanse etmiş olursunuz.
friendly fraud, eğilimini takip etmeye değer bir örüntüdür
5 veya 6 olan bir voidedReason tek seferlik değildir. Fraud ve friendly fraud hesaba göre, cihaza göre ve bazen kampanyaya göre kümelenir. API size her geçersiz kılmada voidedSource ve voidedReason'ı verir, bu da her geri çevrilmeyi izole bir maliyet olarak ele almak yerine kötüye kullanımın eğilimini hesaba göre takip etmeye yeter. İki kez ters ibraz yapan bir müşteri, ilk iadenin söylemediği bir şeyi size söylüyor.
RefundHalt tarzında bağlama
Tüm parçaları elinizde tuttuğunuzda model küçüktür. Hiçbir şey tam bir gün beklemesin diye VoidedPurchaseNotification'ı gerçek zamanlı olarak dinleyin. Abonelik yenilemeleri asla karışmasın diye orderId üzerinde anahtarlayarak doğruluk kaynağı olarak Voided Purchases API'yi çağırın. Bir ters ibraz bir pişmanlık iadesinden farklı ele alınsın diye voidedSource ve voidedReason'ı okuyun. 30 günlük pencere asla ısırmayacak kadar sıkı bir programla sorgulayın ve amacınız erişimi kesmek olduğunda her zaman geri alma seçeneği açıkken iade edin.
Bu, RefundHalt'in sizin için çalıştırdığı kısımdır. Gerçek zamanlı bildirimleri tüketir, her geçersiz kılmayı API ile mutabık kılar, tüm ürün yerine tam siparişi geri alır ve pahalı olanlar gömülmek yerine işaretlensin diye bir banka ters ibrazını sıradan bir iadeden ayırır. Kendiniz bir Pub/Sub hattı ve bir sorgulama işi kurmadan, saniyeler içinde erişim geri alınır ve kimin neyi neden geçersiz kıldığının bir kaydını elde edersiniz.
Sık sorulan sorular
- İade ettiğim siparişler neden Voided Purchases API'de görünmüyor?
- Çünkü yalnızca geri alınan siparişler döndürülür. Kullanıcı iadeleri, iptaller, ters ibrazlar ve Google kaynaklı iadeler her zaman geri alınır ve her zaman görünür. Geliştirici kaynaklı bir iade yalnızca geri alma seçeneğini de seçtiyseniz görünür. Bir siparişi geri almadan iade ettiyseniz, sipariş çözülmüştür ama bu API'ye görünmezdir, bu yüzden erişimi çekmeyi amaçladığınızda her zaman geri alma açıkken iade edin.
- Voided Purchases API ne kadar geriye gider?
- Otuz gün. startTime parametresi varsayılan olarak şu anki zaman eksi 30 gündür ve bundan daha eskiye ayarlanamaz, bu yüzden uç nokta bir arşiv değil, bir aylık kayan bir penceredir. 30 günü aşarak zaman aşımına uğrayan geçersiz kılınan bir sipariş API'den gitmiştir ve onu geri almanın hiçbir yolu yoktur, bu yüzden bir programa göre sorgular ve bunu gerçek zamanlı bildirimlerle desteklersiniz.
- Erişimi geri almak için Real-time developer notifications mı yoksa Voided Purchases API mi kullanmalıyım?
- İkisini de kullanın. VoidedPurchaseNotification saniyeler içinde gelir ve size bakmanızı söyler, ama Google'ın kendi rehberliği onu bir doğruluk kaynağı olarak değil bir sinyal olarak ele almaktır. Mevcut durumu doğrulamak için Voided Purchases API'yi çağırın, sonra geri alın. Bildirim gecikmeyi ortadan kaldırır ve API size üzerinde hareket edilecek yetkili voidedSource ve voidedReason'ı verir.
- API'de bir ters ibrazı sıradan bir iadeden nasıl ayırt ederim?
- voidedReason alanını okuyun. 7 değeri bir ters ibrazdır, yani müşterinin bankası ödemeyi geri çevirmiştir ve 6 friendly fraud'dur. 1 değeri bir pişmanlık iadesidir. Bu önemlidir çünkü 3 Ağustos 2026'dan itibaren Google ters ibraz satın alma fiyatını ve banka ücretini geliştiriciye geçirir, bu yüzden 7 olan bir voidedReason size sıradan bir iadeden daha pahalıya mal olur.
- Voided Purchases API abonelikleri kapsar mı?
- Evet. Hem geçersiz kılınan uygulama içi satın almaları hem de geçersiz kılınan abonelik satın almalarını almak için type parametresini 1 yapın. Varsayılan olan type 0 yalnızca uygulama içi ürün satın almalarını döndürür. Abonelikler için, tam geçersiz kılınan dönemi orderId ile tanımlayın, çünkü tek bir purchaseToken her yenilemeyi kapsar ve her yenileme işlemi için yeni bir orderId üretilir.
Kaynaklar ve ek okumalar
- Google Play Developer API: Voided Purchases API guide
- Google Play Developer API: purchases.voidedpurchases.list method
- Google Play Developer API: purchases.voidedpurchases resource (voidedSource and voidedReason)
- Android Developers: Real-time developer notifications reference (VoidedPurchaseNotification)
- Android Developers: Fight fraud and abuse with Play Billing
RefundHalt
App Store ve Google Play için geri ödeme otomatik pilotu
Okumaya devam edin
Üç App Store iade bildirimi Apple karar verdikten sonra gelir ve REFUND_REVERSED satışı size geri verir
Apple, App Store Server Notifications V2 üzerinden dört iade mesajı gönderir ve çoğu uygulama yalnızca ikisini işler. REFUND iptal etmenizi söyler, REFUND_DECLINED satışı korumak anlamına gelir ve REFUND_REVERSED satışı geri verir ve aldığınız şeyi geri yüklemenizi ister. İşte her birinin gerektirdiği şey.
Artık her Apple iade talebi bir gerekçeyle geliyor ve onu okumanın yolu consumptionRequestReason
WWDC24'ten bu yana her Apple CONSUMPTION_REQUEST bir consumptionRequestReason taşıyor, yani müşterinin iade istemek için kendi belirttiği gerekçe. UNINTENDED_PURCHASE'tan LEGAL'a kadar beş değer var ve her biri 12 saatlik pencerenizde geri gönderdiğiniz yanıtı değiştirmeli. İşte her birini nasıl okuyacağınız.