问题描述
我们应用(非游戏)集成了华为支付IAP SDK,测试支付时总是提示“此交易被拒绝,请稍后再试。您也可尝试其他付款方式”。
问题定位
联系华为技术支持( 提个工单咨询 https://developer.huawei.com/consumer/cn/support/feedback ),他们表示该提示说明支付行为被华为限制了,一般会在用户频繁切换设备支付、频繁进行大额支付等场景,系统为了保护用户金额的安全,作限制处理。
如果不涉及这种情况依旧被提示,建议我们优先排查在华为AGC页面创建的应用类型是否为游戏:
-
如果是游戏,该报错可能是因为用户没有实名认证,当前国家版署要求游戏需要对未成年人进行支付额度限制,支付时如果没有实名,华为会做如上弹框提示,阻止玩家支付。
-
如果是非游戏,该报错可能原因如下:
- 客户端调用支付接口 createPurchaseIntentWithPrice 时,请求参数 setServiceCatalog 错误地使用了X6(表示游戏类型),导致系统认为我们应用是游戏,走游戏控制逻辑。具体接口描述参考:https://developer.huawei.com/consumer/cn/doc/development/HMSCore-References/purchaseintentwithpricereq-0000001054093693
- AGC控制台打开了游戏服务API开关,打开该开关,系统也会认为我们应用是游戏,走游戏控制逻辑。具体参考:https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/config-agc-0000001050166285#section1255164953515
经过定位,我们客户端 createPurchaseIntentWithPrice 接口传入的字段是对的,使用X5(表示普通应用),但是AGC后台打开了游戏服务开关。
问题解决
在华为技术支持的建议下,我们关闭了游戏服务的API开关。关闭开关之后,客户端测试支付时可能会因为HMS Core缓存原因支付仍不成功,可以参考如下方法清除HMS Core缓存,清除HMS Core缓存后IAP支付正常,问题解决:
手机中找到“设置-应用-应用管理-HMS Core”,点击进入到应用信息页,先多次点击“强制停止”直至该按钮变灰,再依次点击“存储-管理空间-清理数据”。