【FAQ】应用内支付服务无法拉起支付页面常见原因分析和解决方法

  • Post category:Android

华为应用内支付服务(In-App Purchases)通过简便的接入流程为用户提供良好的应用内支付体验,然而在实际接入过程中,有一些开发者反馈测试时会无法正常拉起支付页面,下文将详细分析问题出现的5种情形,并给出解决方案,希望给遇到类似问题的开发者提供参考。

情形1:AGC控制台上API管理中的支付API已打开,创建的商品也生效了,但查看日志发现报错60002

原因分析:对IAP的请求结果验签时需要使用支付公钥,进行SHA256WithRSA签名校验,此公钥开发者未配置。

解决方法:请仔细检查以下三点是否设置:

(1)API管理中支付API已打开(注意:用户在开通IAP服务,半个小时左右才起效)
详情可参考官方文档

(2)确保公钥开关激活打开,且公钥使用正确

(3)在AGC后台PMS(商品管理系统)上配置了相应类型的商品,并激活成功

情形2:开发者进入会员中心编辑订阅页面,显示异常,报错60051

查看官网文档,错误码60051表示已购买型商品或者订阅型商品,不能再次购买;

原因分析

复现问题时我们发现,订阅完成返回会员中心有个刷新动作,在刷新前点击订阅会异常,刷新后点击就是正常的。这是因为如果没有刷新或者刷新不及时,会存在上一次的缓存数据。在点击一个订阅商品之后,立即再点击订阅另一个商品的时候,会把首次订阅的商品id带入,但该id并不是最新购买的订阅商品id,从而造成数据的不匹配,最终导致报错,无法显示编辑页面。

解决方法

建议开发者对页面效果刷新时机进行优化处理,避免未刷新就去续费。

情形3:使用华为手机进行支付调试的时候报错60003,但PMS系统中商品ID配置未发现问题。

原因分析:首先报错60003一般是在PMS系统中的商品信息配置有问题,可以到AGC网站后台,在我的应用->运营-> 商品管理->商品列表 ,查看对应商品是否存在或者必填的信息是否正确完整(例如商品名称,商品ID,价格,商品类型,是否激活)。

另外可以检查商品ID是否在客户端代码中填写正确,是否与AGC后台的商品ID保持一致,请重点检查客户端代码中传入的字段是否有问题。

还有一点需要注意的是在设备上登录的华为账号的服务地点是否在IAP覆盖的范围内。可以通过调用Task isEnvReady()接口判断当前设备登录的帐号所在的服务国家/地区是否在华为IAP支付服务支持结算的国家/地区中。

解决方案

经过CP排查发现是客户端端代码传入的商品ID和AGC后台配置的商品ID不一致,修改后问题已解决。

情形4:调用支付拉起收银台接口,第一次成功拉起成功支付页面,然后点击取消返回,第二次再继续调用该接口为什么无法拉起支付页面 ?

原因分析:购买消耗性商品后,必须要先完成商品消耗,之后才能再次购买,否则会报错60051等错误码。

解决方法:对于消耗性商品进行补单操作

开发者需要在以下这四种场景下触发补单机制:

· 应用启动时

· 购买请求返回-1(OrderStatusCode.ORDER_STATE_FAILED)时

· 购买请求返回60051(OrderStatusCode.ORDER_PRODUCT_OWNED)时

· 购买请求返回1(OrderStatusCode.ORDER_STATE_DEFAULT_CODE)时

如果IAP 后台配置的退款回调地址错误,需要重新配置。具体可参考文档

除了无法拉起支付页面的问题以外,如何确认是否进入沙盒环境也是一个常见的问题。

情形5:使用沙盒帐号测试,没有弹出沙盒环境端侧提示弹框,如何确认是否进入沙盒环境?

原因分析:首先进入沙盒测试环境,正常情况下会提示以下弹框

但是在满足了沙盒环境的2个必要条件后,仍然无法提示该对话框,是否表示没有进入沙盒测试?

以下是开发者通过isSandboxActivated接口打印出的相关数据

从打印的日志来看:满足了沙盒环境2个必要条件。

  1. 当前登录的华为帐号属于沙盒帐号

  2. VersionCode大于应用市场线上版本(该APK暂未发布应用市场,所以应用市场返回的版本号为0)

很明显从结果来看理论上应该进入了沙盒测试环境。那么有没有其他方法来确认?

解决方法:是否成功进入沙盒环境,可以通过以下几种方法排查

a) 查看返回的购买数据,参考下图:

如果华为订单号payOrderId以SandBox开头,那么表面该笔订单属于沙盒测试产生的订单。

b)查看支付报表

可以查看支付报表,如果支付报表没有该笔订单,说明该订单来自于沙盒测试产生的。(注:支付报表数据不是实时更新的,如果当天购买的订单,为了判断准确性,可以次日再刷新该报表验证)

c)清除HMS Core 缓存
可以尝试清除HMSCore缓存,端侧弹框是根据相应字段标识进行判断的,可能是缓存原因导致该值未及时刷新。可通过设置 –>应用和服务->应用管理->HMS Core 进行缓存清理。

了解更多详情>>

访问华为开发者联盟官网
获取开发指导文档
华为移动服务开源仓库地址:GitHubGitee

关注我们,第一时间了解 HMS Core 最新技术资讯~