Android: validasi tanda terima pembelian dalam aplikasi google play

92

Saya menggunakan dompet google untuk gateway pembayaran saya, setelah membeli produk google memberi saya tanggapan di bawah itu

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

Saya mencoba menggunakan Validasi Tanda Terima yang baru saja diperkenalkan oleh google play. Di konsol Pengembang Google saya membuat kunci sertifikat dengan Akun Layanan di Izin. Tetapi saya bingung bagaimana menggunakan Validasi Tanda Terima setelah membeli Produk dari Google Play-store.

Jadi bisa siapa saja tolong bantu saya bagaimana melakukan validasi Penerimaan dari InAppPembelian.

Binil Surendran
sumber
Halo Binil, sudahkah Anda menyelesaikannya untuk pembelian langganan?
Anshul Tyagi
mengelola produk @Anshul Tyag
Binil Surendran
@BinilSurendran .. Pertanyaan saya berbeda dengan pertanyaan Anda, tetapi saya perlu mengetahui id email yang digunakan untuk pembelian dalam aplikasi. bisakah Anda membantu bagaimana saya bisa mendapatkan email itu, karena saya membutuhkannya untuk referensi lebih lanjut di aplikasi saya
Pallavi
@Tokopedia maaf, saya tidak punya ide untuk mendapatkan id email pembeli. sebagai respon yang diberikan oleh google setelah pembelian tidak memiliki email_id
Binil Surendran

Jawaban:

216

Google memberikan validasi tanda terima melalui Google Play Developer API , dalam API ada dua titik akhir yang paling Anda minati: Purchases.products: get dan Purchases.subscriptions: get .

Purchases.products: getdapat digunakan untuk memverifikasi pembelian produk yang tidak diperpanjang secara otomatis, di mana Purchases.subscriptions: getuntuk memverifikasi dan memverifikasi ulang langganan produk yang diperpanjang secara otomatis.

Untuk menggunakan endpoint Anda harus tahu packageName, productId, purchaseTokensemua ini dapat ditemukan dalam payload yang Anda terima pada pembelian. Anda juga membutuhkan access_tokenyang bisa Anda dapatkan dengan membuat akun layanan API Google.

Untuk memulai dengan akun layanan, pertama-tama buka laman setelan akses API konsol Pengembang Google play dan klik tombol Buat proyek baru:

Buat Proyek Google API baru

Sekarang Anda akan melihat Proyek Tertaut baru dan beberapa bagian baru, di bagian Akun Layanan, klik tombol Buat akun layanan.

Buat Akun Layanan baru

Anda akan diberikan kotak info dengan instruksi untuk membuat akun layanan Anda. Klik tautan ke Google Developers Console dan tab baru akan muncul.

Buka Google Developers Console

Sekarang klik Buat ID Klien baru, pilih Akun layanan dari opsi dan klik Buat ID Klien.

Buat ID Klien baru

File JSON akan diunduh, ini adalah Token Web JSON Anda yang akan Anda gunakan untuk menukarnya access_tokensehingga tetap aman.

Selanjutnya, alihkan tab kembali ke konsol Pengembang Google play dan klik Selesai di kotak info. Anda akan melihat akun layanan baru Anda dalam daftar. Klik Berikan akses di sebelah email akun layanan.

Berikan akses

Selanjutnya di bawah Pilih peran untuk pengguna ini, pilih Keuangan dan klik Tambahkan pengguna.

Setel peran ke Keuangan

Anda sekarang telah menyiapkan akun layanan Anda dan akun tersebut memiliki semua akses yang diperlukan untuk melakukan validasi tanda terima. Selanjutnya adalah menukar JWT Anda dengan access_token.

The access_tokenberakhir setelah satu jam dari pertukaran Anda sehingga perlu beberapa kode server untuk menangani ini dan Google telah menyediakan beberapa perpustakaan dalam banyak bahasa untuk menangani ini (daftar tidak lengkap):

Saya tidak akan menjelaskan secara detail karena ada banyak dokumentasi tentang cara menggunakan pustaka ini, tetapi saya akan menyebutkan Anda ingin menggunakan https://www.googleapis.com/auth/androidpublishersebagai cakupan OAuth2, client_emaildari JWT sebagai issuerdan kunci publik yang dapat Anda peroleh dari private_keydan frasa sandi notasecretakan digunakan untuk signing_key.

Setelah Anda memiliki access_tokenAnda siap untuk pergi (setidaknya untuk satu jam berikutnya di mana Anda akan ingin meminta yang baru mengikuti proses yang sama di paragraf di atas).

Untuk memeriksa status pembelian yang dapat dikonsumsi (tanpa perpanjangan otomatis), buat getpermintaan http ke:https://www.googleapis.com/androidpublisher/v2/applications/com.example.app/purchases/products/exampleSku/tokens/rojeslcdyyiapnqcynkjyyjh?access_token=your_access_token

Jika Anda mendapatkan kode respons 200 http, semuanya berjalan sesuai rencana dan pembelian Anda valid. 404 berarti token Anda tidak valid sehingga pembelian kemungkinan besar merupakan upaya penipuan. 401 berarti token akses Anda tidak valid dan 403 berarti akun layanan Anda memiliki akses yang tidak memadai, periksa apakah Anda telah mengaktifkan Keuangan untuk akun akses di konsol Pengembang Google Play.

Tanggapan dari 200 akan terlihat seperti ini:

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

Untuk penjelasan tentang setiap properti, lihat https://developers.google.com/android-publisher/api-ref/purchases/products .

Langganan serupa tetapi titik akhirnya terlihat seperti ini:

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

