Tüm makaleler
Deep dive7 dk okuma

Geçersiz kılınmış satın alma bildirimi, bir iade geldiği anda Google Play sunucunuzun erişimi iptal etmesini sağlar

Google Play, bir satın alma iade edildiği, ters ibraza uğradığı ya da geçersiz kılındığı anda sunucunuza bir geçersiz kılınmış satın alma bildirimi gönderebilir. purchaseToken, orderId, productType ve refundType taşır ve tek bir şey ifade eder, erişimi iptal et. İşte onu okuma ve bağlama yöntemi.

Alacakaranlıkta bir geliştirici çalışma alanı; tersine çevrilmiş bir ödemeyi gösteren bir telefon, bir sunucuya ulaşan bir Google Play geçersiz kılınmış satın alma bildirimini betimliyor

Önemli noktalar

  • Geçersiz kılınmış satın alma bildirimi, bir satın alma iade edildiği, ters ibraza uğradığı ya da başka bir şekilde geçersiz kılındığı anda Google Play'in Cloud Pub/Sub konunuza gönderdiği bir Real-time Developer Notification'dır. Bu bir push sinyalidir, sizin sorgulamanız gereken bir şey değil.
  • Bildirim tam olarak dört alan taşır: `purchaseToken`, `orderId`, `productType` ve `refundType`. Bu, veritabanınızda tam olarak ilgili satın almayı bulmaya ve ona bağlı yetkiyi iptal etmeye yeter.
  • `productType`, geçersiz kılınmış bir abonelik için `1`, geçersiz kılınmış bir tek seferlik satın alma için `2`'dir. `refundType`, tam iade için `1`, yalnızca çok adetli tek seferlik satın almalara uygulanan adet bazlı kısmi iade için `2`'dir.
  • Bir geçersiz kılınmış satın alma bildirimi, müşterinin parasını çoktan geri aldığı anlamına gelir. Google'ın kendi yönergesi, alıcının artık yetkiyi elinde tutmaması gerektiği için ilişkili içeriğe erişimi iptal etmektir.
  • Geçersiz kılınmış satın alma bildirimleri, siz açana kadar kapalıdır. Play Console'da Monetization setup altında ya abonelikler artı tüm geçersiz kılınmış satın almaları, ya da buna ek olarak tek seferlik ürün olaylarını seçersiniz. Her iki seçenek de geçersiz kılınmış satın almaları içerir.
  • Bir geçersiz kılınmış satın alma bildirimi, sizden kanıt isteyen iki iade akışından biri değildir. Bu, olay sonrası bir bildirimdir. Sizin girdinizi alan tek akışlar, 12 saatlik bir süreye sahip Apple'ın CONSUMPTION_REQUEST'i ve 24 saatlik bir süreye sahip `orders.reviewrefund` üzerinden Google Play'in ters ibraz incelemesidir.
  • 3 Ağustos 2026'dan itibaren Google, bir ters ibrazın satın alma bedelini artı banka ücretini geliştiriciye aktarır. Bir geçersiz kılınmış satın alma bildirimi çoğu zaman sunucunuzun bir ters ibraz geçersizliğinin geldiğini ilk öğrenme yoludur, bu yüzden onu bağlamak, artık karşılığını almadığınız bir müşteriye hizmet vermeyi durdurmanızı sağlar.

Google Play'de bir iade, sonradan bir raporda keşfettiğiniz bir şey olmak zorunda değildir. Google Play, bir satın alma geçersiz kılındığı anda sunucunuza bir geçersiz kılınmış satın alma bildirimi gönderebilir; ister alıcı self servis bir iade almış olsun, ister bir destek temsilcisi iade tanımış olsun, ister bir banka ters ibraz dayatmış olsun, ister siz iptal bayrağı açık olarak siparişi kendiniz iade etmiş olun. Mesaj çok küçüktür, tam olarak ilgili satın almayı adıyla belirtir ve tek bir talimat taşır, yetkiyi geri ver, çünkü para çoktan gitti.

Bir geçersiz kılınmış satın alma bildirimi gerçekte nedir

Bir geçersiz kılınmış satın alma bildirimi, Google Play'in Real-time Developer Notifications, yani RTDN türlerinden biridir. RTDN bir push kanalıdır. Google, sahip olduğunuz bir Cloud Pub/Sub konusuna bir mesaj yayımlar ve arka ucunuz, bir sonraki planlı sorgulamada öğrenmek yerine, olaydan hemen sonra onu alır. Eski çekme yoluna kıyasla geçersiz kılınmış satın alma bildiriminin bütün amacı budur: iadeyi saatler sonra değil, gerçekleştiği anda öğrenirsiniz.

