Tüm makaleler
Playbook8 dk okuma

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.

Karanlık bir masada büyüteç altında bir iPhone ve bir Android telefon, uygulama içi satın alma geri ödemelerini gerçek olmadan önce test etmeyi temsil ediyor

Ö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.

OrtamNeyi tetikleyebilirNeyi kanıtlarNeyi yapamaz
Xcode'da StoreKit testiTransaction Manager veya beginRefundRequest sayfası aracılığıyla bir geri ödemeUygulamanız bir geri ödemeye yerel olarak, saniyeler içinde tepki verirAsla Apple ile iletişime geçmez, bu yüzden hiçbir sunucu bildirimi gönderilmez
SandboxSunucunuza gerçek REFUND ve CONSUMPTION_REQUEST, artı istek üzerine bir TEST bildirimiArka ucunuz imzalı payload'ı alır, doğrular ve buna göre hareket ederUç noktanızın alamadığı bir bildirimi yeniden denemez
ÜretimHer geri ödeme, gerçek para karşılığıBurada ilk olarak öğrenmek isteyeceğiniz hiçbir şey yokBir 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 TEST payload'ı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 revocationDate ayarlandığı 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_REQUEST aldığı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 REFUND bildiriminin 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.
Yanında cımbız olan bir çalışma lambası altında küçük bir tezgah mengenesinde tutulan bir akıllı telefon, test altındaki bir cihaz, gerçek olmadan önce bir geri ödemeyi prova etmeyi temsil ediyor

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öntemiNeyi simüle ederNeden kullanırsınız
Test instrument, always approvesTemiz, başarılı bir satın almaSonra geri ödeyebileceğiniz veya iptal edebileceğiniz bir sipariş kurun
Test instrument, always declinesBaşarısız bir ödemeBir reddetmede hiçbir şey vermediğinizi onaylayın
Slow test card, approves after a few minutesSonradan başarılı olan bekleyen bir satın almaErişim vermeden önce PENDING işlemenizi çalıştırın
Slow test card, declines after a few minutesSonradan başarısız olan bekleyen bir satın almaBekleyen bir reddetmenin asla hak sahipliği sızdırmadığını onaylayın
Test card, approves then charges backKullanıcı tarafından başlatılan bir ters ibrazBir 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 PendingRefundReviewNotification biraz sonra Real-time Developer Notifications konunuza düşer. Ona tek bir orders.reviewrefund çağrısıyla yanıt verin, çünkü Google yalnızca ilk yanıtınızı saklar.
  • Bir VoidedPurchaseNotification tetiklemek 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 olurSize neye mal olur
REFUND işleyiciGeri ödeme yapılmış bir kullanıcı erişimi korurOna 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 revocationDate gösterdiği anda erişimi bırakır, Xcode'un Transaction Manager'ında onaylanmış.
  • Sandbox sunucu URL'niz bir TEST bildirimi alır ve onu Apple'ın sertifikalarına karşı doğrular.
  • Bir sandbox REFUND eriş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 bir orders.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

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.