HarmonyOS鸿蒙Next中华为应用内支付调用consumeOwnedPurchase接口消耗商品失败:“returnCode 60001, message purchaseToken is null or empty”
HarmonyOS鸿蒙Next中华为应用内支付调用consumeOwnedPurchase接口消耗商品失败:“returnCode 60001, message purchaseToken is null or empty” 问题背景
近期我们在接入华为应用内支付 IAP SDK,官方指导文档上说明了支付流程:
在支付完成后,需要调用 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
问题分析
这里还原下我们的测试步骤和代码逻辑。
-
先在后台创建一个消耗商品,调用 createPurchaseIntent 接口发起购买并支付成功后,不对商品进行消耗。
-
再次调用 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
-
此时我们的代码校验逻辑是:在遇到 60051 错误码之后,直接调用 consumeOwnedPurchase 商品消耗接口,消耗接口返回错误码 60001,代码示例如下截图:
通过打印日志分析出来:返回错误码 60051,商品已拥有情况下,接口回调的 purchaseToken 为 null。
找华为技术人员(可以工单咨询 https://developer.huawei.com/consumer/cn/support/feedback)确认得知:华为支付开启后,走 onActivityResult 生命周期回调接口时,除了支付成功之外的情况,接口都不会回调支付订单详情。
解决方案
后来参照文档的示例代码,在遇到 60051 错误码时,先调用 obtainOwnedPurchases 接口,查询所有的未消耗商品的订单。
通过接口查询到了未消耗商品订单,核实已发货后,再调用 consumeOwnedPurchase 接口进行商品消耗。
文档参考链接:
更多关于HarmonyOS鸿蒙Next中华为应用内支付调用consumeOwnedPurchase接口消耗商品失败:“returnCode 60001, message purchaseToken is null or empty”的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于HarmonyOS鸿蒙Next中华为应用内支付调用consumeOwnedPurchase接口消耗商品失败:“returnCode 60001, message purchaseToken is null or empty”的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
该错误表明在调用consumeOwnedPurchase
接口时,purchaseToken
参数为空或无效。可能的原因包括:
-
未正确获取或传递
purchaseToken
:在调用consumeOwnedPurchase
之前,确保已通过queryOwnedPurchases
接口正确获取到purchaseToken
,并将其传递给consumeOwnedPurchase
接口。 -
支付流程未完成:确保用户已完成支付流程,且支付状态为成功。如果支付未完成,
purchaseToken
可能无效。 -
网络或服务器问题:检查网络连接和服务器状态,确保接口调用时网络正常。
建议检查代码逻辑,确保在调用consumeOwnedPurchase
之前正确获取并传递purchaseToken
。