Çekme yolu hâlâ vardır ve hâlâ önemlidir. Voided Purchases API, sunucunuzun kendi programınıza göre, bir zaman aralığında geçersiz kılınan satın almaların listesini sormasına olanak tanır. İkisi birbirini tamamlar. Bildirim size bir satın almanın döndüğü anı söyler; API ise toplu olarak mutabakat sağlamanıza ve kaçırılan bir mesajın geride bıraktığı her şeyi tamamlamanıza olanak tanır.

Bir Real-time Developer Notification'ın içinde gelir

Geçersiz kılınmış satın alma bildirimi asla tek başına gelmez. Bir DeveloperNotification sarmalayıcısının içinde oturur ve o sarmalayıcı, Pub/Sub mesajının data alanında tek bir base64 kodlu dize olarak teslim edilir. İşleyiciniz, herhangi bir şey okuyabilmek için önce o dizeyi JSON'a çözer. Sarmalayıcı her zaman uygulamayı ve olay zamanını adıyla belirtir ve Google'ın tanımladığı beş bildirim nesnesinden tam olarak birini içerir. Bunlar birbirini dışlar, dolayısıyla bir voidedPurchaseNotification taşıyan bir mesaj, aynı zamanda bir abonelik ya da tek seferlik olay taşımaz.

Sarmalayıcı alanıNeyi tutar
versionBildirim şeması sürümü, örneğin 1.0
packageNameOlayın ait olduğu uygulama, örneğin com.acme.app
eventTimeMillisOlayın ne zaman gerçekleştiği, epoch'tan bu yana milisaniye cinsinden
Beş bildirim nesnesinden birioneTimeProductNotification, subscriptionNotification, voidedPurchaseNotification, pendingRefundReviewNotification ya da testNotification. Mesaj başına yalnızca biri bulunur

Taşıdığı dört alan

Sarmalayıcıyı soyun, geçersiz kılınmış satın alma bildiriminin kendisi dört alandır. Bu, bilinçli olarak sadedir. Google'ın tutumu şudur: tek ihtiyacınız doğru satın almayı bulup yetkiyi ayarlamaksa, bu dört alan yeter ve harekete geçmek için herhangi bir API'yi geri çağırmanıza gerek yoktur.

AlanNedirNasıl kullanırsınız
purchaseTokenÜrün satın alındığında cihaza verilen belirteçBirincil anahtarınız. Verme anında sakladığınız satın alma kaydıyla eşleştirin
orderIdAlıcıya gösterilen sipariş kimliği, örneğin GS.0000-0000-0000Destek ve mutabakat için insan tarafından okunabilir ikinci bir anahtar
productTypeGeçersiz kılınan öğenin bir abonelik mi yoksa tek seferlik satın alma mı olduğuDoğru iptal yoluna yönlendirin
refundTypeGeçersiz kılmanın tam iade mi yoksa adet bazlı kısmi iade mi olduğuHer şeyi mi yoksa yalnızca iade edilen adedi mi iptal edeceğinize karar verin

productType neyin geçersiz kılındığını söyler

productType küçük bir tam sayıdır ve iptal yollarınızdan hangisini alacağınıza karar verir. Bir abonelik geçersizliği, devam eden erişimi geri sarmak zorundadır; bir tek seferlik satın alma geçersizliği ise yalnızca tek bir yetkiyi kaldırır.

`productType` değeriSabitAnlamı
1PRODUCT_TYPE_SUBSCRIPTIONBir abonelik satın alması geçersiz kılındı
2PRODUCT_TYPE_ONE_TIMEBir tek seferlik satın alma geçersiz kılındı

refundType ne kadarının geri geldiğini söyler

refundType, temiz bir tam geri döndürmeyi kısmi olandan ayırır. Kısmi durum dardır. Yalnızca çok adetli bir tek seferlik satın almanın adedinin bir kısmının, ancak tamamının değil, iade edildiğinde ortaya çıkar.

`refundType` değeriSabitAnlamı
1REFUND_TYPE_FULL_REFUNDSatın alma tamamen geçersiz kılındı
2REFUND_TYPE_QUANTITY_BASED_PARTIAL_REFUNDÇok adetli bir satın almanın bir kısmı geçersiz kılındı

Önce onu açın, yoksa asla gelmez

