Geri ödeme işleme sessizce bozulur, bu yüzden uygulama içi satın alma geri ödemelerini gerçek bir müşteri denemeden önce sandbox içinde test edin
Geri ödeme işleminiz yalnızca müşteri çoktan gittikten sonra çalışır, bu yüzden içindeki bir hata gerçek para maliyet çıkarana kadar görünmez kalır. Her iki mağaza da önce bir test ortamında geri ödeme tetiklemenize izin verir. İşte uygulama içi satın alma geri ödemelerini bir tanesi gerçek olmadan önce App Store ve Google Play'de nasıl test edersiniz.

Önemli noktalar
- Xcode'un StoreKit testi, Transaction Manager içindeki geri ödeme okuna tıklayarak bir satın almayı yerel olarak geri ödemenize izin verir, bu da uygulamanızın Transaction.updates dinleyicisini tetikler, ama asla Apple ile iletişime geçmez, bu yüzden hiçbir App Store Server Notification gönderilmez.
- Apple'da sunucu tarafını test etmek için, bir sandbox App Store Server Notifications V2 URL'sini arka ucunuza yönlendirin: o zaman sandbox içindeki bir geri ödeme gerçek bir REFUND, bir geri ödeme talebi de sunucunuza bir CONSUMPTION_REQUEST teslim eder.
- Apple'ın Request a Test Notification uç noktası, yapılandırdığınız URL'ye TEST türünde bir bildirim gönderir ve bir testNotificationToken döndürür, böylece gerçek bir olay tetiklenmeden önce webhook'unuzun erişilebilir olduğunu doğrulayabilirsiniz.
- Apple'ın sandbox'ı başarısız bir bildirimi asla yeniden denemez, bu yüzden sandbox tetiklendiğinde çalışmayan bir webhook olayı ikinci bir deneme olmadan düşürür, bu daha sonra size gerçek bir geri ödeme penceresine mal olan aynı tür bir kaçırmadır.
- Google Play, lisans test edicilerine Test card, approves then charges back adlı bir ödeme yöntemi verir, bu da satın almadan hemen sonra bir PendingRefundReviewNotification tetikler, böylece 24 saatlik orders.reviewrefund yanıtınızı prova edebilirsiniz.
- Google Play'de bir lisans test edicisi için, onaylanmamış bir satın alma, üretimin beklediği 3 gün yerine 3 dakika sonra otomatik olarak geri ödenir, bu yüzden bozuk bir onay yolu testte hızlı ve gürültülü şekilde başarısız olur.
- Hiç test etmediğiniz bir geri ödeme işleyici, geri ödeme yapılmış bir müşterinin ücretli erişimini açık tutan işleyicidir ve 3 Ağustos 2026'dan itibaren test edilmemiş bir Google Play ters ibraz yanıtı size satın alma bedelini, Play'in hizmet ücreti düşülmüş, artı bankanın ücreti kadar mal olabilir.
Geri ödeme işleminiz, yalnızca müşteri çoktan gittikten sonra çalışan tek kod yoludur. Normal QA'nizde hiçbir şey ona dokunmaz, çünkü ona ulaşmak için gerçekten geri ödeme almanız gerekir. Bu yüzden test edilmeden yayınlanır, aylarca sessizce durur ve sonra gerçek bir geri ödemede başarısız olur, burada arıza kırmızı bir test yerine paraya mal olur. Çözüm, geri ödemeyi başınıza gelen bir şey olarak görmeyi bırakıp bilerek bir tane tetiklemeye başlamaktır. Hem Apple hem Google, bir test ortamında geri ödeme tetiklemenize ve sunucunuzun tepkisini izlemenize izin verir. İşte uygulama içi satın alma geri ödemelerini, ödeme yapan bir müşteri işleyicinizin bozuk olduğunu kanıtlamadan önce App Store ve Google Play'de nasıl test edersiniz.
Bir geri ödemenin tetiklenebileceği üç ortam ve yalnızca biri üretimdir
Siz geliştirirken bir Apple veya Google geri ödemesinin tetiklenebileceği üç ayrı yer vardır ve bunlar birbirinin yerine geçmez. Bunlardan ikisini istediğinizde tetikleyebilirsiniz. Üçüncüsü üretimdir, burada bir geri ödeme hatasıyla ilk kez asla karşılaşmak istemezsiniz. Tuzak, kolay olanın, Xcode'da yerel testin, tüm hattınızı kanıtladığını varsaymaktır. O, uygulamanızı kanıtlar. Sunucunuz hakkında hiçbir şey söylemez.
Xcode'da StoreKit testi yereldir, bu yüzden uygulamanızı çalıştırır, başka hiçbir şeyi değil
Xcode'un yerleşik StoreKit testi, Apple'a gidiş dönüş olmadan Mac'inizdeki bir yapılandırma dosyasına karşı çalışır. Hata ayıklama çubuğundan StoreKit Transaction Manager'ı açın, satın alınmış bir işlem seçin ve kavisli geri ödeme okuna tıklayın. İşlem geri ödenmiş durumuna geçer ve uygulamanızın Transaction.updates dinleyicisi tam da gerçek hayatta olacağı gibi tetiklenir. Gerçek geri ödeme sayfasını göstermek için beginRefundRequest de çağırabilirsiniz ve Xcode ortamında seçtiğiniz sorun birebir bir RevocationReason ile eşleşir, geri ödeme hemen uygulanır. Bu, istemcinizin revocationDate nil olmadığı anda erişimi kestiğini kanıtlamanın en hızlı yoludur. Aynı zamanda yerel testin size söyleyebileceği her şeydir, çünkü burada hiçbir şey asla Apple'ın sunucularına ulaşmaz, bu yüzden hiçbir App Store Server Notification gönderilmez. Arka ucunuz hiçbir şey öğrenmez.
Sandbox, sunucunuzun bir geri ödemeyi nihayet duyduğu yerdir
Parayı belirleyen entegrasyonunuzun yarısını, yani sunucunuzu test etmek için Apple'ın sandbox'ına ihtiyacınız var. App Store Connect'te bir sandbox App Store Server Notifications V2 URL'si yapılandırın, bir cihazda bir sandbox test edicisiyle oturum açın ve satın alın. Şimdi sandbox içindeki bir geri ödeme, arka ucunuza gerçek bir REFUND bildirimi teslim eder ve bir tüketilebilir veya otomatik yenilenen üründeki bir geri ödeme talebi, üretim sunucunuzun alacağı aynı imzalı payload olan bir CONSUMPTION_REQUEST teslim eder. Herhangi bir şey tetiklemeden önce, Request a Test Notification uç noktasını çağırın. Bu, App Store sunucusuna yapılandırdığınız URL'ye TEST türünde bir bildirim göndermesini söyler ve size bir testNotificationToken verir, teslimatı doğrulamak için bunu Get Test Notification Status'a iletirsiniz. O gidiş dönüş çalışmazsa, gerçek bir bildirim de çalışmaz.
| Ortam | Neyi tetikleyebilir | Neyi kanıtlar | Neyi yapamaz |
|---|---|---|---|
| Xcode'da StoreKit testi | Transaction Manager veya beginRefundRequest sayfası aracılığıyla bir geri ödeme | Uygulamanız bir geri ödemeye yerel olarak, saniyeler içinde tepki verir | Asla Apple ile iletişime geçmez, bu yüzden hiçbir sunucu bildirimi gönderilmez |
| Sandbox | Sunucunuza gerçek REFUND ve CONSUMPTION_REQUEST, artı istek üzerine bir TEST bildirimi | Arka ucunuz imzalı payload'ı alır, doğrular ve buna göre hareket eder | Uç noktanızın alamadığı bir bildirimi yeniden denemez |
| Üretim | Her geri ödeme, gerçek para karşılığı | Burada ilk olarak öğrenmek isteyeceğiniz hiçbir şey yok | Bir hatanın maliyetini geri alamazsınız |
Uygulama içi satın alma geri ödemelerini App Store'da nasıl test edersiniz
Bunu şu sırayla çalıştırın, ucuz istemci kontrolünden tam sunucu gidiş dönüşüne. Her adım farklı bir parçayı çalıştırır ve sonrakiler üretimin sizi gerçekten faturalandırdığı olanlardır.
- App Store Connect'te Users and Access, Integrations, In-App Purchase altında bir In-App Purchase anahtarı oluşturun ve App Store Server API çağrılarınızı imzalamak için kullanın.
- Sandbox App Store Server Notifications V2 URL'nizi arka ucunuza yönlendirin, ardından Request a Test Notification çağırın ve
TESTpayload'ının geldiğini ve Apple'ın sertifika zincirine karşı doğrulandığını onaylayın. - Xcode'un Transaction Manager'ında bir satın almayı geri ödeyin ve uygulamanızın
revocationDateayarlandığı anda hak sahipliğini bıraktığını onaylayın. - Bir sandbox test edicisiyle oturum açın, bir tüketilebilir ürün satın alın, bir geri ödeme talep edin ve sunucunuzun
CONSUMPTION_REQUESTaldığını ve 12 saatlik pencerenin çok içinde bir Send Consumption Information yanıtı derleyip gönderebildiğini onaylayın. - Bir sandbox satın almasını geri ödeyin ve
REFUNDbildiriminin sunucunuza ulaştığını, erişimi geri aldığınızı veya tüketilebilir bakiyeyi düştüğünüzü ve aynı bildirimin tekrarlanan bir teslimatının iki kez uygulanmadığını onaylayın.

