Saya memiliki aplikasi sederhana (perlu login pengguna dengan akun). Saya menyediakan beberapa fitur premium untuk pengguna berbayar, seperti lebih banyak konten berita.
Saya perlu mencatat jika pengguna telah membeli item ini di database server saya. Saat saya memberikan konten data ke perangkat pengguna, saya kemudian dapat memeriksa status pengguna, dan memberikan konten yang berbeda untuk pengguna berbayar.
Saya telah memeriksa sampel Trivialdrive resmi yang disediakan oleh Google, tidak memberikan kode sampel apa pun untuk verifikasi sisi server, ini pertanyaan saya.
- Saya menemukan sampel menggunakan kunci publik aplikasi saya di dalam untuk memverifikasi pembelian, tampaknya tidak bagus, saya pikir saya bisa memindahkan proses verifikasi ke server saya dikombinasikan dengan kredensial login pengguna untuk melihat apakah pembelian pengguna selesai, dan kemudian memperbarui database.
- Juga ada API pembelian yang dapat saya gunakan untuk melakukan kueri, yang saya butuhkan adalah meneruskan purchaseToken pengguna ke server.
Saya tidak yakin metode apa yang harus saya ambil untuk memverifikasi pembelian pengguna, dan menandai status pengguna di database saya, mungkin keduanya?
Dan saya khawatir ada situasi, jika pengguna membeli item ini dari google play, tetapi untuk beberapa alasan, tepat pada saat itu, ketika aplikasi saya meluncurkan verifikasi ke server saya, koneksi jaringan turun atau server saya sendiri mati , pengguna baru saja membayar uang di google play tetapi saya tidak mencatat pembelian di server saya? Apa yang harus saya lakukan, Bagaimana saya bisa menghadapi situasi ini.
Jawaban:
Sepertinya yang Anda cari adalah cara untuk memeriksa apakah pengguna mengaktifkan fitur premium di akun mereka, jadi di sinilah saya akan mulai;
Pastikan ada semacam bendera di database Anda yang menunjukkan apakah pengguna memiliki fitur premium dan menyertakannya dalam payload respons API saat meminta info akun. Bendera ini akan menjadi otoritas utama Anda untuk "fitur premium".
Saat pengguna melakukan pembelian dalam aplikasi, cache detailnya (token, id pesanan, dan id produk) secara lokal di klien (yaitu aplikasi) lalu kirimkan ke API Anda.
API Anda kemudian harus mengirimkan
purchaseToken
ke Google Play Developer API untuk validasi.Beberapa hal mungkin terjadi dari sini:
Dalam kasus 1. atau 2. (kode status 2xx atau 4xx) klien Anda membersihkan cache dari detail pembelian karena tidak membutuhkannya lagi karena API telah menunjukkan bahwa itu telah diterima.
Setelah validasi berhasil (kasus 1.), Anda harus menyetel
premium
flag ke true untuk pengguna.Dalam kasus 3. (kode status 5xx) atau waktu tunggu jaringan, klien harus terus mencoba sampai menerima kode status 2xx atau 4xx dari API Anda.
Bergantung pada kebutuhan Anda, Anda dapat membuatnya menunggu beberapa detik sebelum mengirim lagi atau hanya mengirimkan detailnya ke API Anda ketika aplikasi diluncurkan lagi atau keluar dari latar belakang jika detail pembelian ada di cache aplikasi.
Pendekatan ini harus menangani waktu tunggu jaringan, server tidak tersedia, dll.
Sekarang ada beberapa pertanyaan yang perlu Anda pertimbangkan:
Apa yang harus terjadi segera setelah pembelian? Haruskah aplikasi menunggu sampai validasi berhasil sebelum memberikan konten premium atau haruskah aplikasi tersebut secara tentatif memberikan akses dan menghapusnya jika validasi gagal?
Memberikan akses tentatif ke fitur premium memperlancar proses untuk sebagian besar pengguna Anda, tetapi Anda juga akan memberikan akses ke sejumlah pengguna penipu saat API Anda memvalidasi
purchaseToken
.Dengan kata lain: Pembelian valid sampai terbukti curang atau; curang sampai terbukti valid?
Untuk mengidentifikasi apakah pengguna masih memiliki langganan yang valid ketika periode langganan mereka tiba untuk perpanjangan, Anda perlu menjadwalkan validasi ulang di
purchaseToken
to run padaexpiryTimeMillis
yang dikembalikan dalam hasil .Jika
expiryTimeMillis
ada di masa lalu, Anda dapat menyetelpremium
benderanya ke false. Jika di masa mendatang, jadwalkan ulang lagi untuk yang baruexpiryTimeMillis
.Terakhir, untuk memastikan pengguna memiliki akses premium (atau tidak), aplikasi Anda harus menanyakan API Anda tentang detail pengguna saat peluncuran aplikasi atau saat aplikasi tersebut keluar dari latar belakang.
sumber
Dokumentasi tentang hal ini membingungkan dan bertele-tele dengan hal-hal yang hampir tidak penting sementara dokumentasi yang sebenarnya penting hampir tidak ditautkan dan sangat sulit ditemukan. Ini seharusnya berfungsi dengan baik pada sebagian besar platform server populer yang dapat menjalankan pustaka klien google api, termasuk Java, Python, .Net, dan NodeJS, antara lain. Catatan: Saya hanya menguji klien Python api seperti yang ditunjukkan di bawah ini.
Langkah-langkah yang diperlukan:
Buat proyek API, dari tautan Akses API di konsol Google Play Anda
Buat akun layanan baru, simpan kunci pribadi JSON yang dihasilkan. Anda harus membawa file ini ke server Anda.
Tekan Selesai di bagian akun layanan konsol Play untuk menyegarkan dan kemudian memberikan akses ke akun layanan
Dapatkan pustaka klien google api untuk platform server Anda dari https://developers.google.com/api-client-library
Gunakan pustaka klien platform khusus Anda untuk membuat antarmuka layanan dan langsung membaca hasil verifikasi pembelian Anda.
Anda tidak perlu repot dengan cakupan otorisasi, membuat panggilan permintaan khusus, menyegarkan token akses, dll. Pustaka klien api menangani semuanya. Berikut adalah contoh penggunaan pustaka python untuk memverifikasi langganan:
Pertama, instal klien google api di pipenv Anda seperti ini:
Kemudian Anda dapat mengatur kredensial klien api menggunakan file json kunci pribadi untuk mengautentikasi akun layanan.
Sekarang Anda dapat memverifikasi pembelian langganan atau pembelian produk menggunakan perpustakaan, secara langsung.
Dokumentasi untuk antarmuka layanan platform untuk Play Developer API tidak ditautkan dengan cara yang mudah ditemukan, untuk beberapa hal ini benar - benar sulit ditemukan . Berikut ini tautan untuk platform populer yang saya temukan:
Python | Jawa | .NET | PHP | NodeJS (Github TS) | Pergi (Github JSON)
sumber
Contoh lengkap penggunaan Library Klien Google API untuk PHP :
Siapkan Google Project Anda dan akses ke Google Play untuk akun layanan Anda seperti yang dijelaskan dalam jawaban Marc di sini https://stackoverflow.com/a/35138885/1046909 .
Pasang perpustakaan: https://developers.google.com/api-client-library/php/start/installation .
Sekarang Anda dapat memverifikasi tanda terima Anda dengan cara berikut:
Setelah itu $ pembelian adalah instance dari Google_Service_AndroidPublisher_SubscriptionPurchase
sumber
Anda dapat mencoba menggunakan Purchases.subscriptions: get server-side. Dibutuhkan packageName, subscriptionId dan token sebagai paramaters dan membutuhkan otorisasi .
Jika berhasil, metode ini mengembalikan resource Purchases.subscriptions di isi respons.
sumber
Saya menjawab kekhawatiran ini
Situasinya adalah:
Pengguna membeli item 'abc' menggunakan layanan google play -> kembali OK -> gagal memverifikasi dengan server karena beberapa alasan seperti tidak ada koneksi Internet.
Solusinya adalah:
Di sisi klien, sebelum menampilkan tombol 'Google Wallet', Anda memeriksa apakah item 'abc' sudah dimiliki.
https://developer.android.com/google/play/billing/billing_reference.html#getSkuDetails
sumber