迁移到支付版本2.2.0
该门户网站正在开发中。文档的完整版本请看这里.
- Kotlin
- Java
概述
在支付版本 2.2.0 中,PaymentResult 中的产品购买结果模型发生了显著变化。
为了快速且无大问题地迁移到 SDK 的新版本,请遵循此迁移指南。
更新依赖项
为了更新依赖项,请在您的 build.gradle 文件的 dependencies 区域中升级 billingclient 的版本:
build.gradle
dependencies {
implementation( "ru.rustore.sdk:billingclient:2.2.0" )
}
更改模型
获取产品列表
获取产品列表的结果模型已发生了变化。现在,getProducts() 方法直接返回产品列表:
val productsUseCase: ProductsUseCase = billingClient.products
productsUseCase.getProducts(productIds = listOf("id1", "id2"))
.addOnSuccessListener { products: List<Product> ->
// Process success
}
.addOnFailureListener { throwable: Throwable ->
// Process error
}```
品模型和错误模型保持不变。
## 获取购买列表
获取购买列表的结果模型发生了变化。现在,**getPurchases()** 方法会直接返回购买列表:
```js
public sealed interface PaymentResult {
public data class Success(
val orderId: String?,
val purchaseId: String,
val productId: String,
val invoiceId: String,
val subscriptionToken: String? = null ,
) : PaymentResult
public data class Cancelled(
val purchaseId: String,
) : PaymentResult
public data class Failure(
val purchaseId: String?,
val invoiceId: String?,
val orderId: String?,
val quantity: Int?,
val productId: String?,
val errorCode: Int?,
) : PaymentResult
public object InvalidPaymentState : PaymentResult()
}
买模型和错误模型保持不变。
获取购买信息
获取购买信息的结果模型发生了变化。现在,getPurchaseInfo() 方法会直接返回购买模型:
val purchasesUseCase: PurchasesUseCase = billingClient.purchases
purchasesUseCase.confirmPurchase(purchaseId = "purchaseId" , developerPayload = null )
.addOnSuccessListener {
// Process success
}.addOnFailureListener { throwable: Throwable ->
// Process error
}
误模型保持不变。
购买产品
购买产品的结果模型发生了变化。更新后的模型如下所示:
public sealed interface PaymentResult {
public data class Success(
val orderId: String?,
val purchaseId: String,
val productId: String,
val invoiceId: String,
val subscriptionToken: String? = null ,
) : PaymentResult
public data class Cancelled(
val purchaseId: String,
) : PaymentResult
public data class Failure(
val purchaseId: String?,
val invoiceId: String?,
val orderId: String?,
val quantity: Int?,
val productId: String?,
val errorCode: Int?,
) : PaymentResult
public object InvalidPaymentState : PaymentResult()
}
中:
Success
- 成功完成数字产品购买的结果。Failure
- 购买数字产品时错误的结果。Cancelled
- 数字产品购买被取消的结果。InvalidPaymentState
- 支付SDK操作错误。可能因deeplink回调不正确而发生。
别注意购买消耗和取消的流程。
购买消耗(确认)
购买消耗的结果模型发生了变化。现在,消耗可能以成功或错误结束:
val purchasesUseCase: PurchasesUseCase = billingClient.purchases
purchasesUseCase.confirmPurchase(purchaseId = "purchaseId" , developerPayload = null )
.addOnSuccessListener {
// Process success
}.addOnFailureListener { throwable: Throwable ->
// Process error
}
取消购买
购买取消的结果模型发生了变化。现在,取消购买可能以成功或错误结束:
val purchasesUseCase: PurchasesUseCase = billingClient.purchases
purchasesUseCase.deletePurchase(purchaseId = "purchaseId" )
.addOnSuccessListener {
// Process success
}.addOnFailureListener { throwable: Throwable ->
// Process error
}
购买消耗和取消的流程
由于产品购买结果模型发生了变化,因此购买的消耗和取消的逻辑也随之发生了变化。
如果出现以下情况,应使用取消购买方法(deletePurchase):
- 获取购买列表的方法(getPurchases)返回的购买状态为PurchaseState.CREATED或PurchaseState.INVOICE_CREATED。
某些情况下,通过银行应用程序(如快速支付系统(SBP)、SberPay、T-Pay等)支付后,当用户随后返回到AnyApp应用程序时,购买的状态可能仍然是 PurchaseState.INVOICE_CREATED。这与银行端处理购买的时间有关。因此,开发者需要正确地将获取购买列表的逻辑与屏幕生命周期相结合。解决这个问题的另一种方法是,只有在用户与应用程序交互时,才取消处于 PurchaseState.INVOICE_CREATED 状态的购买。例如,可以将这个逻辑放到一个单独的按钮中。
- 购买方法 (
purchaseProduct
) 返回 PaymentResult.Cancelled。 - 购买方法 (
purchaseProduct
) 返回 PaymentResult.Failure。
如果出现以下情况,应使用产品消耗方法(confirmPurchase):
- 获取购买列表的方法 (getPurchases) 返回了类型为
CONSUMABLE
且状态为PurchaseState.PAID
的购买。