Bekleyen bir satın alma satış gibi görünür, ama para gelmemiştir ve onu erken vermek ürünü bedavaya verir
Hem App Store hem de Google Play'de bekleyen bir satın alma durumu vardır, mağazanın kabul ettiği ama henüz tahsil etmediği bir sipariş. Ödeme netleşmeden önce açarsanız, düşen her biri saf maliyettir. İşte bekleyen satın almaların her mağazada nasıl çalıştığı, yanlış verilen birinin maliyeti ve sızdırmadan nasıl ele alınacağı.

Önemli noktalar
- Bekleyen bir satın alma, mağazanın kabul ettiği ama henüz tahsil etmediği gerçek bir sipariştir. Kodunuz yeni bir satın alma görür, ama para gelmemiştir ve hiç gelmeyebilir.
- Yetkiyi yalnızca Google Play'de durum PURCHASED olduğunda veya Apple'da işlem tamamlandığında verin. Asla bir PENDING durumunda ya da Apple'ın bekleyen sonucunda açmayın.
- Google Play'de bir mağazadaki nakit ödemeler, banka havaleleri ve bazı operatör faturalandırmaları ana akışın dışında netleşir, bu yüzden satın alma, müşteri gerçekten ödeyene kadar PURCHASED değil PENDING olarak döner.
- Apple'da bekleyen bir satın alma genellikle Ask to Buy'dır, bir aile düzenleyicisinin onaylaması gerekir. Onay saatler veya günler sürebilir ve tamamlanmış işlem daha sonra Transaction.updates üzerinden gelir.
- Sonradan iptal olan bekleyen bir siparişte açarsanız, hiç netleşmeyen bir tahsilat için işlem gücü, API çağrıları, depolama veya bir tüketilebilir ödemesi harcamış olursunuz. Bir iadenin aksine, geri alınacak para yoktur, çünkü hiç tahsil edilmemiştir.
- Mağaza, bekleyen bir sipariş düştüğünde size söyler. Google, ONE_TIME_PRODUCT_CANCELED, tip 2, ya da SUBSCRIPTION_PENDING_PURCHASE_CANCELED, tip 20 gönderir. Apple ise tamamlanmış bir işlemi hiç teslim etmez.
- Bekleyen bir sipariş, uygulamanız kapalıyken gerçek bir satışa dönüşebilir, bu yüzden dönüşte yeniden kontrol edin: Google Play'de onResume() içinde queryPurchasesAsync() çağırın ve Apple'da Transaction.updates dinlemeyi sürdürün.
Biri uygulamanızda satın al'a dokunur. Kayıtlarınız yeni bir sipariş gösterir, faturalandırma dinleyiciniz tetiklenir ve malı teslim edersiniz. Çoğu satın almada bu tam olarak doğrudur. Bekleyen bir satın almada ise bir hatadır, çünkü sipariş vardır ama para yoktur. Müşteri daha sonra netleşen bir ödeme yöntemi seçmiştir, mağaza hâlâ ödenmeyi bekliyordur ve siz henüz gelmemiş, belki de hiç gelmeyecek bir tahsilat için ücretli bir özelliği teslim etmiş olursunuz. Bu, iadenin sessiz kuzenidir. Burada hiçbir şey geri alınmaz, çünkü hiçbir şey tahsil edilmemiştir. Ürünü sadece bedavaya vermiş olursunuz.
Bekleyen bir satın alma, henüz ödenmemiş durumda gerçek bir sipariştir ve hem App Store'da hem de Google Play'de vardır. İki mağaza da açıkça beklemenizi söyler. Tuzak şu ki, bekleyen bir sipariş kodunuzda tamamlanmış bir siparişe neredeyse tıpatıp benzer, bu yüzden her yeni satın almayı bir satış olarak gören bir entegrasyon, mağazanın hâlâ tahsil etmeye çalıştığı siparişlerde malı gönderir. Doğru ele alırsanız hiçbir şey kaybetmezsiniz. Yanlış ele alırsanız, düşen her yavaş ödeme saf maliyettir, sizin cebinizden teslim edilir.
Bekleyen bir satın alma aslında nedir
Bekleyen bir satın alma, mağazanın kaydettiği ama henüz tahsil etmediği bir sipariştir. Alıcı akışı başlatmıştır, mağaza kabul etmiştir ve netleşme, uygulamanızın göremediği bir yerde olmaktadır. Google Play buna PENDING durumu der. Apple buna bekleyen ya da ertelenmiş işlem der. Farklı adlar, aynı gerçek: mağaza, ödenmeyi beklerken bir siparişi açık tutar ve size o siparişi para olarak görmemenizi söylemiştir.
Google Play: ödeme başka bir yerde gerçekleşiyor
Bazı ödeme yöntemleri ana akışın dışında netleşir. Fiziksel bir mağazada nakit, banka havaleleri ve bazı operatör faturalandırmaları, dokunuş ile tahsilat arasında ek adımlar gerektirir. Müşteri bunlardan birini seçtiğinde, Google satın almayı PURCHASED yerine PENDING durumunda döndürür. Nakit ödemede müşteri bir bildirim ve e-posta ile bir kod alır, onu katılımcı bir mağazaya götürür ve kasiyere öder. Bu olana kadar Google hiçbir şey tahsil etmemiştir, siz de. Google'ın kuralı tek satırdır: getPurchaseState() kullanın ve yetkiyi yalnızca durum PURCHASED olduğunda verin. Ayrıca bir satın almayı PENDING iken onaylamamanızı söyler, çünkü onaylama vaat edilmiş değil ödenmiş bir siparişe aittir.
Apple: satın alma başkasının dokunuşunu bekliyor
Apple'ın bekleyen durumu, işlemin tamamlanabilmesi için harici bir eylem gerektiğini gösterir. En yaygını Ask to Buy'dır, bir çocuk bir satın alma başlatır ve bir aile düzenleyicisinin onaylaması gerekir. StoreKit 2'de satın alma çağrısı Product.PurchaseResult.pending döndürür. Eski StoreKit'te işlem ertelenmiş (deferred) olarak bildirilir. Her iki durumda da Apple kimseyi tahsil etmemiştir ve gelirse tamamlanmış işlem, asenkron olarak Transaction.updates üzerinden gelir. Müşteriye bir bekleme durumu gösterin ve tamamlanmış işlem gelene kadar hiçbir şey açmayın.
Bekleyen bir satın almayı vermek neden size gerçek para kaybettirir
Buradaki kayıp, kaydettiğiniz paranın geri çekildiği iade türü değildir. Belirli bir şekilde daha kötüdür: geri çekilecek para yoktur, çünkü hiç tahsil edilmemiştir.
Siz teslim edersiniz, mağaza ise hiç tahsil etmez
Sonradan iptal olan bekleyen bir siparişte açtığınızda, ona hizmet etmek için zaten harcama yapmışsınızdır. Özelliği çalıştıran işlem gücü, ödediğiniz üçüncü taraf API çağrıları, ayırdığınız depolama ve bir tüketilebilir için sattığınız şeyin gerçek ödemesi. Bütün bunlar, hiç gelir üretmeyen bir sipariş için gider. Bir iade en azından gerçekleşmiş bir tahsilatla başlar. Yanlış verilen bekleyen bir satın almanın hiç tahsilatı olmamıştır, bu yüzden çıkan para olarak bile görünmez. Hiçbir şey olarak görünür, ki tam da bu yüzden gözden kaçması ve tekrarlanması kolaydır.
İptal sinyali ve ne anlama geldiği
Mağaza, bekleyen bir sipariş öldüğünde size söyler. Google Play'de düşen tek seferlik bir ürün, ONE_TIME_PRODUCT_CANCELED bildirimi, tip 2, gönderir ve bekleyen bir abonelik SUBSCRIPTION_PENDING_PURCHASE_CANCELED, tip 20, gönderir. Aynı siparişler bunun yerine geçtiğinde, ONE_TIME_PRODUCT_PURCHASED, tip 1, ya da SUBSCRIPTION_PURCHASED, tip 4, alırsınız. Apple'da yakalanacak bir iptal olayı yoktur, çünkü reddedilen ertelenmiş bir işlem, tamamlanmış bir işleme asla dönüşmez. Erken açtıysanız, o sessizlik faturadır.
| Soru | Google Play | Apple |
|---|---|---|
| Onu ne tetikler | Nakit, banka havalesi, bazı operatör faturalandırması | Ask to Buy onayı ya da başka bir gerekli eylem |
| Gördüğünüz durum | PurchaseState PENDING | pending sonucu ya da ertelenmiş bir işlem |
| Erişimi ne zaman verin | Durum PURCHASED olduğunda | İşlem tamamlandığında |
| Geçti | ONE_TIME_PRODUCT_PURCHASED (1), SUBSCRIPTION_PURCHASED (4) | Transaction.updates üzerinden tamamlanmış işlem |
| Düştü | ONE_TIME_PRODUCT_CANCELED (2), SUBSCRIPTION_PENDING_PURCHASE_CANCELED (20) | Tamamlanmış işlem hiç gelmez |
| Para tahsil edildi mi | Hayır, PURCHASED olana kadar | Hayır, işlem tamamlanana kadar |
Pencere ve kim kimi bekliyor
Bekleyen bir satın alma, yarıştığınız bir saat değildir. Sizin tarafınızdan henüz başlamamış bir saattir.
Google Play müşteriye dakika değil gün verir
Nakit ya da banka havalesi ödemesi, sizin değil müşterinin takvimine göre netleşir. Sipariş, müşteri ödeyene ya da pencere dolup Google iptal edene kadar PENDING içinde bekler. Onaylamadığınız bir satın almayı otomatik iade eden kendi üç günlük onaylama pencereniz, satın alma PENDING'ten PURCHASED'a geçene kadar başlamaz bile. Yani bekleyen bir siparişe hizmet etmek için acele yoktur. Yalnızca durumun değişmesini bekleme disiplini vardır.
Apple'ın onayı aile düzenleyicisinin telefonundadır
Bir Ask to Buy isteği, düzenleyicinin cihazına, ne zaman fırsat bulursa onayladığı ya da reddettiği bir istem olarak gelir. Bu dakikalar, saatler ya da bir gün sonra olabilir ve uygulamanız bunu hızlandıramaz. Tek doğru davranış, bekleme durumunu yansıtmak ve onay gelirse StoreKit'in size tamamlanmış işlemi vermesine izin vermektir.