Google Play'de bir geri ödemeyi ve bir ters ibrazı nasıl prova edersiniz
Google Play'de Xcode'unki gibi yerel bir mod yoktur. Her şey Google'ın sunucularına karşı çalışır, ama lisans test edicileri bunu ücretsiz ve güvenli tutar. Test Google hesaplarınızı Play Console'da lisans test edicisi olarak ekleyin, gerçek para tahsil etmeyen bir dizi test ödeme yöntemi alsınlar. Google her test satın almayı satın alma iletişim kutusunun ortasında bir bildirimle işaretler ve vergiler hesaplanmaz. Geri ödeme testi için önemli olan hangi test aracını seçtiğinizdir, çünkü her biri farklı bir sonuç doğurur.
| Test ödeme yöntemi | Neyi simüle eder | Neden kullanırsınız |
|---|---|---|
| Test instrument, always approves | Temiz, başarılı bir satın alma | Sonra geri ödeyebileceğiniz veya iptal edebileceğiniz bir sipariş kurun |
| Test instrument, always declines | Başarısız bir ödeme | Bir reddetmede hiçbir şey vermediğinizi onaylayın |
| Slow test card, approves after a few minutes | Sonradan başarılı olan bekleyen bir satın alma | Erişim vermeden önce PENDING işlemenizi çalıştırın |
| Slow test card, declines after a few minutes | Sonradan başarısız olan bekleyen bir satın alma | Bekleyen bir reddetmenin asla hak sahipliği sızdırmadığını onaylayın |
| Test card, approves then charges back | Kullanıcı tarafından başlatılan bir ters ibraz | Bir PendingRefundReviewNotification tetikleyin ve 24 saatlik yanıtınızı prova edin |
Bir geri ödemeyi, bir ters ibrazı ve onay otomatik geri ödemesini tetikleyin
- approve-then-charge-back test kartıyla satın alın ve bir
PendingRefundReviewNotificationbiraz sonra Real-time Developer Notifications konunuza düşer. Ona tek birorders.reviewrefundçağrısıyla yanıt verin, çünkü Google yalnızca ilk yanıtınızı saklar. - Bir
VoidedPurchaseNotificationtetiklemek için Play Console'daki Orders sekmesinden bir test siparişini geri ödeyip iptal edin ve sunucunuzun hak sahipliğini çektiğini onaylayın. - Bir lisans test edicisinin satın almasını bilerek onaylanmamış bırakın. Google onu, üretimin izin verdiği 3 gün yerine 3 dakika sonra otomatik olarak geri öder ve iptali size e-postayla gönderir, böylece bozuk bir onay yolu üretimde dördüncü günde değil, dakikalar içinde ortaya çıkar.
Test edilmemiş bir geri ödeme yolu gerçekte neye mal olur
Bir geri ödeme işleyici süs değildir. Size artık ödeme yapmayan birine hizmet etmek için ödeme yapmanızı durduran koddur. Sessizce başarısız olduğunda, geri ödeme yine de gerçekleşir, ama erişim, bakiye ve arkalarındaki harcama durmaz.
Parayı takip edin. Apple veya Google bir satın almayı geri ödediğinde, siz satış bedelini iade edersiniz ve mağaza komisyonunu iade eder, buraya kadar defter dengededir. Geri gelmeyen şey, ürünü sunmak için zaten harcadığınız her şeydir: üretilen bir sonucun arkasındaki hesaplama, model API çağrıları, kullanıcının kaydettiği şey için depolama, bir yaratıcıya zaten gönderdiğiniz ödeme. Erişimi asla geri almayan bir geri ödeme işleyici, geri ödeme yapılmış bir kullanıcının bunları sizin bütçenizle harcamaya devam etmesine izin verir, sistemde onu kesecek hiçbir şey kalmaz.
İki kanıt penceresi bunu keskinleştirir. Sandbox'ta hiç çalıştırmadığınız bir CONSUMPTION_REQUEST, hatalı biçimlendirilmiş veya geç gönderdiğiniz bir yanıttır ve yanıtınız 12 saat içinde ulaşmadığında Apple genellikle geri ödemeyi varsayılan olarak verir. Test kartıyla hiç tetiklemediğiniz bir Google Play ters ibraz yanıtı, canlıda beceremediğiniz 24 saatlik bir penceredir ve 3 Ağustos 2026'dan itibaren kaybedilen bir Play ters ibrazı size satın alma bedelini, Play'in hizmet ücreti düşülmüş, artı bankanın ters ibraz ücreti kadar mal olur. Bu başarısızlıkların her biri önce bir test ortamında ücretsiz olarak yeniden üretilebilir. Hiçbiri üretimde ucuz değildir.
| Test edilmemiş yol | Üretimde nasıl başarısız olur | Size neye mal olur |
|---|---|---|
| REFUND işleyici | Geri ödeme yapılmış bir kullanıcı erişimi korur | Ona harcamaya devam ettiğiniz hesaplama, API çağrıları, depolama ve ödemeler |
| CONSUMPTION_REQUEST yanıtı | Hatalı biçimlendirilmiş veya 12 saatten sonra gönderilmiş | Apple geri ödemeyi varsayılan olarak verir, bu yüzden satışı ve harcamayı kaybedersiniz |
| orders.reviewrefund yanıtı | 24 saat içinde kaçırılmış veya yanlış | 3 Ağustos 2026'dan itibaren, satın alma bedeli, Play'in hizmet ücreti düşülmüş, artı bankanın ters ibraz ücreti |
Geri ödeme işlemeyi yayınlamadan önce kısa bir kontrol listesi
Bir laboratuvara ihtiyacınız yok. Her olayın kodunuza bir kez ulaştığını izlemiş olmanız gerekiyor.
- Uygulamanız, bir StoreKit işlemi bir
revocationDategösterdiği anda erişimi bırakır, Xcode'un Transaction Manager'ında onaylanmış. - Sandbox sunucu URL'niz bir
TESTbildirimi alır ve onu Apple'ın sertifikalarına karşı doğrular. - Bir sandbox
REFUNDerişimi geri alır veya bakiyeyi düşer ve tekrar bir teslimat iki kez sayılmaz. - Bir sandbox
CONSUMPTION_REQUEST, 12 saatin çok içinde geçerli bir Send Consumption Information yanıtı üretir. - Ters ibraz test kartından gelen bir Google
PendingRefundReviewNotification, tam olarak birorders.reviewrefundçağrısı üretir. - Onaylanmamış bir Google Play test satın alması 3 dakikada otomatik olarak geri ödenir ve mutabakatınız bunu fark eder.
O listeyi bir kez çalıştırın ve geri ödeme işleme, çalışmasını umduğunuz kod olmaktan çıkar. Çalıştığını izlediğiniz kod haline gelir.
Sık sorulan sorular
- App Store geri ödemesini gerçek bir satın alma olmadan test edebilir miyim?
- Evet. Xcode'un StoreKit testi, gerçek para ve App Store hesabı olmadan Transaction Manager aracılığıyla bir satın almayı yerel olarak geri ödemenize izin verir, bu da uygulamanızın Transaction.updates dinleyicisini tetikler. Bir sunucu bildirimi göndermez, bu yüzden yalnızca uygulamanızı test eder, arka ucunuzu değil.
- Yerel StoreKit testi App Store Server Notifications gönderir mi?
- Hayır. Xcode'un StoreKit testi tamamen Mac'inizde yerel bir yapılandırmaya karşı çalışır ve asla Apple'ın sunucularıyla iletişime geçmez, bu yüzden REFUND veya CONSUMPTION_REQUEST dahil hiçbir App Store Server Notification asla gönderilmez. Sunucunuzu test etmek için sandbox'ı kullanın.
- Google Play ters ibraz yanıtını nasıl test ederim?
- Test card, approves then charges back adlı lisans test edicisi ödeme yöntemini kullanın. Satın almadan hemen sonra bir PendingRefundReviewNotification tetikler, gerçek bir banka ters ibrazının gönderdiği aynı bildirim, böylece 24 saatlik orders.reviewrefund yanıtınızı prova edebilirsiniz.
- Google Play test satın almam neden birkaç dakika sonra geri ödeniyor?
- Lisans test edicileri için, uygulamanız onaylamamışsa Google bir satın almayı 3 dakika sonra otomatik olarak geri öder ve iptali size e-postayla gönderir. Üretim 3 gün bekler, ama test ediciler hızlandırılmış sürümü alır, böylece bozuk bir onay yolu hızla yüzeye çıkar.
- Apple'ın sandbox'ı başarısız bir geri ödeme bildirimini yeniden dener mi?
- Hayır. Sandbox App Store Server Notifications'ı yeniden denemez, bu yüzden bir sandbox geri ödemesi tetiklendiğinde uç noktanız çalışmıyorsa, bildirim ikinci bir deneme olmadan düşürülür. Önce URL'nizin erişilebilir olduğunu Request a Test Notification ile onaylayın.
Kaynaklar ve ek okumalar
- Apple Developer: Testing refund requests
- Apple Developer: Testing App Store server notifications
- Apple Developer: Request a Test Notification (App Store Server API)
- Apple Developer: Testing In-App Purchases with the sandbox
- Android Developers: Test your Google Play Billing Library integration
- Android Developers: Help Google dispute chargebacks (orders.reviewrefund)
- Play Console Help: Updates to refund protection and chargeback cost responsibility
RefundHalt
App Store ve Google Play için geri ödeme otomatik pilotu
Okumaya devam edin
Bir iadenin uygulamanıza maliyeti, geri verdiğiniz fiyattan fazlasıdır
İade edilen fiyat, faturadaki en küçük satırdır. Bir iade, mağaza komisyonunu da geri çevirir, yani kendi payınızı kaybedersiniz, ve halihazırda harcadığınız işlem gücü, API çağrıları, depolama ve ödemeler geri gelmez. 3 Ağustos 2026 tarihinden sonra bir Google Play ters ibrazı, üstüne bankanın ücretini ekler. İşte faturanın tamamı.
Abonelik iadeleri tek seferlik iadeler gibi çalışmaz ve ne kadar söz hakkınız olduğuna bulunduğunuz mağaza karar verir
Bir abonelik iadesi tek bir satışı değil, tüm bir faturalandırma dönemini geri alır. App Store'da Apple karar verir ve sunucunuz yalnızca sonucu öğrenir. Google Play'de tam ya da orantılı iadeyi kendiniz seçersiniz. İşte her mağazanın abonelik iadelerini nasıl ele aldığı ve bir iadenin size neye mal olduğu.