SDK支付从版本 1.x.x 迁移到版本 3.x.x
该门户网站正在开发中。文档的完整版本请看这里.
- Kotlin
- Java
在支付版本 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):
- 获取购买列表的方法(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
的购买。
在支付版本 3.0.0 中,PaymentResult 中的产品购买结果模型发生了显著变化。
为了快速且无大问题地迁移到 SDK 的新版本,请遵循此迁移指南。
更新依赖项
为了更新依赖项,请在您的 build.gradle 文件的 billingclient 区域中升级 dependencies 的版本:
build.gradle
dependencies {
implementation( "ru.rustore.sdk:billingclient:3.2.0" )
}
更改模型
获取产品列表
获取产品列表的结果模型已发生了变化。现在,getProducts() 方法直接返回产品列表:
调用方法getProducts
ProductsUseCase productsUseCase = billingClient.getProducts();productsUseCase.getProducts(Arrays.asList( \"id1\" , \"id2\" )).addOnCompleteListener( new OnCompleteListener\<List\<Product\>\>() { \`\`@Override \`\`public void onFailure( \@NonNull Throwable throwable) { \`\`// Process error \`\`} \`\`@Override \`\`public void onSuccess(List\<Product\> products) { \`\`// Process success \`\`}});
品模型和错误模型保持不变。
获取购买列表
获取购买列表的结果模型发生了变化。现在,getPurchases() 方法会直接返回购买列表:
调用获取用户购买列表的方法
PurchasesUseCase purchasesUseCase = billingClient.getPurchases();purchasesUseCase.getPurchases().addOnCompleteListener( new OnCompleteListener\<List\<Purchase\>\>() { \`\`@Override \`\`public void onFailure( \@NonNull Throwable throwable) { \`\`// Process error \`\`} \`\`@Override \`\`public void onSuccess(List\<Purchase\> purchases) { \`\`// Process success \`\`}});
买模型和错误模型保持不变。
获取购买信息
获取购买信息的结果模型发生了变化。现在,getPurchaseInfo() 方法会直接返回购买模型:
调用获取用户购买列表的方法
PurchasesUseCase purchasesUseCase = billingClient.getPurchases();purchasesUseCase.getPurchaseInfo( \"purchaseId\" ).addOnCompleteListener( new OnCompleteListener\<Purchase\>() { \`\`@Override \`\`public void onFailure( \@NonNull Throwable throwable) { \`\`// Process error \`\`} \`\`@Override \`\`public void onSuccess(Purchase purchase) { \`\`// Process success \`\`}});
误模型保持不变。
购买产品
购买产品的结果模型发生了变化。更新后的模型如下所示:
购买结果的结构体
interface PaymentResult { \`\`interface Success extends PaymentResult { \`\`@Nullable \`\`public String getOrderId(); \`\`public String getPurchaseId(); \`\`public String getProductId(); \`\`public String getInvoiceId(); \`\`@Nullable \`\`public String getSubscriptionToken(); \`\`} \`\`interface Failure extends PaymentResult { \`\`@Nullable \`\`public String getPurchaseId(); \`\`@Nullable \`\`public String getInvoiceId(); \`\`@Nullable \`\`public String getOrderId(); \`\`@Nullable \`\`public Integer getQuantity(); \`\`@Nullable \`\`public String getProductId(); \`\`@Nullable \`\`public Integer getErrorCode(); \`\`} \`\`interface Cancelled extends PaymentResult { \`\`public String getPurchaseId(); \`\`} \`\`interface InvalidPaymentState extends PaymentResult {}}
中:
Success
成功完成数字产品购买的结果。Failure
购买数字产品时错误的结果。Cancelled
数字产品购买被取消的结果。InvalidPaymentState
SDK支付错误。可能因deeplink回调不正确而发生。
要特别注意消耗和取消购买的流程!
购买消耗(确认)
购买消耗的结果模型发生了变化。现在,消耗可能以成功或错误结束:
调用确认方法
PurchasesUseCase purchasesUseCase = billingClient.getPurchases();purchasesUseCase.confirmPurchase( \"purchaseId\" , \"developerPayload\" ).addOnCompleteListener( new OnCompleteListener\<Unit\>() { \`\`@Override \`\`public void onFailure( \@NonNull Throwable throwable) { \`\`// Process error \`\`} \`\`@Override \`\`public void onSuccess(Unit result) { \`\`// Process success \`\`}});