Bekleyen satın almaları sızdırmadan nasıl ele almalı
İşin tamamı dört alışkanlığa iner. Hiçbiri zor değildir ve herhangi birini atlamak, paranın gittiği yerdir.
Ödenmiş durumda verin, asla bekleyen durumda değil
Google Play'de getPurchaseState() kontrol edin ve yalnızca PURCHASED'da verin, ve bir satın almayı PENDING iken onaylamayın. Apple'da yalnızca tamamlanmış bir işlemde açın ve asla bekleyen sonuçta değil. Bu tek kural sızıntının tamamını kapatır. Geri kalan her şey, ödenmiş durum geldiğinde bunu gerçekten fark etmenizi sağlamakla ilgilidir.
Uygulama geri döndüğünde yeniden kontrol edin
Bekleyenden ödenmişe geçiş çoğu zaman uygulamanız çalışmıyorken olur. Google Play'de, arka planda PURCHASED olan siparişleri almak için onResume() işleyicinizde queryPurchasesAsync() çağırın ve sunucu tarafı doğru kaynağı olarak Real-time Developer Notifications dinleyicinizi koruyun. Apple'da, uygulamanın tüm ömrü boyunca Transaction.updates dinleyin, çünkü onaylanmış bir işlem, orijinal satın alma çağrısı döndükten çok sonra gelebilir.
Bekleyen desteğini etkinleştirin ve iki sonucu da test edin
Google, BillingClient'ı oluştururken enablePendingPurchases() çağırmanızı gerektirir ve tek seferlik ürünler için bekleyen işlemleri desteklemek isteğe bağlı değil, zorunludur. Göndermeden önce test edin. Lisans test kullanıcıları, ödemenin birkaç dakika sonra otomatik olarak tamamlandığı ya da otomatik olarak iptal edildiği gecikmeli ödeme biçimleri için iki ek test aracı alır, böylece hem ödeme yolunu hem de düşme yolunu baştan sona izleyebilirsiniz.
Müşteriye siparişin bitmediğini söyleyin
Bekleyen bir alıcı, bir başarısızlık değil, satın almanın ortasındaki gerçek bir müşteridir. Ona siparişin ödemesini ya da bir onayı beklediğini gösterin ve onu tamamlamak için net bir dönüş yolu verin. Sessiz bir bekleme durumu, iyi etiketlenmiş birinin geri kazandığı satışları kaybeder, çünkü bu alıcıların çoğu hâlâ o şeyi ister ve yalnızca bir adımları kalmıştır.
RefundHalt'ın iadeler ve ters ibrazlar için zaten okuduğu aynı Real-time Developer Notifications ve App Store Server Notifications akışları, bu sinyalleri de taşır. Bekleyen bir siparişin sonunda netleştiğini söyleyen satın alındı bildirimi ve netleşmediğini söyleyen iptal bildirimi, gelir olaylarınızın geri kalanının yanında panonuza düşer, böylece düşen bir bekleyen sipariş, yanlışlıkla ödediğiniz bir şey yerine görebileceğiniz bir şey olur.
Kısaca
Bekleyen bir satın alma, ödemesi olmayan bir sipariştir ve iki mağaza da beklemeniz gerektiğini açıkça belirtir. Google Play, nakit, banka havalesi ve bazı operatör faturalandırması siparişlerini PENDING durumunda döndürür ve erişimi yalnızca PURCHASED'da vermenizi söyler. Apple, Ask to Buy ve diğer gerekli eylemler için bekleyen ya da ertelenmiş bir işlem döndürür ve tamamlanmış işlemi daha sonra Transaction.updates üzerinden teslim eder. Ödenmiş durumda açın, uygulamanız devam ettiğinde yeniden kontrol edin, bekleyen desteğini etkinleştirip test edin ve bekleyen siparişi müşteri için etiketleyin. Bunu yapın, bekleyen bir satın alma size hiçbir şeye mal olmaz. Atlayın, hiç gelmeyen bir tahsilat için ücretli bir ürün teslim edersiniz, ki bu, gösterecek makbuzu olmayan tek kayıptır.
Sık sorulan sorular
- Bekleyen bir satın alma nedir?
- Bekleyen bir satın alma, mağazanın kabul ettiği ama henüz tahsil etmediği bir sipariştir. Google Play'de bu, nakit, banka havalesi ve bazı operatör faturalandırması gibi daha sonra netleşen ödeme yöntemleri için kullanılan PENDING satın alma durumudur. Apple'da bu, bekleyen ya da ertelenmiş bir işlemdir, çoğu zaman bir aile düzenleyicisinin onayını bekleyen bir Ask to Buy satın alması. Her iki durumda da henüz para tahsil edilmemiştir, bu yüzden erişim vermemelisiniz.
- Bir satın alma beklerken erişim vermeli miyim?
- Hayır. Yetkiyi yalnızca Google Play'de durum PURCHASED olduğunda veya Apple'da işlem tamamlandığında verin. Sipariş hâlâ beklerken bir özelliği açar ve ödeme hiç netleşmezse, ürünü bedavaya teslim etmiş olursunuz ve geri alınacak bir tahsilat yoktur çünkü hiç yapılmamıştır.
- Google Play'de hangi ödeme yöntemleri bekleyen bir satın almaya neden olur?
- Ana akışın dışında netleşen ödeme yöntemleri. Fiziksel bir mağazadaki nakit ödemeler, banka havaleleri ve bazı operatör faturalandırması seçenekleri, dokunuş ile tahsilat arasında ek adımlar gerektirir, bu yüzden Google satın almayı PURCHASED yerine PENDING durumunda döndürür. Nakit ödemede müşteri bir bildirim ve e-posta ile bir kod alır, sonra katılımcı bir mağazada öder.
- Ask to Buy nedir ve bekleyen satın almalarla ilişkisi nedir?
- Ask to Buy, Apple'ın bir çocuğun, bir aile düzenleyicisinin onaylaması gereken bir satın alma isteği göndermesini sağlayan Family Sharing özelliğidir. İstek beklerken, satın alma Apple'ın bekleyen durumundadır, StoreKit 2'de Product.PurchaseResult.pending olarak ya da eski StoreKit'te ertelenmiş bir işlem olarak döner. Tamamlanmış işlem, yalnızca ve düzenleyici onayladığında, Transaction.updates üzerinden gelir.
- Bekleyen bir satın alma hiç ödenmezse ne olur?
- Sipariş iptal edilir ve para el değiştirmez. Google Play'de tek seferlik bir ürün için ONE_TIME_PRODUCT_CANCELED bildirimi, tip 2, ya da bir abonelik için SUBSCRIPTION_PENDING_PURCHASE_CANCELED, tip 20, alırsınız. Apple'da, ertelenmiş işlem tamamlanmış bir işleme asla dönüşmez. Erişimi zaten verdiyseniz, kaybın gerçekleştiği an odur.
- Bekleyen bir satın alma iade ile aynı şey mi?
- Hayır. Bir iade, gerçekten tahsil edilmiş bir ödemeyi geri çevirir. Düşen bekleyen bir satın alma en başta hiç tahsil edilmemiştir, bu yüzden geri çevrilecek bir şey yoktur ve bir iade raporunda hiçbir şey görünmez. Onu erken açtıysanız, maliyet, gelir üretmeyen bir siparişe hizmet ederken harcadığınız işlem gücü, API çağrıları, depolama ya da tüketilebilirdir.
Kaynaklar ve ek okumalar
- Android Developers: Integrate the Google Play Billing Library (PENDING purchase state, grant entitlement only on PURCHASED, enablePendingPurchases, queryPurchasesAsync, cash payment code flow, three-day acknowledgement window begins on transition to PURCHASED)
- Android Developers: Real-time developer notifications reference (OneTimeProductNotification ONE_TIME_PRODUCT_PURCHASED=1 and ONE_TIME_PRODUCT_CANCELED=2; SubscriptionNotification SUBSCRIPTION_PURCHASED=4 and SUBSCRIPTION_PENDING_PURCHASE_CANCELED=20)
- Android Developers: Test Google Play Billing (license testers get delayed-payment test instruments that auto-complete or auto-cancel for testing pending transactions)
- Apple Developer: Product.PurchaseResult (the pending case, returned when a purchase needs action such as Ask to Buy approval before it completes)
- Apple Developer: SKPaymentTransactionState.deferred (a transaction whose final status is pending an external action such as Ask to Buy)
- Apple Developer: Transaction.updates (StoreKit delivers transaction updates, including ones approved later, asynchronously)
RefundHalt
App Store ve Google Play için geri ödeme otomatik pilotu
Okumaya devam edin
Yenilemeler müşterilerin iptalinden daha sık başarısız olur ve bu istem dışı kayıp hâlâ geri kazanabileceğiniz gelirdir
Aboneliklerin büyük bir bölümünü iptal dokunuşu değil, reddedilen bir kart sonlandırır ve mağaza haftalarca tahsilat denemeye devam eder. İşte App Store ve Google Play'de faturalama ödemesiz dönemi, faturalama yeniden denemesi ve hesap beklemesinin nasıl işlediği ve istem dışı kaybın size gerçekte neye mal olduğu.
Çocukların yaptığı yetkisiz uygulama içi satın almalar neredeyse her seferinde ebeveyne iade edilir ve maliyeti siz üstlenirsiniz
Bir çocuk ebeveynin telefonunda bir jeton paketi satın aldığında, hem Apple hem de Google bunu iade eder ve ikisi de önce size sormaz. Düzenleyiciler bunu böyle kurdu. İşte bu yetkisiz uygulama içi satın alma iadelerinin her mağazada nasıl işlediği, paranın gittiği 15 dakikalık pencere ve bir tanesinin size gerçekte neye mal olduğu.