华为的应用内支付服务(In-AppPurchases)通过简单的接入流程为用户提供良好的应用内支付体验。在实际接入过程中,有开发者反映在测试过程中支付页面无法正常打开。下面将详细分析出现问题的五种情况,并给出解决方案,希望能为遇到类似问题的开发者提供参考。场景一:AGC控制台API管理中的支付API已开通,创建的产品也已生效,但查看日志报60002错误原因分析:需要使用支付公钥验证IAP请求结果签名,SHA256WithRSA签名校验。经核实,公钥开发者并未配置。解决方法:请仔细检查是否设置了以下三点:(1)在API管理中启用了支付API(注意:用户开通IAP服务,大约需要半个小时才能生效)。详情请参考官方文档。(2)确保公钥开关已激活,公钥使用正确(3)在AGC后台PMS(产品管理系统)上配置相应类型的产品,激活成功情况2:开发者进入会员中心编辑订阅页面,显示异常,报错60051。查看官网文档,错误码60051表示已购买的产品或订阅产品无法再次购买;原因分析:复现问题时发现订阅完成返回会员中心后有刷新动作。刷新前点击订阅会出现异常。刷新后点击正常。这是因为如果没有刷新或者刷新不及时,就会有最后缓存的数据。点击订阅商品后,立即点击订阅其他商品时,会带入第一个订阅的商品id,但id不是最新购买的订阅商品id,导致数据不匹配,最终导致报错。无法显示编辑页面。解决方案:建议开发者优化页面效果的刷新时机,避免不刷新就更新。场景三:使用华为手机调试支付报错60003,但在PMS系统中发现产品ID配置没有问题。原因分析:首先,60003错误一般是PMS系统中商品信息配置问题导致的。您可以进入AGC网站后台,我的申请->操作->产品管理->产品列表查看对应的产品是否存在或是否需要,信息是否正确完整(如产品名称,产品ID、价格、产品类型、激活与否)。另外可以检查客户端代码中产品ID是否填写正确,与AGC后台的产品ID是否一致。请重点检查客户端代码中传入的字段是否有问题。另外需要注意的是,在设备上登录的华为账号的服务位置是否在IAP覆盖范围内。您可以调用TaskisEnvReady()接口判断设备当前登录的账号服务国家/地区是否为华为支付服务支持结算的国家/地区。解决方案:经过CP排查,发现客户端代码传入的商品ID与AGC后台配置的商品ID不一致,修改后问题解决。场景四:调用支付拉起收银界面。成功支付页面第一次成功启动,然后点击取消返回。为什么第二次继续调用该接口后,支付页面打不开?原因分析:购买消耗品后,必须先完成该商品的消费,才能再次购买,否则会报60051等错误码。解决方案:对于易耗品,开发者需要在以下四种场景下触发订单补货机制:当应用启动时当购买请求返回-1(OrderStatusCode.ORDER_STATE_FAILED)当购买请求返回60051时(OrderStatusCode.ORDER_PRODUCT_OWNED)当购买请求返回1(OrderStatusCode.ORDER_STATE_DEFAULT_CODE),如果IAP后台配置的退款回调地址错误,需要重新配置。详情请参考文档。除了无法启动支付页面的问题,如何确认是否进入沙盒环境也是一个普遍的问题。场景五:使用沙箱账号测试时,沙箱环境侧边没有弹出通知框,如何确认是否进入沙箱环境?原因分析:首先,进入沙盒测试环境。一般情况下,会显示如下弹框。但是在满足了沙盒环境的两个必要条件后,仍然无法提示对话框。这是否意味着您没有进入沙盒测试?下面是开发者通过isSandboxActivated接口打印的相关数据。从打印的日志来看:满足沙箱环境的两个必要条件。当前登录的华为帐号属于沙盒账号且VersionCode大于应用市场上线版本(APK尚未发布到应用市场,所以应用市场返回的版本号为0).从结果可以看出,理论上应该是进入了沙盒测试环境。.那么有没有其他方法可以确认呢?解决方法:是否成功进入沙盒环境,可以通过以下方法排查a)查看退回的购买数据,参考下图:如果华为订单号payOrderId以SandBox开头,则该订单属于该订单由沙盒测试生成。b)查看付款报告您可以查看付款报告。如果支付报告没有订单,说明订单来自沙盒测试。(注意:支付报表数据不是实时更新的,如果是当天购买的订单,为了判断准确度,可以在次日刷新报表验证)c)清除HMSCore缓存。您可以尝试清除HMSCore缓存。字段标识是用来判断的,可能因为缓存的原因没有及时刷新值。缓存清理可以通过设置->应用和服务->应用管理->HMSCore进行。更多详情>>访问华为开发者联盟官网获取开发指导文档华为移动服务开源仓库地址:GitHub、Gitee关注我们,第一时间了解HMSCore最新技术资讯~