जरा सोचिए। एक कस्टमर आपका यानली प्लान खरीदता है, एक हफ्ते तक इसे इस्तेमाल करता है, फिर Apple से अपना पैसा वापस मांगता है। आपको इसका पता तब चलता है जब आपका पेआउट कम आता है। किसी ने आपसे कुछ नहीं पूछा। कम से कम ऐसा लगता है।
असल में, Apple अक्सर पूछता है। यह आपके सर्वर पर CONSUMPTION_REQUEST नाम का एक मैसेज भेजता है, और यह जानना चाहता है कि कस्टमर ने वास्तव में खरीदी हुई चीज़ का इस्तेमाल कैसे किया। अगर आपका सर्वर इसे सुन नहीं रहा, तो Apple आपके बिना ही फैसला ले लेता है। यह गाइड डेवलपर्स के लिए App Store रिफंड प्रोसेस को स्टेप-बाय-स्टेप समझाती है, और बताती है कि लोग कहां उलझ जाते हैं। iOS पर रिफंड डिफेंस को और बारीकी से समझने के लिए, RefundSensor का App Store रिफंड डिफेंस पेज भी यह जानकारी देता है।
संक्षिप्त जवाब
CONSUMPTION_REQUEST नोटिफिकेशन, Apple का वह तरीका है जिससे वह किसी कस्टमर के रिफंड रिक्वेस्ट करने पर यूसेज की जानकारी मांगता है। अगर कस्टमर ने डेटा शेयरिंग के लिए सहमति दी है, तो आपके सर्वर को 12 घंटे के भीतर Send Consumption Information Axz`PI को कॉल करना चाहिए और डिलीवरी व यूसेज की जानकारी देनी चाहिए। Apple उस जानकारी को तौलकर अंतिम फैसला लेता है। आप रिफंड को मंज़ूर नहीं कर सकते या नतीजे की गारंटी नहीं दे सकते।
Apple CONSUMPTION_REQUEST क्या है?
CONSUMPTION_REQUEST, App Store Server Notifications V2 में एक नोटिफिकेशन टाइप है। जब भी कोई कस्टमर रिफंड रिक्वेस्ट शुरू करता है, Apple इसे भेजता है, और यह हर प्रोडक्ट टाइप को कवर करता है: consumables, non-consumables, non-renewing subscriptions, और auto-renewable subscriptions।
इसे एक सवाल समझें, आदेश नहीं। Apple आपसे किसी को रिफंड देने के लिए नहीं कह रहा। यह बस पूछ रहा है कि आप क्या जानते हैं। अंतिम फैसला फिर भी Apple ही लेता है, और आपका जवाब उन चीज़ों में से एक है जिन्हें वह देखता है।
Apple का रिफंड वर्कफ़्लो कैसे काम करता है
यहां दो चीज़ें होती हैं, और लोग इन्हें मिला देते हैं। नोटिफिकेशन मिलना ऑटोमैटिक है। लेकिन consumption information वापस भेजना तभी होता है जब आपका सर्वर इसे करे।
कस्टमर Apple से रिफंड मांगता है।
Apple आपके V2 नोटिफिकेशन URL पर एक CONSUMPTION_REQUEST भेजता है।
आपका सर्वर यह चेक करता है कि क्या उस कस्टमर ने यूसेज डेटा शेयर करने की सहमति दी है।
अगर उसने सहमति दी है, तो आपका सर्वर 12 घंटे के भीतर consumption डिटेल्स भेजता है।
Apple अपना फैसला लेता है। अगर वह रिफंड मंज़ूर करता है, तो उसके बाद एक REFUND नोटिफिकेशन आता है।
स्टेप-बाय-स्टेप इम्प्लीमेंटेशन गाइड
यहां शुरू से लेकर आख़िर तक पूरा सेटअप दिया गया है।
अपना नोटिफिकेशन URL जोड़ें। App Store Connect में, अपने सर्वर का HTTPS URL डालें और Version 2 चुनें।
तेज़ी से जवाब दें। 200 से 206 के बीच का स्टेटस देकर जवाब दें। 40x या 50x मिलने पर Apple फिर से कोशिश करता है।
सिग्नेचर चेक करें। V2 पेलोड्स साइन किए हुए आते हैं। अंदर कुछ भी पढ़ने से पहले इसे वेरिफाई करें।
कस्टमर को खोजें। ट्रांजैक्शन को अपने डेटाबेस के किसी यूज़र से मैच करें।
सहमति जांचें। सहमति नहीं, तो जवाब नहीं।
API कॉल करें। App Store Server API रिक्वेस्ट के ज़रिए डेटा भेजें, जिसे App Store Connect की In-App Purchase key से ऑथेंटिकेट किया गया हो।
इसे लॉग करें। आपने क्या भेजा और कब भेजा, इसका रिकॉर्ड रखें।
एक डेवलपर के तौर पर Apple रिफंड रिक्वेस्ट का जवाब कैसे दें
हमेशा सहमति से शुरुआत करें। इसके बाद, Apple को बताएं कि वास्तव में क्या हुआ। यहां असली वैल्यू स्पेसिफिक और ईमानदार डेटा से आती है, इसलिए इसमें कोई बढ़ा-चढ़ाकर जानकारी न जोड़ें।
दो उदाहरण लें।
एक प्लेयर कॉइन पैक खरीदता है और एक दिन में ज़्यादातर इस्तेमाल कर लेता है। इस हैवी यूसेज की रिपोर्ट करें। Apple से रिफंड अस्वीकार करने के लिए कहना एक उचित प्राथमिकता है।
एक सब्सक्राइबर पूरे साल का पैसा देता है, लेकिन आपका सर्वर डाउन था और कंटेंट कभी लोड ही नहीं हुआ। रिपोर्ट करें कि यह डिलीवर नहीं हुआ। यहां, रिफंड देना ही ईमानदार जवाब हो सकता है।
आपकी रिफंड प्राथमिकता एक सुझाव है। Apple को इसे मानना ज़रूरी नहीं है।
Apple Send Consumption Information API की पूरी जानकारी
The Send Consumption Information endpoint एक PUT रिक्वेस्ट है जो ट्रांजैक्शन ID (/inApps/v2/transactions/consumption/{transactionId}) से जुड़ी होती है। CONSUMPTION_REQUEST आने के बाद आप इसे कॉल करते हैं, और Apple 12 घंटे के भीतर जवाब चाहता है।
बॉडी एक ConsumptionRequest ऑब्जेक्ट होती है जिसमें पांच फ़ील्ड्स होते हैं:
customerConsented: क्या कस्टमर ने डेटा शेयर करने के लिए सहमति दी? इसे true होना ज़रूरी है। नहीं तो Apple कॉल को HTTP 400 एरर के साथ रिजेक्ट कर देता है।
deliveryStatus: क्या आपके ऐप ने एक सही तरीके से काम करने वाली खरीदारी डिलीवर की?
sampleContentProvided: क्या आपने पहले कोई फ्री सैंपल या ट्रायल ऑफर किया था?
consumptionPercentage: कितना इस्तेमाल किया गया, milliunits में।
refundPreference: वह नतीजा जो आप चाहते हैं।
कुछ नियम लोगों को उलझा देते हैं। अगर deliveryStatus, DELIVERED नहीं है, तो consumptionPercentage को 0 सेट करें, नहीं तो रिक्वेस्ट फेल हो जाएगी। GRANT_PRORATED वाले auto-renewable subscription के लिए, consumptionPercentage को छोड़ दें, क्योंकि Apple इसे खुद ही निकाल लेता है। और सहमति की ज़िम्मेदारी आप पर है। Apple यह भी कहता है कि इसके लिए App Tracking Transparency प्रॉम्प्ट का इस्तेमाल न करें।
App Store Server Notifications V2 इंटीग्रेशन
App Store Server Notifications V2 ही वह तरीका है जिससे Apple आपके सर्वर तक पहुंचता है। आपको एक सिक्योर HTTPS URL चाहिए होगा जो TLS 1.2 या उसके बाद के वर्शन को सपोर्ट करता हो।
CONSUMPTION_REQUEST, कई टाइप्स में से बस एक है। बाकी, जैसे REFUND और REFUND_REVERSED, आपको बताते हैं कि कोई केस किस तरह खत्म हुआ। हर टाइप को अपना अलग हैंडलर दें, ताकि रिफंड कोड, रिन्यूअल कोड के साथ उलझे नहीं। App Store Connect साइड को एक्शन में देखना चाहते हैं? The Refund Sensor Apple setup guide में keys और नोटिफिकेशन URL को कवर किया गया है।
आम गलतियां जिनसे बचें
नोटिफिकेशन पर ही रुक जाना। जब तक आपका सर्वर डेटा वापस नहीं भेजता, CONSUMPTION_REQUEST कुछ नहीं करता।
सहमति को नज़रअंदाज़ करना। कस्टमर से सहमति नहीं मिली, तो जवाब नहीं।
12 घंटे की समय-सीमा चूक जाना। ये नोटिफिकेशन रात में और वीकेंड पर भी आते हैं। एक क्यू का इस्तेमाल करें और अलर्ट्स सेट करें।
ऐसे कॉम्बिनेशन भेजना जो काम नहीं करते। जो खरीदारी डिलीवर नहीं हुई, उस पर यूसेज पर्सेंटेज देने से रिक्वेस्ट फेल हो जाएगी।
सिग्नेचर चेक छोड़ना। पहले वेरिफाई करें, भरोसा बाद में।
देर से जवाब देना। जल्दी से एक सक्सेस कोड लौटाएं और भारी काम बैकग्राउंड में करें, वरना Apple बार-बार कोशिश करता रहेगा।
यूज़र को खोजने का कोई तरीका न होना। अगर आप किसी ट्रांजैक्शन को कस्टमर से नहीं जोड़ सकते, तो आपके पास रिपोर्ट करने के लिए कुछ भी असली नहीं है।
App Store रिफंड वर्कफ़्लो को ऑटोमेट कैसे करें
कोई भी 12 घंटे की घड़ी को हाथ से देखना नहीं चाहता। अगर आप App Store रिफंड वर्कफ़्लो को ऑटोमेट करना चाहते हैं, तो इस काम को छोटे-छोटे हिस्सों में बांट दें:
नोटिफिकेशन को स्वीकार करें और तुरंत एक सक्सेस कोड लौटाएं।
इवेंट को एक क्यू में डाल दें।
एक वर्कर इसे वेरिफाई करता है, यूज़र को खोजता है, और सहमति जांचता है।
वर्कर स्टोर किए गए यूसेज डेटा से रिक्वेस्ट बनाता है और API को कॉल करता है।
नतीजे को लॉग करें, और फेल होने पर किसी को अलर्ट करें।
इससे आपको लगातार सही जवाब मिलते हैं, एक साफ़ ऑडिट ट्रेल बनती है, और रात 3 बजे किसी को जागना नहीं पड़ता। आप इसे खुद बना सकते हैं, या इस पाइपलाइन को RefundSensor जैसी किसी सर्विस को सौंप सकते हैं।
डेवलपर्स के लिए बेस्ट प्रैक्टिसेज़
असली यूसेज डेटा स्टोर करें: सेशन्स, खर्च किए गए क्रेडिट्स, खोला गया कंटेंट। जो नंबर आपने कभी रखे ही नहीं, उनकी रिपोर्ट आप नहीं कर सकते।
अपने टर्म्स या ऑनबोर्डिंग में एक साफ़ सहमति स्टेप जोड़ें, और यह रिकॉर्ड करें कि यह कब दी गई थी।
अपने रिफंड रूल्स को एक बार लिख लें और उन्हें कोड में डाल दें, बजाय इसके कि हर केस में अलग से फैसला लें।
लाइव जाने से पहले सैंडबॉक्स नोटिफिकेशंस के साथ टेस्ट करें।
हर खरीदारी के साथ एक अकाउंट टोकन जोड़ें ताकि आप बाद में खरीदार की पहचान कर सकें। यह appAccountToken guide बताती है कि यह कैसे करें।
महीने में एक बार रिफंड के नतीजों की समीक्षा करें। अजीब स्पाइक्स किसी खराब फीचर या कन्फ्यूज़िंग पेवॉल की ओर इशारा कर सकते हैं।
निष्कर्ष
Apple का रिफंड वर्कफ़्लो दो हिस्सों में बंटा है। Apple CONSUMPTION_REQUEST भेजता है, और आप यह चुनते हैं कि जवाब देना है या नहीं। अगर कस्टमर ने सहमति दी है, तो 12 घंटे के भीतर Send Consumption Information API के ज़रिए ईमानदार डेटा भेजें। फैसला फिर भी Apple ही लेता है।
एक अच्छा पहला कदम: यह पुष्टि करें कि आपका V2 नोटिफिकेशन URL लाइव है और आपका सर्वर किसी ट्रांजैक्शन को यूज़र से मैच कर सकता है। ये दो चेक बाद में बहुत सारी सिरदर्दी से बचाते हैं।
अक्सर पूछे जाने वाले प्रश्न
यह एक V2 मैसेज है जो Apple तब भेजता है जब कोई कस्टमर रिफंड मांगता है। इसमें आपसे यूसेज की जानकारी मांगी जाती है।
Apple नोटिफिकेशन मिलने के 12 घंटे के भीतर जवाब मांगता है।
हां। इसके बिना जवाब न दें। जिस रिक्वेस्ट में customerConsented, true के अलावा कुछ और सेट होता है, उसे रिजेक्ट कर दिया जाता है।
जरूरी नहीं। Apple आपके डेटा का उपयोग अपना फैसला लेने के लिए करता है, लेकिन अंतिम फैसला वही करता है।
Consumables, non-consumables, non-renewing subscriptions, और auto-renewable subscriptions।



