HarmonyOS鸿蒙Next中华为快游戏支付验签失败,原因竟是设置的最小平台号版本过低
HarmonyOS鸿蒙Next中华为快游戏支付验签失败,原因竟是设置的最小平台号版本过低 现象描述:
快游戏支付验签时,客户端按照官方文档,通过查询用户已购买的商品数据(qg.obtainOwnedPurchases(OBJECT)(1103+)),拿到 inAppPurchaseDataList(数组)和 inAppSignature(数组)。从 inAppPurchaseDataList(数组)取出第一条 json,以及对应的 inAppSignature。使用 IAP 私钥进行签名验证时,发现失败。
但是通过上面第一条数据中的 purchaseToken 和 productId,去华为应用内支付服务器(Order 服务验证购买 Token)取回购买数据 purchaseTokenData 后验签成功。对比发现和 inAppPurchaseDataList(数组)取出第一条 json 数据内容一致,但顺序不一致。
至此有所猜测。
问题原因:
华为快游戏最新版本的支付接口,接口要求的最小平台版本是 1103。但我们在打包快游戏时,填写最小平台号 minPlatformVersion 版本较低,导致其返回的验签数据 JSON 字符串顺序有问题。
解决办法:
华为快游戏最新版本的支付接口,接口要求的最小平台版本是 1103。打包快游戏时,经过反复测试,填写最小平台号 minPlatformVersion 需要大于 1078,返回的顺序才是正确的,否则就会乱序。按照官方文档推荐,我们要使用支付接口推荐的 1103 平台版本。修改之后返回的 JSON 数据格式顺序 ok,支付验签通过。
以下是正确顺序的 JSON 字符串数据:
"{\"autoRenewing\":false,\"orderId\":\"2023XXXXXXX19169996958e5881.10XXX4507\",\"packageName\":\"com.huawei.fastapp.dev\",\"applicationId\":10XXXX507,\"applicationIdString\":\"10XXXX507\",\"kind\":0,\"productId\":\"Commodity_price_1\",\"productName\":\"1元档位\",\"purchaseTime\":167XXXXXXXX000,\"purchaseTimeMillis\":1678XXXXXXXX000,\"purchaseState\":0,\"developerPayload\":\"30100XXXXXXXXXXX7\",\"purchaseToken\":\"00000XXXXXXXXXXXXXXdf0b33efa74d7b5a43e034807626d731e856fb13999a69747e236db053b5b6b0cx434e.1.10XXXXXXXXX07\",\"consumptionState\":0,\"confirmed\":0,\"currency\":\"CNY\",\"price\":100,\"country\":\"CN\",\"payOrderId\":\"A36b5aeb9fXXXXXXXXXXXXd6f4b463407\",\"payType\":\"4\",\"sdkChannel\":\"1\"}"
更多关于HarmonyOS鸿蒙Next中华为快游戏支付验签失败,原因竟是设置的最小平台号版本过低的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于HarmonyOS鸿蒙Next中华为快游戏支付验签失败,原因竟是设置的最小平台号版本过低的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
华为快游戏支付验签失败,通常是由于设置的最小平台号版本过低,导致与当前系统或支付接口不兼容。建议检查并更新minPlatformVersion
至最新版本,确保其与当前HarmonyOS版本匹配。同时,验证签名算法和密钥配置是否正确,确保支付流程符合华为快游戏的最新规范。