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

HarmonyOS鸿蒙Next中华为应用内支付调用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 接口发起购买并支付成功后,不对商品进行消耗。

  2. 再次调用 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

  3. 此时我们的代码校验逻辑是:在遇到 60051 错误码之后,直接调用 consumeOwnedPurchase 商品消耗接口,消耗接口返回错误码 60001,代码示例如下截图:

通过打印日志分析出来:返回错误码 60051,商品已拥有情况下,接口回调的 purchaseToken 为 null。

找华为技术人员(可以工单咨询 https://developer.huawei.com/consumer/cn/support/feedback)确认得知:华为支付开启后,走 onActivityResult 生命周期回调接口时,除了支付成功之外的情况,接口都不会回调支付订单详情。

解决方案

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

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

文档参考链接:

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


更多关于HarmonyOS鸿蒙Next中华为应用内支付调用consumeOwnedPurchase接口消耗商品失败:“returnCode 60001, message purchaseToken is null or empty”的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS鸿蒙Next中华为应用内支付调用consumeOwnedPurchase接口消耗商品失败:“returnCode 60001, message purchaseToken is null or empty”的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


该错误表明在调用consumeOwnedPurchase接口时,purchaseToken参数为空或无效。可能的原因包括:

  1. 未正确获取或传递purchaseToken:在调用consumeOwnedPurchase之前,确保已通过queryOwnedPurchases接口正确获取到purchaseToken,并将其传递给consumeOwnedPurchase接口。

  2. 支付流程未完成:确保用户已完成支付流程,且支付状态为成功。如果支付未完成,purchaseToken可能无效。

  3. 网络或服务器问题:检查网络连接和服务器状态,确保接口调用时网络正常。

建议检查代码逻辑,确保在调用consumeOwnedPurchase之前正确获取并传递purchaseToken

回到顶部