Siklus proses pembelian satu kali

Produk pembelian satu kali memiliki siklus proses yang lebih sederhana daripada produk langganan, tetapi masih ada beberapa status dan peristiwa transisi yang diperlukan backend Anda agar dapat ditangani dengan benar.

Gambar 1 Status siklus proses dan peristiwa transisi untuk pembelian satu kali.

Pembelian produk sekali beli yang baru

Setelah pengguna menyelesaikan alur penagihan, aplikasi Anda dapat melihat informasi tentang pembelian baru dengan salah satu cara berikut:

Setelah menerima pembelian baru, gunakan metode getPurchaseState atau purchases.products.get in Play Developer API untuk menentukan status pembayaran pembelian baru.

Notifikasi developer real time

Saat pengguna membeli atau membatalkan pembelian produk sekali beli, Google Play akan mengirimkan pesan OneTimeProductNotification. Untuk memperbarui status pembelian backend, gunakan token pembelian yang disediakan dalam objek OneTimeProductNotification untuk memanggil metode purchases.products.get. Metode ini memberikan status pembelian dan konsumsi terbaru berdasarkan token pembelian.

Anda harus menangani RTDN terkait transaksi di backend aman Anda.

Menangani transaksi yang telah selesai

Saat pengguna menyelesaikan pembelian produk sekali beli, Google Play akan mengirimkan pesan OneTimeProductNotification dengan jenis ONE_TIME_PRODUCT_PURCHASED. Saat Anda menerima RTDN ini, proses pembelian seperti yang dijelaskan dalam Memproses pembelian produk sekali beli di backend.

Menangani transaksi yang dibatalkan

Saat pembelian produk sekali beli dibatalkan, Google Play akan mengirimkan pesan OneTimeProductNotification dengan jenis ONE_TIME_PRODUCT_CANCELED jika Anda telah mengonfigurasi untuk menerima notifikasi developer real-time. Misalnya, hal ini dapat terjadi jika pengguna tidak menyelesaikan pembayaran dalam jangka waktu yang diperlukan, atau jika pembelian dicabut oleh developer atau atas permintaan pelanggan. Saat server backend Anda menerima notifikasi ini, panggil metode purchases.products.get untuk mendapatkan status pembelian terbaru, lalu perbarui backend Anda, termasuk hak pengguna.

Jika pembelian produk sekali beli di negara bagian Purchased dikembalikan dananya, Anda juga akan diberi tahu melalui Voided Purchases API.

Memproses pembelian produk sekali beli di backend Anda

Baik Anda telah mendeteksi pembelian baru melalui RTDN ONE_TIME_PRODUCT_PURCHASED atau Anda telah diberi tahu dalam aplikasi melalui PurchasesUpdatedListener atau mengambil pembelian secara manual dalam metode onResume() aplikasi, Anda harus memproses pembelian baru. Sebaiknya tangani pemrosesan pembelian di backend Anda untuk keamanan yang lebih baik.

Ikuti langkah-langkah berikut untuk memproses pembelian satu kali yang baru:

  1. Buat kueri endpoint purchases.products.get untuk mendapatkan status pembelian produk sekali beli terbaru. Agar dapat memanggil metode ini untuk pembelian, Anda memerlukan purchaseToken yang sesuai, baik dari aplikasi Anda maupun dari RTDN ONE_TIME_PRODUCT_PURCHASED.
  2. Panggil getPurchaseState() dan pastikan status pembeliannya adalah PURCHASED.
  3. Verifikasi pembelian.
  4. Beri pengguna akses ke konten. Akun pengguna yang terkait dengan pembelian dapat diidentifikasi dengan kolom obfuscatedExternalAccountId dari purchases.products.get, jika akun ditetapkan menggunakan setObfuscatedAccountId() saat pembelian dilakukan.
    1. Untuk pembelian produk tidak habis pakai, konfirmasi pengiriman konten dengan memanggil metode purchases.products.acknowledge. Pastikan pembelian belum dikonfirmasi sebelumnya dengan memeriksa kolom acknowledgementState.
    2. Jika produk tersebut habis pakai, tandai item sebagai telah digunakan dengan memanggil metode purchases.products.consume agar pengguna dapat membeli item itu lagi setelah menghabiskan item tersebut. Metode ini juga mengonfirmasi pembelian.

Ada juga metode konfirmasi pembelian dan konsumsi yang tersedia di Library Layanan Penagihan Play yang memungkinkan Anda memproses pembelian dari aplikasi. Namun, sebaiknya Anda menangani pemrosesan di backend jika ada, untuk penerapan yang lebih aman.