Android: InApp खरीद रसीद सत्यापन Google Play


92

मैं अपने भुगतान गेटवे के लिए Google बटुआ का उपयोग कर रहा हूं, उत्पाद Google को खरीदने के बाद मुझे नीचे प्रतिक्रिया दे रहा है

{ 
 "orderId":"12999763169054705758.1371079406387615", 
 "packageName":"com.example.app",
 "productId":"exampleSku",
 "purchaseTime":1345678900000,
 "purchaseState":0,
 "developerPayload":"bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ",
 "purchaseToken":"rojeslcdyyiapnqcynkjyyjh"
 }

मैं रसीद वैधता का उपयोग करने की कोशिश कर रहा हूं जो Google ने नए रूप से चलाया है। Google डेवलपर कंसोल में मैंने अनुमति में सेवा खाते द्वारा प्रमाणपत्र कुंजी बनाई है । लेकिन मैं भ्रमित हूं कि Google Play-store से उत्पाद खरीदने के बाद रसीद सत्यापन का उपयोग कैसे किया जाए।

कर सकते हैं किसी को भी इसलिए कृपया मेरी मदद कैसे करना है रसीद मान्यता की InAppखरीद।


हैलो बिनिल, क्या आपने इसे सदस्यता खरीद के लिए पूरा किया है?
अंशुल त्यागी

इसके प्रबंधन उत्पाद @ अनशुल त्याग
बिनिल सुरेंद्रन

@BinilSurendran .. मेरा प्रश्न आपके प्रश्न से अलग है, लेकिन मुझे उस ईमेल आईडी को जानना होगा जो इन-ऐप खरीदारी के लिए उपयोग की गई थी। क्या आप मदद कर सकते हैं कि मैं उस ईमेल को कैसे प्राप्त कर सकता हूं, जैसा कि मुझे अपने ऐप में आगे के संदर्भ के लिए इसकी आवश्यकता है
पल्लवी

@Pallavi। क्षमा करें, मेरे पास खरीदार ईमेल आईडी प्राप्त करने का विचार नहीं है। खरीद के बाद Google द्वारा दी गई प्रतिक्रिया के रूप में कोई ईमेल_ नहीं है
बिनिल सुरेंद्रन

जवाबों:


216

Google Google Play Developer API के माध्यम से रसीद सत्यापन प्रदान करता है , एपीआई के भीतर दो एंडपॉइंट हैं जो आप में सबसे अधिक रुचि रखते हैं: Purchase.products: get और Purchase.subsults: get

Purchases.products: getएक गैर-ऑटो-नवीनीकरण उत्पाद खरीद को सत्यापित करने के लिए इस्तेमाल किया जा सकता है, जहां उत्पाद नवीनीकरण की Purchases.subscriptions: getपुष्टि और पुन: सत्यापन करने के लिए है।

या तो endpoint आपको पता होना चाहिए का उपयोग करने के packageName, productId, purchaseTokenइन सभी का पेलोड आप खरीद पर प्राप्त में पाया जा सकता। आपको access_tokenGoogle API सेवा खाता बनाकर भी मिल सकता है।

सेवा खाते के साथ आरंभ करने के लिए सबसे पहले Google play Developer कंसोल API एक्सेस सेटिंग पेज पर जाएं और नया प्रोजेक्ट बनाएं बटन पर क्लिक करें:

एक नया Google API प्रोजेक्ट बनाएं

अब आपको सेवा खाता अनुभाग में एक नया लिंक्ड प्रोजेक्ट और कुछ नए अनुभाग देखने चाहिए, सेवा खाता बनाएं बटन पर क्लिक करें।

एक नया सेवा खाता बनाएँ

आपको अपना सेवा खाता बनाने के निर्देशों के साथ एक सूचना बॉक्स के साथ प्रस्तुत किया जाएगा। Google डेवलपर्स कंसोल के लिंक पर क्लिक करें और एक नया टैब स्पॉन होगा।

Google डेवलपर्स कंसोल खोलें

अब Create New Client ID पर क्लिक करें, विकल्पों में से Service account चुनें और Create Client ID पर क्लिक करें।

एक नई क्लाइंट आईडी बनाएं

एक JSON फ़ाइल डाउनलोड होगी, यह आपकी JSON वेब टोकन है जिसे आप access_tokenसुरक्षित रखने के लिए विनिमय के लिए उपयोग करेंगे ।

इसके बाद, Google play Developer कंसोल पर वापस टैब स्विच करें और जानकारी बॉक्स में Done पर क्लिक करें। आपको सूची में अपना नया सेवा खाता देखना चाहिए। सेवा खाते के ईमेल के बगल में स्थित अनुदान पर क्लिक करें।

