App Store Refund Management

Apple'ın CONSUMPTION_REQUEST'inin içinde: Geri ödemenizi belirleyen yarım gün

Her App Store geri ödemesi Apple'ın kararıdır, ancak bir CONSUMPTION_REQUEST, satın alma hakkında gerçeklerle yanıt vermeniz için size belirli bir süre verir. İyi yanıt verirseniz mantıksız talepler reddedilir. Sessiz kalırsanız Apple'ın duyduğu tek versiyon müşterinin hesabı olur.

5 min read
Apple'ın CONSUMPTION_REQUEST'inin içinde: Geri ödemenizi belirleyen yarım gün

Her App Store geri ödemesi Apple'ın kararıdır, ancak Apple bu kararı bilgisiz vermek istemez. Bir geri ödeme talebi süreci durdurur, sunucunuza bir soru iletir ve satın alma hakkında gerçeklerle yanıt vermeniz için belirli bir süre açar. Esaslı bir şekilde yanıt verirseniz mantıksız talepler reddedilir. Sessiz kalırsanız Apple'ın duyduğu tek versiyon müşterinin hesabı olur.

Önemli noktalar

  • App Store'daki geri ödeme talepleri, Apple'ın sunucunuza bir CONSUMPTION_REQUEST bildirimi göndermesine neden olur; ardından karar vermeden önce kanıt beklemek için 12 saate kadar süre tanır.

  • Yanıt vermek, Send Consumption Information uç noktasını kısa bir veri yüküyle çağırmak demektir: onay durumu, teslimat durumu, bir örnek/deneme sunulup sunulmadığı, ne kadar tüketildiği ve istediğiniz sonuç.

  • Hiçbir şey göndermemek de bir yanıttır. Apple, yalnızca müşterinin iddiasını ve hesap geçmişini kullanarak ilerler.

  • Onay, geçilmesi zorunlu bir eşik olarak işler. Apple'ın belgeleri, müşteri tüketim verilerinin paylaşılmasına onay vermediyse hiç yanıt vermemeniz gerektiğini açıkça belirtir.

  • Otomatik yenilenen aboneliklerde tüketim yüzdesi Apple tarafından geçen süreden hesaplanır; kendi değerinizi göndermeniz hataya yol açar.

  • Bu süre içine hiçbir manuel süreç sığmaz. Bundan kazançlı çıkan geliştiriciler, yanıtları otomatik olarak hazırlanıp gönderilenlerdir.

App Store'daki her geri ödeme aynı şekilde başlar: biri reportaproblem.apple.com adresini ziyaret eder, bir satın alma seçer ve bir neden belirtir.

Genellikle yanıtsız kalan bildirim

App Store Server Notifications V2 için yapılandırılmış uygulamalar, geri ödeme talep edilir edilmez bir CONSUMPTION_REQUEST bildirimi alır. Bu veri yükünün içinde işlem, ürün ve 2024'ten itibaren müşterinin seçtiği neden yer alır: UNINTENDED_PURCHASE, FULFILLMENT_ISSUE, UNSATISFIED_WITH_PURCHASE, LEGAL veya OTHER.

Buradan itibaren on iki saat başlar; bu süre içinde Send Consumption Information uç noktasını çağırabilir ve kendi versiyonunuzu kayda geçirebilirsiniz. Bu uç noktanın istediği şey bilinçli olarak minimaldir: sadece bayrak ve sayı içeren beş alan.

  • customerConsented, müşterinin kullanım verilerinin paylaşılmasına onay verip vermediğini Apple'a bildirir. Tipik bir değer true'dur.

  • deliveryStatus, satın almanın ulaşıp ulaşmadığını ve çalışıp çalışmadığını Apple'a bildirir. Tipik bir değer DELIVERED'dır.

  • sampleContentProvided, önceden ücretsiz bir örnek veya deneme sunulup sunulmadığını Apple'a bildirir. Tipik bir değer true'dur.

  • consumptionPercentage, tüketilen oranı Apple'a bildirir; bu değer, 100000'in yüzde 100'e karşılık geldiği miliünite cinsinden ifade edilir. Tipik bir değer 67500'dür.

  • refundPreference, tercih ettiğiniz sonucu Apple'a bildirir; bu onay, reddetme veya tercih belirtmeme olabilir. Tipik bir değer DECLINE'dır.

consumptionPercentage'ın kapsamı sınırlıdır: tüketilebilir ürünler, tek seferlik satın almalar ve yenilenmeyen abonelikler. Otomatik yenilenen aboneliklerde bu değer Apple tarafından fatura dönemi içindeki geçen süreden hesaplanır ve sizin sağladığınız herhangi bir değer reddedilir.

Apple gönderdiklerinizle ne yapar

Tüketim bilgileri, Apple tarafından açıkça geri ödemenin nasıl sonuçlanacağına dair bir girdi olarak kullanılır. Hiçbir şey göndermezseniz karar, tamamen müşterinin iddiası ve hesap geçmişine dayanarak verilir. Kanıt gönderirseniz itiraz edilen geri ödemeler gerçek anlamda sık sık reddedilir.

Yanıt sürecini sıfırdan kendiniz kurmak

Bu sıradaki hiçbir şey gizli değil. Ancak tamamının sabahın üçünde, kimse müdahale etmeden çalışması gerekiyor.