Geçersiz kılınmış satın alma bildirimleri varsayılan olarak akmaz. RTDN'yi Play Console'da bir kez etkinleştirir ve onu kontrol ettiğiniz bir Pub/Sub konusuna yönlendirirsiniz. Anahtar, Monetize, ardından Monetization setup altında, sayfanın üstündeki Real-time developer notifications bölümündedir. Enable real-time notifications'ı işaretleyin, ardından tam konu adınızı projects/{project_id}/topics/{topic_name} biçiminde yapıştırın ve ona güvenmeden önce boru hattının çalıştığını doğrulamak için Send Test Message'ı kullanın.

İçerik anahtarı, insanların geçersiz kılınmış satın almaları kaçırdığı yerdir. Her iki seçim de onları içerir, bu yüzden abonelikleri korurken yanlışlıkla iadelerden vazgeçemezsiniz.

  • Abonelikler ve tüm geçersiz kılınmış satın almalar için bildirim al. Abonelik olaylarını ve her geçersiz kılınmış satın almayı alırsınız, ancak tek seferlik ürün satın alma olaylarını almazsınız.
  • Abonelikler ve tek seferlik ürünler için tüm bildirimleri al. Yukarıdakilere ek olarak ONE_TIME_PRODUCT_PURCHASED ve ONE_TIME_PRODUCT_CANCELED gibi tek seferlik ürün olaylarını alırsınız.
Bir kâğıt fişin yanında ters duran bir kredi kartı, geçersiz kılınmış bir Google Play satın almasını temsil ediyor

Size parasal olarak neye mal olur

Bir geçersizlik, bildirim size ulaştığında çoktan defterlere işlenmiş bir kayıptır. Satış fiyatı gitmiştir, o müşteriye hizmet vermek için harcadığınız her şey de öyle. Görüntü ürettilerse, modellerinize karşı çağrılar çalıştırdılarsa, depolama kullandılarsa ya da üçüncü bir tarafa bir ödeme tetiklediyseler, o maliyetler gerçek parayla ödendi ve iadeyle geri gelmez. Bildirim bunların hiçbirini geri alamaz. Yapabileceği şey, buradan ileriye doğru kanamayı durdurmaktır ki hızlı hareket etmenin bütün nedeni de budur.

Kanama en çok aboneliklerde ve en çok ters ibrazlarda kötüdür. İptal etmeyi başaramadığınız bir abonelik, artık ödeme yapmayan bir müşteri için ay ay hizmet maliyeti çıkarmaya devam eder. Ve bir ters ibraz, geçersizliğin en pahalı türüdür. 3 Ağustos 2026'dan itibaren Google'ın belgeleri, bir ters ibrazın satın alma fiyatını artı bankanın ücretini geliştiriciye aktardığını belirtir. Geçersiz kılınmış satın alma bildirimi çoğu zaman kendi sistemlerinizin bir ters ibrazın tamamlandığını ilk duyduğu yerdir, bu yüzden yerinde iptal eden bir işleyici, kayıp bir satışın kayıp bir satış artı haftalarca ücretsiz hizmete dönüşmesini engelleyen şeydir.

Bir geçersiz kılınmış satın alma bildirimini adım adım nasıl ele alırsınız

Mesajı doğrulayın ve yinelenenleri ayıklayın

  • Pub/Sub mesajının Google'dan geldiğini ve yapılandırdığınız konuyu hedeflediğini doğrulayın, ardından DeveloperNotification JSON'unu almak için base64 data alanını çözün.
  • Yinelenenleri atmak için Pub/Sub messageId'sini kullanın. Google, aynı bildirimin birden fazla kez teslim edilebileceği konusunda uyarır, bu yüzden yeniden teslimi normal kabul edin ve işleyicinizi idempotent yapın.
  • Mesajı yalnızca güvenli bir şekilde kaydettikten sonra onaylayın, böylece işleyicinin ortasında bir çökme olayı kaybetmez.

Satın almayı arayın

  • purchaseToken'ı, yetkiyi ilk verdiğinizde sakladığınız satın almayla eşleştirin. Destek aramaları ve manuel mutabakat için orderId'ye başvurun.
  • Abonelik ya da tek seferlik iptal yolunu seçmek için productType'ı okuyun ve tam iptal ile kısmi iptal arasında karar vermek için refundType'ı okuyun.

İptal edin ve kaydedin

  • Yetkiyi kaldırın. Tam iade için, öğeye erişimi kesin. Adet bazlı kısmi iade için, verilen adedi iade edilen miktar kadar azaltın ve gerisini olduğu gibi bırakın.
  • Ne yaptığınızı ve ne zaman yaptığınızı purchaseToken ve orderId anahtarıyla yazın. O kayıt, daha sonra bir destek talebini yanıtlamanızı sağlayan şeydir ve Voided Purchases API'nin kendi durumunuza karşı temiz bir şekilde mutabakat sağlamasını mümkün kılan şeydir.

