Các sản phẩm mua một lần có vòng đời đơn giản hơn các sản phẩm thuê bao, nhưng phần phụ trợ của bạn vẫn cần có một số trạng thái và sự kiện chuyển đổi để có thể xử lý đúng cách.
Giao dịch mới mua sản phẩm tính phí một lần
Sau khi người dùng hoàn tất quy trình thanh toán, ứng dụng của bạn có thể xem thông tin về giao dịch mua mới theo một trong hai cách:
- Triển khai giao diện
PurchasesUpdatedListener
từBillingClient
để tự động nhận thông tin cập nhật về giao dịch mua. - Gọi phương thức
BillingClient.queryPurchasesAsync()
.
Sau khi nhận được giao dịch mua mới, hãy dùng phương thức getPurchaseState
để xác định trạng thái thanh toán của giao dịch mua đó.
Giao dịch đang chờ xử lý
Chỉ khi ở trạng thái đang chờ xử lý thì các giao dịch mua sản phẩm tính phí một lần mới tạo RTDN. Định dạng của trường data
cho loại RTDN này là OneTimeProductNotification
. Để cập nhật trạng thái giao dịch mua trong phần phụ trợ, hãy sử dụng mã thông báo giao dịch mua được cung cấp trong đối tượng OneTimeProductNotification
để gọi phương thức purchases.products.get
. Phương thức này cung cấp trạng thái mua và tiêu thụ mới nhất dựa trên mã thông báo giao dịch mua.
Bạn nên xử lý các RTDN liên quan đến giao dịch trong phần phụ trợ bảo mật của mình.
Xử lý giao dịch đã hoàn tất
Khi người dùng hoàn tất giao dịch mua sản phẩm tính phí một lần đang chờ xử lý, Google Play sẽ gửi thông báo OneTimeProductNotification
thuộc loại ONE_TIME_PRODUCT_PURCHASED
.
Khi bạn nhận được RTDN này, hãy xử lý giao dịch mua như mô tả trong phần Xử lý giao dịch mua sản phẩm tính phí một lần trong phần phụ trợ.
Xử lý giao dịch đã huỷ
Khi một giao dịch mua sản phẩm tính phí một lần đang chờ xử lý bị huỷ, Google Play sẽ gửi thông báo OneTimeProductNotification
thuộc loại ONE_TIME_PRODUCT_CANCELED
.
Ví dụ: điều này có thể xảy ra nếu người dùng không hoàn tất quá trình thanh toán trong khoảng thời gian bắt buộc. Khi máy chủ phụ trợ của bạn nhận được thông báo này, hãy gọi phương thức purchases.products.get
để nhận trạng thái mua hàng mới nhất, sau đó cập nhật phần phụ trợ của bạn sao cho phù hợp, bao gồm cả quyền của người dùng.
Bạn chỉ có thể huỷ các giao dịch mua sản phẩm tính phí một lần ở trạng thái Pending
. Nếu một giao dịch mua sản phẩm tính phí một lần ở trạng thái Purchased
được hoàn tiền, thì bạn sẽ nhận được thông báo qua Voided Purchases API (API Giao dịch mua vô hiệu).
Xử lý các giao dịch mua sản phẩm tính phí một lần trong phần phụ trợ
Dù bạn phát hiện một giao dịch mua mới qua RTDN ONE_TIME_PRODUCT_PURCHASED
hay đã được thông báo trong ứng dụng thông qua PurchasesUpdatedListener
hoặc tìm nạp thủ công giao dịch mua trong phương thức onResume()
của ứng dụng, bạn đều phải xử lý giao dịch mua mới. Bạn nên xử lý quy trình mua hàng trong phần phụ trợ để tăng tính bảo mật.
Thực hiện theo các bước sau để xử lý giao dịch mua hàng một lần mới:
- Truy vấn điểm cuối
purchases.products.get
để nhận trạng thái mới nhất của giao dịch mua sản phẩm tính phí một lần. Để gọi phương thức này cho giao dịch mua, bạn cần cópurchaseToken
tương ứng từ ứng dụng của mình hoặc từ RTDNONE_TIME_PRODUCT_PURCHASED
. - Gọi
getPurchaseState()
và đảm bảo trạng thái mua làPURCHASED
. - Xác minh giao dịch mua.
- Cấp cho người dùng quyền truy cập vào nội dung. Tài khoản người dùng liên kết với giao dịch mua có thể được xác định bằng trường
obfuscatedExternalAccountId
trongpurchases.products.get
(nếu bạn đã thiết lập trường này bằngsetObfuscatedAccountId()
khi giao dịch mua được thực hiện).- Đối với các giao dịch mua sản phẩm không phải sản phẩm tiêu hao, hãy xác nhận việc phân phối nội dung bằng cách gọi phương thức
purchases.products.acknowledge
. Hãy kiểm tra trườngacknowledgementState
để đảm bảo giao dịch mua này chưa được xác nhận trước đó. - Nếu sản phẩm là sản phẩm tiêu hao, hãy đánh dấu mặt hàng là đã sử dụng bằng cách gọi phương thức
purchases.products.consume
để người dùng có thể mua lại mặt hàng đó sau khi tiêu thụ. Phương thức này cũng xác nhận giao dịch mua.
- Đối với các giao dịch mua sản phẩm không phải sản phẩm tiêu hao, hãy xác nhận việc phân phối nội dung bằng cách gọi phương thức
Thư viện Play Billing cũng có các phương thức xác nhận và tiêu thụ giao dịch mua, cho phép bạn xử lý các giao dịch mua hàng trong ứng dụng của mình. Tuy nhiên, bạn nên xử lý trong phần phụ trợ (nếu có) để triển khai một cách an toàn hơn.