1. Bildirimlerin ulaşmasını sağlayın

App Store Connect içinde, uygulamanız için App Information sayfasını açın ve App Store Server Notifications altında Version 2'yi seçerek bir Production Server URL yapılandırın. Tüketim talepleri V1 üzerinden iletilmez. Geri ödemeler dahil tüm bildirimler, bu URL'ye imzalı bir JWS veri yükü olarak POST ile ulaşır.

2. Doğru anahtarı oluşturun

Yanıtların kimlik doğrulaması, Users and Access altındaki Integrations bölümünde oluşturulan bir In-App Purchase key kullanır. Bu, ayrı bir anahtar türüdür ve yanındaki App Store Connect API anahtarı bu çağrıları kimlik doğrulamaz. .p8 dosyası yalnızca bir kez indirilir; bundan sonra her istek için kısa ömürlü bir ES256 JWT üretirsiniz.

3. Doğrulayın, eşleştirin, ardından karar verin

Gelen CONSUMPTION_REQUEST bildirimlerinin içeriğine herhangi bir şekilde güvenmeden önce, JWS imza zincirinin Apple'ın kök sertifikalarına karşı doğrulanması gerekir. Ardından, satın alma sırasında eklediğiniz appAccountToken UUID üzerinden işlemi bir kullanıcıyla eşleştirin ve gerçek kullanımını alın. Sonra bir tercihe karar verin: iyi niyet gerektiren durumlarda taviz verin, ürünün açıkça tüketildiği durumlarda itiraz edin.

4. Süre dolmadan gönderin

12 saat içinde, bu beş alanı ilgili işlem kimliğiyle Send Consumption Information uç noktasına PUT yapın. Hemen hemen herkesin yaptığı iki hata vardır. Yüzde değeri miliünite cinsinden belirlenir, yani %100 bir milyon değil 100000 anlamına gelir. Ve onay her şeyin önündeki eşiktir; çünkü Apple'ın kendi belgeleri, müşteri onayı yoksa hiç yanıt vermemeniz gerektiğini belirtir. Bunların herhangi birini canlıya almadan önce bu onay ifadesini hizmet şartlarınıza ekleyin.

Neden bu kadar çok geliştirici bu hakkı kaybediyor

Yarım gün, insan eliyle yürütülen herhangi bir süreç için acımasızdır. Bildirimler cumartesi sabahları saat 3'te gelir. Gereken şey; Apple'ın JWS imza zincirini doğrulayabilen, işlemi bir kullanıcıyla eşleştirebilen, miliünite cinsinden bir tüketim yüzdesi hesaplayabilen ve JWT ile kimlik doğrulaması yapılan bir API'yi çağırabilen bir sunucudur. Her bir talep için. Süresiz olarak.

Pratikte kontrol listesi şu şekildedir:

  • App Store Server Notifications V2'yi kurun; bu olmadan talep size hiç ulaşmaz.

  • İmzalı veri yüküne herhangi bir güven göstermeden önce bunu Apple'ın sertifika zincirine karşı doğrulayın.

  • İşlemi kendi sisteminizdeki bir kullanıcıyla, genellikle satın alma sırasında eklenen appAccountToken üzerinden eşleştirin.

  • Tüketim yüzdesini tahmin yerine gerçekten kaydedilmiş kullanımdan hesaplayın.

  • Süre açıkken Send Consumption Information'ı bir In-App Purchase key kullanarak çağırın.

Refund Sensor, kimse uyandırılmadan süre içinde eksiksiz ve kanıta dayalı bir yanıtı göndererek bu yükü üstlenmek için var.

Bu kurallar nerede belgeleniyor

Sık sorulan sorular

Geri ödeme yine karara bağlanır, ancak bu kez yalnızca müşterinin iddiası ve hesap geçmişi üzerinden. Satın almanın ulaştığını ve yoğun şekilde kullanıldığını gösterme fırsatınızı kaçırırsınız. Pratikte yanıtsız kalan talepler önemli ölçüde daha sık onaylanır.

Evet, gerekli. customerConsented değerinin true olması gerekir ve bu bayrağın arkasındaki onayın gerçek olması, genellikle veri paylaşımını kapsayan yasal belgelerinizden birinde kayıtlı olması gerekir. Apple'ın kendi yönergeleri, bu tür bir onay bulunmadığında geliştiricilere bildirime hiç yanıt vermemelerini söyler.

Yalnızca yenilenmeyen aboneliklerde. Otomatik yenilenen aboneliklerde tüketim, Apple tarafından mevcut fatura dönemi içindeki geçen süreden hesaplanır ve API sizin sağladığınız herhangi bir yüzdeyi reddeder. Buna rağmen geri ödeme tercihiniz yine de ağırlık taşır.

App Store Connect'te Users and Access altındaki Integrations bölümünde oluşturulan bir In-App Purchase key. Bu, App Store Connect API anahtarından farklıdır ve .p8 dosyası yalnızca oluşturulduğu anda bir kez indirilebilir.

Production ortamında bildirimden itibaren 12 saat süreniz var. Sandbox'ta ise sadece 5 dakika var; bu da Apple'ın ne beklediğine dair oldukça açık bir sinyal: bir insan değil, otomasyon.

#consumption request#send consumption information#app store server notifications#refunds#storekit#ios
Refund SensorRefund Sensor TeamRefund defense for App Store and Google Play developers