跳到主要内容

SDK支付从版本 1.x.x 迁移到版本 3.x.x

注意

该门户网站正在开发中。文档的完整版本请看这里.

在支付版本 3.0.0 中,PaymentResult 中的产品购买结果模型发生了显著变化。

为了快速且无大问题地迁移到 SDK 的新版本,请遵循此迁移指南。

更新依赖项

为了更新依赖项,请在您的 build.gradle 文件的 billingclient 区域中升级 dependencies 的版本:

build.gradle

dependencies {
implementation( "ru.rustore.sdk:billingclient:3.2.0" )
}

更改模型

获取产品列表

获取产品列表的结果模型已发生了变化。现在,getProducts() 方法直接返回产品列表:

调用方法getProducts

val productsUseCase: ProductsUseCase = billingClient.productsproductsUseCase.getProducts(productIds = listOf( \"id1\" ,  \"id2\" ))    \`\`.addOnSuccessListener { products: List\<Product\> -\>        \`\`// Process success    \`\`}    \`\`.addOnFailureListener { throwable: Throwable -\>        \`\`// Process error    \`\`}

品模型和错误模型保持不变。

获取购买列表

获取购买列表的结果模型发生了变化。现在,getPurchases() 方法会直接返回购买列表:

调用获取用户购买列表的方法

val purchasesUseCase: PurchasesUseCase = billingClient.purchasespurchasesUseCase.getPurchases()     \`\`.addOnSuccessListener { purchases: List\<Purchase\> -\>        \`\`// Process success    \`\`}    \`\`.addOnFailureListener { throwable: Throwable -\>        \`\`// Process error    \`\`}

买模型和错误模型保持不变。

获取购买信息

获取购买信息的结果模型发生了变化。现在,getPurchaseInfo() 方法会直接返回购买模型:

调用获取用户购买列表的方法

val purchasesUseCase: PurchasesUseCase = billingClient.purchasespurchasesUseCase.getPurchaseInfo( \"purchaseId\" )     \`\`.addOnSuccessListener { purchase: Purchase -\>        \`\`// 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.purchasespurchasesUseCase.confirmPurchase(purchaseId =  \"purchaseId\" , developerPayload =  null )    \`\`.addOnSuccessListener {        \`\`// Process success    \`\`}.addOnFailureListener { throwable: Throwable -\>        \`\`// Process error    \`\`}

取消购买

购买取消的结果模型发生了变化。现在,取消购买可能以成功或错误结束:

调用取消购买方法。

val purchasesUseCase: PurchasesUseCase = billingClient.purchasespurchasesUseCase.deletePurchase(purchaseId =  \"purchaseId\" )    \`\`.addOnSuccessListener {        \`\`// Process success    \`\`}.addOnFailureListener { throwable: Throwable -\>        \`\`// Process error    \`\`}

购买消耗和取消的流程

由于产品购买结果模型发生了变化,因此购买的消耗和取消的逻辑也随之发生了变化。

如果出现以下情况,应使用取消购买方法(deletePurchase):

  1. 获取购买列表的方法(getPurchases)返回的购买状态为PurchaseState.CREATED或PurchaseState.INVOICE_CREATED。

在某些情况下,通过银行应用程序(如快速支付系统(SBP)、SberPay、T-Pay等)支付后,当用户随后返回到 AnyApp 应用程序时,购买的状态可能仍然是 PurchaseState.INVOICE_CREATED。这与银行端处理购买的时间有关。因此,开发者需要正确地将获取购买列表的逻辑与屏幕生命周期相结合。解决这个问题的另一种方法是,只有在用户与应用程序交互时,才取消处于 PurchaseState.INVOICE_CREATED 状态的购买。例如,可以将这个逻辑放到一个单独的按钮中。

  1. 购买方法 (purchaseProduct) 返回 PaymentResult.Cancelled。
  2. 购买方法 (purchaseProduct) 返回 PaymentResult.Failure。

如果出现以下情况,应使用产品消耗方法(confirmPurchase):

  1. 获取购买列表的方法 (getPurchases) 返回了类型为 CONSUMABLE 且状态为 PurchaseState.PAID 的购买。