Diğer iade sinyalleri arasında nerede durur

Bir geçersiz kılınmış satın alma bildirimi bir bildirimdir, bir müzakere değil. Size çoktan verilmiş bir sonucu söyler. Onu, kolayca karıştırıldığı sinyallerin yanında görmeye değer, çünkü bunların yalnızca bazıları sizin tarafınızın hikayesini sorar.

SinyalYönSizin girdinizi alır mı
Geçersiz kılınmış satın alma bildirimi (RTDN)Google sunucunuza gönderirHayır. Çoktan gerçekleşmiş bir geçersizliği bildirir
Voided Purchases APISunucunuz Google'dan çekerHayır. Geçmiş geçersizliklerin salt okunur bir listesidir
pendingRefundReviewNotification (RTDN)Google sunucunuza gönderirEvet, dolaylı olarak. 24 saat içinde orders.reviewrefund üzerinden itiraz ettiğiniz bir ters ibrazı işaretler
Apple CONSUMPTION_REQUESTApple sunucunuza sorarEvet. 12 saat içinde Send Consumption Information ile yanıt verirsiniz

Akılda tutulacak nokta basittir. Her iki mağaza genelinde, geliştiricinin söz sahibi olduğu tam olarak iki iade akışı vardır, Apple'ın CONSUMPTION_REQUEST'i ve Google Play'in ters ibraz incelemesi. Bir geçersiz kılınmış satın alma bildirimi bunların hiçbiri değildir. Size ulaştığında karar çoktan geride kalmıştır ve elinizde kalan tek şey ne kadar hızlı iptal ettiğinizdir.

Sık sorulan sorular

Google Play'de bir geçersiz kılınmış satın alma bildirimi ne anlama gelir?
Bir satın almanın iade edildiği, ters ibraza uğradığı ya da başka bir şekilde geçersiz kılındığı ve müşterinin parasını geri aldığı anlamına gelir. Google'ın yönergesi, alıcının artık yetkiyi elinde tutmaması gerektiği için ilişkili içeriğe erişimi iptal etmektir. Bildirim, `purchaseToken` ve `orderId`'si aracılığıyla tam olarak ilgili satın almayı adıyla belirtir.
Bir Google Play geçersiz kılınmış satın alma bildirimi hangi alanları içerir?
Dört: `purchaseToken`, `orderId`, `productType` ve `refundType`. `productType`, bir abonelik için `1` ve bir tek seferlik satın alma için `2`'dir. `refundType`, tam iade için `1` ve çok adetli bir satın almada adet bazlı kısmi iade için `2`'dir.
Geçersiz kılınmış satın alma bildirimlerini nasıl etkinleştiririm?
Play Console'da Monetize ardından Monetization setup'ı açın ve Real-time developer notifications bölümünde Enable real-time notifications'ı işaretleyin, ardından Cloud Pub/Sub konu adınızı girin. Her iki içerik seçeneği, abonelikler artı tüm geçersiz kılınmış satın almalar ve buna ek olarak tek seferlik ürün olayları, geçersiz kılınmış satın almaları içerir.
Geçersiz kılınmış satın alma bildirimi ile Voided Purchases API arasındaki fark nedir?
Bildirim, bir satın alma geçersiz kılındığı anda Cloud Pub/Sub aracılığıyla gerçek zamanlı olarak teslim edilen bir push sinyalidir. Voided Purchases API, sunucunuzun bir zaman aralığındaki geçersizlikleri listelemek için kendi programına göre sorguladığı bir çekme yoludur. Anında tepki vermek için bildirimi, mutabakat ve tamamlama için API'yi kullanın.
Bir geçersiz kılınmış satın alma bildirimi iadeye itiraz etmemi sağlar mı?
Hayır. Çoktan verilmiş bir kararın olay sonrası bir bildirimidir. Sizin girdinizi alan tek Google Play akışı, yanıtlamak için 24 saatinizin olduğu `orders.reviewrefund` üzerinden ters ibraz incelemesidir ve Apple'da bu, 12 saatlik bir süreye sahip CONSUMPTION_REQUEST'tir.

Kaynaklar ve ek okumalar

RefundHalt

App Store ve Google Play için geri ödeme otomatik pilotu

Okumaya devam edin

Bir sonraki geri ödeme talebi şimdiden yolda.

İtiraz edemediğiniz bir geri ödemeyle ilgili başka bir destek e-postasını okumak için gereken sürede RefundHalt'ı kurun.