Dan responsnya harus berisi properti ini:

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

Lihat https://developers.google.com/android-publisher/api-ref/purchases/subscriptions untuk deskripsi properti dan perhatikan bahwa startTimeMillisdan expiryTimeMillisakan dapat berubah tergantung pada durasi langganan.

Selamat memvalidasi!

Marc Greenstock
sumber
Saya menambahkan pengguna baru di konsol pengembang dan saya mendapat sertifikat JSON yang didapat dari konsol. Bisakah Anda membantu saya cara melakukan validasi tanda terima dengan file yang diunduh @Marc Greenstock
Binil Surendran
@BinilS Anda harus lebih spesifik, bahasa sisi server apa yang Anda gunakan untuk menulis kode?
Marc Greenstock
Saya menggunakan java di sisi server @Marc Greenstock
Binil Surendran
3
Ini adalah pertama kalinya saya melihat panduan terperinci untuk menerapkan validasi pembayaran server dalam 2 hari pencarian. Jempolan. Apakah ada kode server yang siap digunakan di suatu tempat? Saya merasa sangat aneh bahwa saya tidak dapat menemukan sesuatu seperti itu di mana pun
Anonim
2
@MarcGreenstock Terima kasih atas jawaban rinci.
Lavakush
28

Jawaban Marc luar biasa. Saya hanya akan menambahkan bahwa Perpustakaan Klien API Pengembang Google Play untuk Java membuatnya lebih sederhana saat menghubungkan dari server Anda ke server Google Play. Pustaka secara otomatis menangani penyegaran token autentikasi dan juga menyediakan API yang aman untuk mengetik sehingga Anda tidak perlu membuang-buang URL.

Inilah cara Anda menyiapkan Publishersingleton:

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();

Kode berikut menanyakan pembelian produk:

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

Anda juga bisa menanyakan tentang langganan:

SubscriptionPurchase sub = publisher.purchases().subscriptions().get(PACKAGE_NAME, sku, token).execute();
sub.getAutoRenewing();
sub.getCancelReason();
...
Jeshurun
sumber
Ini adalah kode di server Java, atau dijalankan di Android sebelum memanggil ke server arbitrer?
pengguna
2
@jeshurun ​​Terima kasih untuk kodenya. Untuk pembaca lain APP_NAME = APP_PACKAGE_NAME.
badai salju
1
Bagaimana dengan Python?
Babken Vardanyan
1
Terima kasih! Bagi saya, bukan getClass().getResourceAsStream(...saya yang digunakan new FileInputStream(....
António Almeida
Terima kasih. Sangat berguna. Namun, saya juga perlu menambahkan: credential.refreshToken();antara mendapatkan kredensial dan penerbit.
grooble
5

@ marc-greenstock memberikan jawaban yang bagus, namun, ada hal yang sangat penting tentang validasi tanda terima menggunakan API Pengembang Android Google Play.

Jika Anda memiliki masalah dalam menggunakan API ini dan Anda menambahkan produk dalam aplikasi SEBELUM memberikan izin atau menautkan ke akun layanan Anda, Anda perlu membuka "Produk dalam aplikasi" dan melakukan beberapa pembaruan. Misalnya, Anda dapat mengedit deskripsi produk Anda dan menyimpannya. Anda harus segera mendapatkan izin.

Saya menghabiskan beberapa jam memikirkan kesalahan apa yang saya lakukan ...

Wojciech Kulik
sumber
2

Jawaban ini luar biasa. Satu masalah lagi yang kami hadapi saat mengikuti arahan adalah bahwa akun layanan tidak muncul di Konsol Google Play. Kami akhirnya menemukan solusi ini untuk membantu: Akun layanan tidak muncul di Konsol Google setelah pembuatan

Pada dasarnya, buka IAM di Google API Console dan tambahkan akun layanan baru, lalu akan muncul di Konsol Google Play. tangkapan layar

membubung
sumber
Bisakah Anda menambahkan deskripsi di sini. Lain kali jika tautan dicabut, jawaban Anda menjadi tidak valid
Mathews Sunny
1
Apa peran akun yang harus ditambahkan?
Adi
0

Saya menghadapi masalah serupa, masalahnya ada pada pengaturan yang kami lakukan di proyek pengembang google.

Lihat kredensial buat-putar-layanan untuk pengaturan. Gunakan akun utama yang sama dengan yang Anda gunakan untuk membuat produk dalam aplikasi.

Pastikan Anda menghapus yang sebelumnya.

Tautkan ke Proyek Pengembang Google Akun Pengembang Play Anda harus ditautkan ke Proyek Pengembang Google.

1a. Buka Pengaturan> menu akun Pengembang dan pilih akses API

Akses API

1b. Pilih Tautan untuk menghubungkan akun Play Anda ke Proyek Pengembang Google

pilih-proyek-tautan

1c. Setuju dengan syarat dan ketentuan

setuju-syarat-ketentuan

2. Buat Akun Layanan Selanjutnya kita perlu membuat akun layanan. Ini dilakukan dari Google API Console.

2a. Pilih Buat Akun Layanan

buat-akun-layanan

2b. Buat kredensial kunci akun Layanan

akun layanan

2c. Masukkan detail untuk akun layanan

masukkan-layanan-akun-detail

2d. Unduh kredensial JSON Anda: json-credentials

3. Berikan Akses

3a. Di Konsol Play, pilih Berikan Akses pada akun layanan yang baru dibuat

akses hibah

3b. Berikan izin berikut:

terapkan-izin

Setelah ini, tunggu selama 48 jam untuk mengizinkan Google menyebarkan semua hak akses untuk API.

Ankit Jindal
sumber