【问题标题】:Huawei In App purchase token verification - unexpected error "rights invalid"华为应用内购买令牌验证 - 意外错误“权利无效”
【发布时间】:2020-10-31 10:05:42
【问题描述】:

我正在使用华为 In App SDK 实现 InApp 购买(订阅)。

一切都很好,除了针对华为服务器的令牌验证。

我的代码和这里的类似:https://developer.huawei.com/consumer/en/doc/development/HMS-References/iap-api-order-service-purchase-token-verification-v4

我正在使用这样获得的访问令牌:https://developer.huawei.com/consumer/en/doc/development/HMS-Guides/38054564 - 顺便说一句,获取访问令牌的相同代码已经与华为推送 SDK 一起使用。

为了验证,我的代码使用以下数据向https://orders-dre.iap.hicloud.com/applications/purchases/tokens/verify 发送请求:

{
"purchaseToken":"00000175799be0e659fc74cb06...5.8.5650",
"productId":"annual"
}

响应返回为:

{"responseCode":"6","responseMessage":"rights invalid"}

此处的常见问题解答https://developer.huawei.com/consumer/en/doc/development/HMS-Guides/iap-FAQ 建议:

"建议您检查获取AccessToken的app ID是否与请求中purchaseToken关联的app ID相同"。

现在我只有一个项目/一组客户端 ID/客户端密钥,因此根据定义,它与应用 ID 匹配。

可能出了什么问题?

PS - 测试订阅会发生这种情况,即由设置为测试帐户的用户帐户购买。

【问题讨论】:

    标签: huawei-mobile-services


    【解决方案1】:
    1. 根据您提供的代码部分,您使用的是Purchase Token Verification for the Order Service,应该使用API for Verifying the Purchase Token for the Subscription Service

    订单服务的购买令牌验证仅适用于非订阅购买。用于验证华为IAP服务器发送的支付结果中的购买token,以保证支付的准确性。

    用于验证订阅服务购买令牌的 API 仅适用于订阅。用于检查产品是否已成功购买,是否在有效期内。

    1. 验证订阅服务的购买令牌:

    参数: subscriptionId;purchaseToken

    RequestUrl: {rootUrl}/sub/applications/v2/purchases/get

    rootURL:

    中国:https://subscr-drcn.iap.hicloud.com

    德国:https://subscr-dre.iap.hicloud.com

    新加坡:https://subscr-dra.iap.hicloud.com

    俄罗斯:https://subscr-drru.iap.hicloud.com

    AppTouch 德国站:https://subscr-at-dre.iap.dbankcloud.com

    【讨论】:

    • 谢谢@shirley。我已切换到subscr-dre.iap.dbankcloud.com 以及正确的 URL 和参数。现在,我通过测试帐户订阅了 {"responseCode":"8","re​​sponseMessage":"IAP_RESPONSE_RESULT_ITEM_NOT_OWNED"}。测试订阅是否应该能够验证(即返回“拥有”状态)?
    • PS - @shirley - 文档说错误“8”的修复是消耗产品。我在 Android 端的代码确实调用了 consumeOwnedPurchase(subscriptionToken) 但失败并显示“60052:item notowned”。
    • @KostyaVasilyev 您可以检查参数是否为subscriptionId,而不是productId。同时,您可以获取一个新的purchaseToken进行验证。
    • 对不起我的错误。我为 subscriptionId 传递了错误的数据(SKU、productId),就像在 Google API 中一样。已修复,现在华为 API 运行良好。谢谢@shirley 的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 2015-12-09
    • 2015-09-04
    • 2011-10-12
    相关资源
    最近更新 更多