文档管理中心
|

应用内支付服务

华为应用内支付,调用consumeOwnedPurchase接口消耗商品失败:“returnCode 60001, message purchaseToken is null or empty”

问题背景

近期我们在接入华为应用内支付IAP SDK,官方指导文档上说明了支付流程:

https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/dev-guide-0000001050130254#section1868165018437

在支付完成后,需要调用consumeOwnedPurchase接口对商品进行消耗,但我测试时,消耗接口一直报错 60001,提示purchaseToken为空,报错日志如下:


2022-04-01 09:58:47.915 31470-7487/? I/hms_pay: [I/IAP_APK[6.4.0.352]/hms_pay 31470:29860 LogUtil.java:4] hms_pay    ConsumePurchaseRequest onRequest, purchaseToken is null or empty.
2022-04-01 09:58:47.915 31470-7487/? I/hms_pay: [I/IAP_APK[6.4.0.352]/hms_pay 31470:29860 LogUtil.java:4] hms_pay    returnCode: 60001, message: purchaseToken is null or empty

问题分析

这里还原下我们的测试步骤和代码逻辑。

     1. 先在后台创建一个消耗商品,调用createPurchaseIntent接口发起购买并支付成功后,不对商品进行消耗。

  1. 再次调用createPurchaseIntent支付接口时,接口报错:2022-04-01 10:32:05.294 31470-31470/? I/hms_pay: [I/IAP_APK[6.4.0.352]/hms_pay 31470:1 LogUtil.java:4] hms_pay    OrderResultInterceptor exitService: 60051
  2. 此时我们的代码校验逻辑是:在遇到60051错误码之后,直接调用consumeOwnedPurchase商品消耗接口,消耗接口返回错误码60001,代码示例如下截图:cke_7500.png
  3. 通过打印日志分析出来:返回错误码60051,商品已拥有情况下,接口回调的purchaseToken null
  4. 找华为技术人员(可以工单咨询https://developer.huawei.com/consumer/cn/support/feedback)确认得知:华为支付开启后,走onActivityResult生命周期回调接口时,除了支付成功之外的情况,接口都不会回调支付订单详情。

解决方案

后来参照文档的示例代码,在遇到60051错误码时,先调用obtainOwnedPurchases接口,查询所有的未消耗商品的订单。

cke_37421.png

通过接口查询到了未消耗商品订单,核实已发货后,再调用consumeOwnedPurchase接口进行商品消耗。

cke_41305.png

文档参考链接:

https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/redelivering-consumables-0000001051356573

点赞
收藏
回复
分享
举报
浏览645 发布于2022-04-14 12:36未知归属地
全部评论
最多点赞
最新发布
最早发布
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

了解社区公约,与您携手共创和谐专业的开发者社区。