如何从 HMS IAP 服务器端恢复 Non-Consumable IAP 服务?

Posted

技术标签:

【中文标题】如何从 HMS IAP 服务器端恢复 Non-Consumable IAP 服务?【英文标题】:How can I restore Non-Consumable IAP services from HMS IAP server side? 【发布时间】:2021-03-03 16:45:50 【问题描述】:

我正在实施 HMS 插件以通过 Unity 为我的应用显示广告和 IAP 服务。一切都很好,广告和 IAP 都运行良好。

有一件事我无法弄清楚,那就是当我购买非消耗性 IAP 产品时,该应用程序运行良好,但是当我下次想要恢复该 IAP 购买时,服务器没有返回任何内容。如何获取用户从该应用创建的所有 IAP 数据?我应该如何从我这边处理非消耗性 IAP?请帮忙。

【问题讨论】:

【参考方案1】:

如果您想在支付完成后恢复非消耗品,HMS Core (APK)会返回一个采购订单明细JSON字符串InAppPurchaseData和一个签名字符串inAppDataSignature。

应用程序可以验证签名字符串,以确保订单详细信息的准确性。如果应用对安全性要求较高,需要在华为IAP服务器上验证订单信息,应用可以从InAppPurchaseData中解析purchase token参数,调用下面的API向华为IAP服务器发送验证请求。 purchase token参数用于唯一标识产品与用户的映射关系。

服务器端API

    POST /applications/purchases/tokens/verify Content-Type: application/json; 
charset=UTF-8 Authorization: 
BasicQVQ6Q1YzQ1NPbVlBaGwrZUtRWExtMTBVV2pyWXZHTVF4MmYvcVMya1B0ZElLY3UwaFJrdFNTMmxwdk1FQkIyY
ldXWGt0REVaR3I4UjFUTTRLMVlmNXdwWU80RG04THdXQWxjaFhEYjBMUjBNTUJtWnFYcGFtazc3THN3UnFJbkhHK28
xekdqRzNSMg== Accept: application/json Content-Length: 143    "purchaseToken": 
"00000173741056a37eef310dff9c6a86fec57efafe318ae478e52d9c4261994d64c8f6fc8ea1abbdx5347.5.3
089",   "productId": "prd1" 

API-ObtainOwnedPurchases:

查询所有已购买应用内商品的信息,包括消耗品、非消耗品和自动续订订阅。

● 应用启动时,会调用obtainOwnedPurchases接口检查是否出现下发失败。如果是,请重新交付相应的产品。下单成功后,调用consumeOwnedPurchase API消费。

● 如果支付过程中出现异常,则调用obtainOwnedPurchases接口检查支付是否成功。如果出现配送失败,请重新配送对应的产品。

● 商品已购买但未消费,支付时返回错误码60051。这种情况下,调用obtainOwnedPurchases接口检查是否出现发货失败。如果是,请重新交付相应的产品。

【讨论】:

以上是关于如何从 HMS IAP 服务器端恢复 Non-Consumable IAP 服务?的主要内容,如果未能解决你的问题,请参考以下文章

FAQ接入HMS Core应用内支付服务过程中一些常见问题总结

FAQ接入HMS Core应用内支付服务过程中一些常见问题总结

IAP:恢复不再出售的购买

非消耗性 IAP

如何使用Postman调试HMS Core推送接口?

FAQ接入HMS Core推送服务,服务端下发消息常见错误码原因分析及解决方法