ผลิตภัณฑ์แบบซื้อครั้งเดียวมีวงจรที่ง่ายกว่าผลิตภัณฑ์ที่ต้องสมัครใช้บริการ แต่ยังคงมีสถานะและเหตุการณ์การเปลี่ยนแปลงหลายรายการที่แบ็กเอนด์ต้องจัดการอย่างเหมาะสม
การซื้อไอเทมแบบเรียกเก็บเงินครั้งเดียวใหม่
หลังจากผู้ใช้ทำตามขั้นตอนการเรียกเก็บเงินเสร็จแล้ว แอปของคุณจะเห็นข้อมูลเกี่ยวกับการซื้อใหม่ด้วยวิธีใดวิธีหนึ่งต่อไปนี้
- ตั้งค่า
Real-time developer notifications
และเปิดใช้Get all notifications for subscriptions and one-time products
เพื่อรับการอัปเดตเกี่ยวกับสถานะการซื้อ - ใช้
PurchasesUpdatedListener
อินเทอร์เฟซจากBillingClient
เพื่อรับการอัปเดตการซื้อโดยอัตโนมัติ - เรียกใช้เมธอด
BillingClient.queryPurchasesAsync()
หลังจากได้รับรายการที่ซื้อใหม่แล้ว ให้ใช้วิธี getPurchaseState
หรือ purchases.products.get in Play Developer API
เพื่อดูสถานะการชำระเงินของรายการที่ซื้อใหม่
การแจ้งเตือนแบบเรียลไทม์สำหรับนักพัฒนาซอฟต์แวร์
เมื่อผู้ใช้ซื้อหรือยกเลิกการซื้อไอเทมแบบเรียกเก็บเงินครั้งเดียว Google Play จะส่งข้อความOneTimeProductNotification
หากต้องการอัปเดตสถานะการซื้อในแบ็กเอนด์ ให้ใช้โทเค็นการซื้อที่ระบุไว้ในออบเจ็กต์ OneTimeProductNotification
เพื่อเรียกใช้เมธอด purchases.products.get
วิธีการนี้จะแสดงสถานะการซื้อและการบริโภคล่าสุดโดยระบุโทเค็นการซื้อ
เมื่อคำสั่งซื้อล่วงหน้าได้รับการดำเนินการและสถานะการซื้อเปลี่ยนเป็น "ซื้อแล้ว" ระบบจะส่ง RTDN ไปยังลูกค้า หลังจากได้รับ RTDN แล้ว ให้ดำเนินการสั่งซื้อล่วงหน้าตามที่อธิบายไว้ในประมวลผลการซื้อไอเทมแบบเรียกเก็บเงินครั้งเดียวในแบ็กเอนด์
คุณควรจัดการ RTDN ที่เกี่ยวข้องกับธุรกรรมในแบ็กเอนด์ที่ปลอดภัย
จัดการธุรกรรมที่เสร็จสมบูรณ์
เมื่อผู้ใช้ซื้อไอเทมแบบเรียกเก็บเงินครั้งเดียวเสร็จสมบูรณ์ Google Play จะส่งOneTimeProductNotification
ข้อความที่มีประเภท ONE_TIME_PRODUCT_PURCHASED
เมื่อได้รับ RTDN นี้ ให้ดำเนินการซื้อตามที่อธิบายไว้ในประมวลผลการซื้อผลิตภัณฑ์แบบครั้งเดียวในแบ็กเอนด์
จัดการธุรกรรมที่ยกเลิก
เมื่อมีการยกเลิกการซื้อผลิตภัณฑ์แบบครั้งเดียว Google Play จะส่งOneTimeProductNotification
ข้อความประเภท ONE_TIME_PRODUCT_CANCELED
หากคุณกำหนดค่าให้รับการแจ้งเตือนแบบเรียลไทม์สำหรับนักพัฒนาแอป
ตัวอย่างเช่น กรณีนี้อาจเกิดขึ้นหากผู้ใช้ชำระเงินไม่สำเร็จภายในกรอบเวลาที่กำหนด หรือหากนักพัฒนาแอปเพิกถอนการซื้อหรือลูกค้าขอเพิกถอนการซื้อ เมื่อเซิร์ฟเวอร์แบ็กเอนด์ได้รับการแจ้งเตือนนี้ ให้เรียกใช้เมธอด purchases.products.get
เพื่อรับสถานะการซื้อล่าสุด จากนั้นอัปเดตแบ็กเอนด์ของคุณตามความเหมาะสม รวมถึงการให้สิทธิ์ของผู้ใช้
หากมีการคืนเงินสำหรับการซื้อผลิตภัณฑ์แบบเรียกเก็บเงินครั้งเดียวที่อยู่ในสถานะ Purchased
คุณจะได้รับแจ้งผ่าน Voided Purchases API ด้วย
ประมวลผลการซื้อผลิตภัณฑ์แบบครั้งเดียวในแบ็กเอนด์
ไม่ว่าคุณจะตรวจพบการซื้อใหม่ผ่าน ONE_TIME_PRODUCT_PURCHASED
RTDN หรือได้รับแจ้งในแอปผ่าน PurchasesUpdatedListener
หรือดึงข้อมูลการซื้อด้วยตนเองในวิธี onResume()
ของแอป คุณต้องประมวลผลการซื้อใหม่ เราขอแนะนำให้คุณจัดการการประมวลผลการซื้อในแบ็กเอนด์เพื่อความปลอดภัยที่ดียิ่งขึ้น
ทำตามขั้นตอนต่อไปนี้เพื่อประมวลผลการซื้อแบบครั้งเดียวรายการใหม่
- ค้นหาข้อมูลในปลายทาง
purchases.products.get
เพื่อดูสถานะการซื้อผลิตภัณฑ์แบบครั้งเดียวล่าสุด หากต้องการเรียกใช้วิธีนี้สำหรับการซื้อ คุณต้องมีpurchaseToken
ที่เกี่ยวข้องจากแอปหรือจากONE_TIME_PRODUCT_PURCHASED
RTDN - โทรไปที่
getPurchaseState()
และตรวจสอบว่าสถานะการซื้อคือPURCHASED
- ยืนยันการซื้อ
- ให้สิทธิ์ผู้ใช้เข้าถึงเนื้อหา บัญชีผู้ใช้ที่เชื่อมโยงกับการซื้อจะระบุได้ด้วยช่อง
obfuscatedExternalAccountId
จากpurchases.products.get
หากมีการตั้งค่าโดยใช้setObfuscatedAccountId()
เมื่อทำการซื้อ- สำหรับการซื้อผลิตภัณฑ์ที่บริโภคไม่ได้ ให้รับทราบว่าเนื้อหาได้รับการนำส่งแล้วโดยเรียกใช้เมธอด
purchases.products.acknowledge
ตรวจสอบว่าก่อนหน้านี้ไม่มีการรับทราบการซื้อโดยดูที่ช่องacknowledgementState
- หากผลิตภัณฑ์เป็นแบบใช้แล้วหมดไป ให้ทำเครื่องหมายสินค้าว่าใช้แล้วโดยเรียกใช้เมธอด
purchases.products.consume
เพื่อให้ผู้ใช้ซื้อสินค้าอีกครั้งได้หลังจากที่ใช้ไปแล้ว วิธีนี้ยังถือเป็นการรับทราบการซื้อด้วย
- สำหรับการซื้อผลิตภัณฑ์ที่บริโภคไม่ได้ ให้รับทราบว่าเนื้อหาได้รับการนำส่งแล้วโดยเรียกใช้เมธอด
นอกจากนี้ยังมีวิธีการรับทราบการซื้อและวิธีการใช้อยู่ในไลบรารีการเรียกเก็บเงินของ Play ที่ช่วยให้คุณประมวลผลการซื้อจากแอปได้ แต่เราขอแนะนำให้คุณจัดการการประมวลผลในแบ็กเอนด์หากมีเพื่อการติดตั้งใช้งานที่ปลอดภัยยิ่งขึ้น