पहुँच प्रदान करें

इस उपयोगकर्ता के लिए एक भूमिका चुनें के तहत, वित्त का चयन करें और उपयोगकर्ता जोड़ें पर क्लिक करें।

वित्त की भूमिका निर्धारित करें

अब आपने अपना सेवा खाता खोल दिया है और रसीद सत्यापन करने के लिए सभी आवश्यक पहुँच है। अगला अप आपके JWT को access_token के लिए एक्सचेंज कर रहा है।

access_tokenविनिमय के एक घंटे के बाद की समय सीमा समाप्त होने के बाद आपको इसे संभालने के लिए कुछ सर्वर कोड की आवश्यकता होती है और Google ने इसे संभालने के लिए कई भाषाओं में कई लाइब्रेरी प्रदान की हैं (सूची संपूर्ण नहीं):

मैं विस्तार में नहीं जाना होगा कि कैसे इन पुस्तकालयों का उपयोग करने के बारे में दस्तावेज के लिए बहुत कुछ है क्योंकि वहाँ है, लेकिन मैं आप उपयोग करना चाहते उल्लेख होगा https://www.googleapis.com/auth/androidpublisher, OAuth2 गुंजाइश के रूप में client_emailजेडब्ल्यूटी से के रूप में issuerऔर सार्वजनिक कुंजी आप से प्राप्त कर सकते हैं private_keyऔर पासफ़्रेज़ notasecretका उपयोग किया जाएगा signing_key

एक बार आपके पास access_tokenजाने के लिए अच्छा है (कम से कम अगले घंटे के लिए जिस बिंदु पर आप उपरोक्त पैराग्राफ में उसी प्रक्रिया का पालन करके एक नया अनुरोध करना चाहेंगे)।

एक उपभोज्य (गैर-ऑटो-नवीनीकरण) खरीद की स्थिति की जांच करने के लिए एक http getअनुरोध करें:https://www.googleapis.com/androidpublisher/v2/applications/com.example.app/purchases/products/exampleSku/tokens/rojeslcdyyiapnqcynkjyyjh?access_token=your_access_token

यदि आपको 200 http प्रतिक्रिया कोड मिलता है, तो सब कुछ योजना के अनुसार हुआ और आपकी खरीद वैध थी। 404 का अर्थ होगा कि आपका टोकन अमान्य है, इसलिए खरीदारी में धोखाधड़ी का प्रयास सबसे अधिक था। एक 401 का मतलब है कि आपकी पहुंच टोकन अमान्य है और 403 का मतलब होगा कि आपके सेवा खाते में अपर्याप्त पहुंच है, जांचें कि आपने Google Play डेवलपर कंसोल में एक्सेस खाते के लिए वित्त सक्षम किया है।

200 की प्रतिक्रिया इस तरह दिखाई देगी:

{
  "kind": "androidpublisher#productPurchase",
  "purchaseTimeMillis": long,
  "purchaseState": integer,
  "consumptionState": integer,
  "developerPayload": string
}

प्रत्येक संपत्ति की व्याख्या के लिए https://developers.google.com/android-publisher/api-ref/purchases/products देखें

सदस्यताएं समान हैं लेकिन समापन बिंदु इस तरह दिखता है:

https://www.googleapis.com/androidpublisher/v2/applications/packageName/purchases/subscriptions/subscriptionId/tokens/token?access_token=you_access_token

और प्रतिक्रिया में ये गुण होने चाहिए:

{
  "kind": "androidpublisher#subscriptionPurchase",
  "startTimeMillis": long,
  "expiryTimeMillis": long,
  "autoRenewing": boolean
}

देखें https://developers.google.com/android-publisher/api-ref/purchases/subscriptions संपत्ति विवरण और ध्यान दें कि के लिए startTimeMillisऔर expiryTimeMillisविषय सदस्यता की अवधि के आधार पर बदलने के लिए किया जाएगा।

खुश वैध!


मैं डेवलपर कंसोल में एक नया उपयोगकर्ता जोड़ता हूं और मुझे एक JSON प्रमाण पत्र मिला है जो कंसोल से मिलता है। क्या आप कृपया मुझे डाउनलोड की गई फ़ाइल @Marc Greenstock
Binil Surendran

@BinilS आपको अधिक विशिष्ट होने की आवश्यकता होगी, आप किस सर्वर-साइड भाषा में अपना कोड लिख रहे हैं?
मार्क ग्रीनस्टॉक

अमरूद का उपयोग सर्वर साइड @Marc Greenstock
Binil Surendran

