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

news/2024/11/8 5:48:27/

华为应用内支付服务(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. 当前登录的华为帐号属于沙盒帐号
  1. VersionCode大于应用市场线上版本(该APK暂未发布应用市场,所以应用市场返回的版本号为0)

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

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

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

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

b)查看支付报表

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

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

了解更多详情>>

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

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


http://www.ppmy.cn/news/662229.html

相关文章

网络支付的安全解决办法 思考

干支付三年,接触最多的还是网络支付,也接触了些传统支付项目,在现在支付安全性上系统还是做了很多的保障的,这里也是对照思考一下。 支付的安全问题与需求 网络支付因涉及到最敏感的资金流动,所以是最需要保证安全的…

工商银行网上支付开发

刚开发完工行网上支付接口。看过很多人也问过、写过这类的文章,内容和开发文档中一致,没什么纰漏。但实际开发中会遇到很多的小细节,在这里就遇到的问题和具体的开发例子说一说。 我的开发环境vs.net2003,语言C#。准备工作,按照文档里注册com组件、拆分证书并安装。开发文…

网上支付 之 网银接口使用

http://www.chinabank.com.cn/gateway/help.shtml 下载chinabank后, 有个接口文档/jsp ChinaBank.html(支付页,自动转发到Send.jsp),支付后返回到chianbank/Recieve.jsp 1.签同后,有个商户号码,注册个用户名 ,登陆到 https://merchant3.chinabank.com.cn/ 找到 b2c/MD5密…

微信H5页面支付时出现错误:下单账号和支付账号不一致,请核实后再支付

前言 微信公众号挂H5页面H5页面负责下单并支付 微信调起“下单账号和支付账号不一致,请核实后再支付” 微信支付的流程为:先下单,再支付。下单:在服务端,调用微信支付的相关接口,进行下单。下单时&#…

银联支付接口常见问题

1) 开发过程中,报157错误。 答:看下GATEID是不是写了0001,如果是的话,把0001删掉。 2) 网上支付后,点提交时,页面提示:标准数据域不能为空怎么办? 答:商户自…

各银行网上支付接口 开通流程及所需材料 中、农、建、工

银行支付接口开通流程: 建设银行: 商户在建设网银系统开户流程: 1、申请材料: (1)营业执照复印件 (2)组织结构代码证复印件 (3)法人代表身份证复印件 …

对接支付宝服务商当面付手机网页支付

一、前期准备: SpringBoot对接支付宝当面付和手机网站支付_springboot 支付宝当面付_Biubiubiuexo的博客-CSDN博客 配置成功后获得到我们开发需要的:支付宝公钥、商户私钥、应用ID 服务商开通链接:支付宝服务商平台开通服务商之后获取app_au…

微信支付提示支付失败,但所有流水状态是成功的

因为微信返回的res.err_msg值,微信也不能保证一定准确,所以本人是根据订单的状态值来判断订单是否支付成功。此后出现了一些异常事件:1.有用户对同一商品购买了两次,原因是商城购买后弹框提示支付失败,但都扣款成功。2…