3
यह पहली बार है जब मैंने खोज के 2 दिनों में सर्वर भुगतान सत्यापन को लागू करने के लिए एक विस्तृत मार्गदर्शिका देखी है। थम्स अप। कहीं सर्वर कोड का उपयोग करने के लिए तैयार है? मुझे यह बहुत अजीब लगता है कि मुझे कहीं भी ऐसा कुछ नहीं मिल रहा है
बेनामी

2
@MarcGreenstock विस्तृत जवाब के लिए धन्यवाद।
लवकुश

28

मार्क का जवाब बेहतरीन है। मैं केवल यह जोड़ूंगा कि जावा के लिए Google Play डेवलपर API क्लाइंट लाइब्रेरी आपके सर्वर से Google Play सर्वर से कनेक्ट करते समय इसे बहुत सरल बनाता है। पुस्तकालय स्वतः ही टोकन को ताज़ा करने का काम करता है और आपको एक प्रकार का एपीआई भी प्रदान करता है ताकि आपको URL के साथ चक्कर न लगाना पड़े।

यहां बताया गया है कि आपने Publisherसिंगलटन को कैसे सेट किया है :

httpTransport = GoogleNetHttpTransport.newTrustedTransport();
jsonFactory = JacksonFactory.getDefaultInstance();      
credential = GoogleCredential.fromStream(getClass().getResourceAsStream("/path/to/your/key.json")).createScoped(Collections.singleton(AndroidPublisherScopes.ANDROIDPUBLISHER));
publisher = new AndroidPublisher.Builder(httpTransport, jsonFactory, credential).setApplicationName(APP_NAME).build();

निम्नलिखित कोड एक उत्पाद खरीद पर सवाल उठाता है:

ProductPurchase product = publisher.purchases().products().get(PACKAGE_NAME, sku, token).execute();
Integer purchaseState = product.getPurchaseState();
product.getPurchaseTimeMillis();
product.getConsumptionState();
product.getDeveloperPayload();

आप इसी तरह सदस्यता के लिए क्वेरी कर सकते हैं:

SubscriptionPurchase sub = publisher.purchases().subscriptions().get(PACKAGE_NAME, sku, token).execute();
sub.getAutoRenewing();
sub.getCancelReason();
...

यह एक जावा सर्वर पर कोड है, या एक मनमाना सर्वर को कॉल करने से पहले एंड्रॉइड पर निष्पादित किया जाता है?
यूजर

2
@jeshurun ​​कोड के लिए धन्यवाद। अन्य पाठकों के लिए APP_NAME = APP_PACKAGE_NAME
बर्फ़ीला तूफ़ान

1
अजगर के बारे में क्या?
बबकेन वर्दयान

1
धन्यवाद! मेरे बजाय मेरे लिए getClass().getResourceAsStream(...इस्तेमाल किया new FileInputStream(...
एंटोनियो अल्मेडा

धन्यवाद। बहुत उपयोगी। हालांकि, मुझे जोड़ने की भी जरूरत है: credential.refreshToken();क्रेडेंशियल और प्रकाशक पाने के बीच।
19 '

5

@ marc-greenstock ने शानदार जवाब दिया, हालाँकि, Google Play Android डेवलपर API का उपयोग करके रसीद सत्यापन के बारे में एक बहुत महत्वपूर्ण बात है।

यदि आपको इस API का उपयोग करने में कोई समस्या है और आपने अपने इन-ऐप उत्पाद को अनुमति देने या अपने सेवा खाते से लिंक करने से पहले जोड़ा है, तो आपको "इन-ऐप उत्पाद" खोलने और कुछ अपडेट करने की आवश्यकता है। आप उदाहरण के लिए अपने उत्पाद का विवरण संपादित कर सकते हैं और बचा सकते हैं। आपको तुरंत अनुमति मिलनी चाहिए।

मैंने कुछ घंटे बिताते हुए सोचा कि मैंने क्या गलत किया है ...


2

यह उत्तर उत्कृष्ट है। दिशा का पालन करते हुए हम एक और समस्या यह है कि सेवा खाता Google Play कंसोल में नहीं दिखा था। हमने सहायता के लिए इस समाधान को ढूंढना समाप्त कर दिया: सृजन के बाद सेवा खाता Google कंसोल में दिखाई नहीं देता है

मूल रूप से, Google API कंसोल पर IAM पर जाएं और नया सेवा खाता जोड़ें, फिर यह Google Play कंसोल पर दिखाई देगा। स्क्रीनशॉट


क्या आप यहाँ विवरण जोड़ सकते हैं यदि लिंक रद्द कर दिया गया है तो एक बार आपका उत्तर अमान्य हो जाता है
मैथ्यू सनी

1
जोड़े गए खाते की भूमिका क्या होनी चाहिए?
आदि
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.