合作咨询
我们的专家服务团队将竭诚为您提供专业的合作咨询服务
如果您在下面没有找到需要的问题,请加入Stack Overflow社区参与讨论。
出现6003错误是由于指纹证书配置不一致导致的,请从以下方面检查:
有,现在必须使用SHA256算法。
不是必须的。在订单/订阅关键事件需要回调通知开发者服务器时打开,具体参考接收订单/订阅关键事件通知。
出现该情况可能是开通了团队帐号能力的开发者,团队帐号下各个开发者帐号的权限不一样,出现该提示表示当前登录帐号无操作权限,可使用团队帐号的管理帐号登录并操作。
PKCS8。
IAP公钥可以暴露在客户端,建议客户端实时从服务器获取,不要固化在客户端,避免后续密钥升级导致的客户端版本不兼容。
不可以。
该错误表示支付服务未开启或开启异常。需要打开支付服务开关并配置支付服务参数。
开启方法:进入AppGallery Connect“我的项目”页面,执行如下操作:
长度是随钥匙规格而定的,不是定长的。后续会升级到3072位或更长,建议在数据库中使用text类型存储。
该默认价格在AppGallery Connect页面其他地方涉及商品价格展示时使用。
不会,除非您自己修改。
做了调整,具体调整规则请参见换算规则。
请对以下项目进行自检:
检查使用的公钥在不同语言和版本下是否存在排版问题。
比如在PHP版本上每行32字符可以正常验签,每行64字符就验签不通过,每行回车必须是硬回车。
若您有架设服务器,建议您在服务器执行签名校验。
是的,现在华为开发者联盟上要求配置的就是SHA256指纹。
1203错误码表示请求参数错误,子错误码12303表示请求中的client_id在系统不存在,详细错误码说明请参见基于OAuth 2.0开放鉴权。
请务必保证请求参数中的client_id为appid,client_secret为appsecret。
该接口请求头需要使用AccessToken进行鉴权,目前华为侧提供了两种方式,该接口使用客户端密码模式,建议您优先请参见基于OAuth 2.0开放鉴权检查获取方式是否正确。
建议优先检查获取AccessToken时的appid和实际请求参数purchaseToken关联的appid是否同一个。
请检查使用的AccessToken与应用是否匹配。
IAP SDK 4.0已经没有支付回调了,需要客户端APK支付完成后主动通知自己的服务器,服务器通过Order服务验证购买Token接口主动向华为请求验证订单情况。
900030-authorization format invalid:验签数据格式无效。可能的错误有:
详细要求请参见公共说明。
notificationType为9:一个已经到期的订阅进入帐号保留期。
购买订阅型商品,第三方扣款后,华为服务器长时间没收到付款成功消息返回,导致订单超时,此时华为服务器给游戏发送on hold(即notificationType为9)通知。
Order服务验证购买Token接口只针对非订阅型商品,订阅型商品请参见Subscription服务验证购买Token。
按照要求如果频繁申请会被流控,AT的时效为3600S。access_token在有效期内尽量复用,业务根据这个有效时间提前去申请新access_token即可。
场景一:您先调用了consumeOwnedPurchase接口,再进行发货,该场景下如果发放道具失败,后续会导致无法触发补单机制,从而导致大量掉单,会收到了大量客户的投诉。
解决方案:严格按照IAP开发者文档操作,先进行发货操作,再调用consumeOwnedPurchase接口。
样例:XX应用解决该问题后,当月掉单从90单降低到4单,掉单率下降了95.5%。
场景二:您定义一种限量商品,当商品数量不足直接换成其他等额的商品发放给用户,导致用户认为没有到账而发起投诉。
解决方案:您应该将商品定义分开,一个商品ID对应一类商品,当限量商品数量不足时应该提示用户无法购买。如果要换成等额商品卖给用户必须清楚地告知用户当前付款后将会买到的商品是什么,需要在用户点击确认支付的时候才能触发付款。
样例:XX应用在用户购买限量道具数量不足时,直接将等额的游戏金币代替道具发放给用户,用户认为充值没有到账而投诉,投诉量达到20+。按照解决方案整改后,未再出现该问题。
场景三:用户发起购买后,您应用调用consumeOwnedPurchase接口失败,导致用户再次购买同样商品时,返回60051错误码,无法购买成功。
解决方案:您应严格按照开发文档指导,当购买接口返回60051时立即触发补单机制,避免用户无法购买该商品,同时在发货成功后,如果消耗失败,可进行重试以提高消耗成功率。
样例:XX应用客户端返回60051时没有触发补单机制,导致用户尝试十几次购买全部失败而放弃购买。按照解决方案整改后,未再出现该问题。
401表示AccessToken失效了,建议您重新获取AccessToken。
非消耗型商品支付后无需消耗,目前是所有已购非消耗型商品会一直在obtainOwnedPurchases接口返回,相当于要一直提供对应服务,您可以自行判断是否有发货。已经提供服务的要继续提供(这个看您自身的设计),没有确认的就要发货和进行确认。具体流程请参见提供非消耗型商品对应的服务。
查询一次性商品时只返回已激活的商品,订阅型商品则都返回,可根据返回的商品信息中的status字段加以区分。
续订场景下,subscriptionId是标识用户与商品之间的一一对应关系,所以是不会变的,您可以用这个字段关联标识自己的订单ID。
举个例子,发起订阅型商品购买时,支付请求中存在developerPayload字段,您可以通过这个字段关联自定义的订单ID,支付完成后可以拿到subscriptionId订阅ID信息,开发者服务器保存这几个信息的关联关系。
后面玩家续订成功后,华为会给您发送订阅关键事件通知,包含订阅ID信息(订阅ID关联用户和商品,是不变的)和华为生成的新订单id。
此时您可通过订阅ID唯一查询出来之前这个用户首次订阅的自定义字段developerPayload(或者说订单ID)。
有,请勿超过200条。
各个Token是独立的,有效期内都是有效的。但是当前一个服务器1个小时内申请不可超过2个,否则会触发流控。
如果您存在多个服务器或一个服务器开启多个进程申请了Access Token,请参见Access Token流控机制进行处理。
需要在华为开发者联盟上配置证书指纹。
否,非消耗型商品的购买将记录在华为应用内支付服务器上,重新安装该应用程序不会影响购买记录。
不会自动取消。
沙盒测试环境下,可以调用消耗接口对非消耗型商品进行消耗,消耗成功之后即可再次购买非消耗型商品,而无需创建多个测试帐户。
可以,但测试设备必须安装HMS Core(APK),否则服务将不能正常运行。 为了稳定起见,建议使用华为设备进行测试。
沙盒功能需要同时满足两个条件:沙盒测试帐号添加成功+测试包的versionCode大于上架版本的versionCode。IAP SDK 4.0.2版本新增isSandboxActivated接口用于检查当前是否处于沙盒环境,并返回沙盒环境不可用的原因。具体请参见沙盒测试。
是正常的。当HMS Core(APK)版本小于4.0.2.300时,在沙盒环境下创建一次性商品订单,本质是创建一个已经完成了的支付订单,即使中途取消还是会成功购买这个商品。
具体说明可参见沙盒测试。
可能原因:该银行卡支付被风控了,建议更换支付方式或更换银行卡支付。
不会,只有真实支付的才会记录。
非华为手机存在兼容性问题,建议使用华为手机测试,部分第三方手机可通过如下方式解决该问题:
商品类型为消耗型商品或非消耗型商品时, subIsvalid始终为false。
商品类型为订阅型商品时,subIsvaild为true表示商品已经收费且未过期,也没有发生退款,您可以基于该标志为用户提供服务。为false表示未完成购买或者已经过期,或者购买后已经退款。同一个商品,在沙盒环境下续期最多支持6次,即使后面再尝试续期,也不能再次续订了,状态会一直保持过期状态。正式环境不会有这个限制。
不会扣款,其他与正式环境一致,比如订阅场景下的关键事件回调通知也会存在。
1. 沙盒环境下支付都是立即完成并且一定成功,不会真实扣费;
2. 沙盒环境下支付订阅型商品不会扣款、订阅周期缩短、订阅续期最大支持5次。
3. 沙盒环境下暂不支持测试订阅下周期生效的场景。
可调用服务器的撤销订阅接口撤销该订阅,每次撤销后重新订阅都会再次自动续期5次。
发邮件给hmsiap@huawei.com,邮件标题为“订阅业务微信模板申请”。
填写申请表,含APPID、应用名称、模板文字内容、扣费周期、价格等信息,界面提示申请注意事项,请参见微信自动续费申请模板.xlsx。
填写要求:
申请周期为7个工作日,还请耐心等待,申请结果通过hmsiap@huawei.com反馈给您。
发邮件给hmsiap@huawei.com,邮件标题为“xxx申请非PMS支付白名单”。
填写申请邮件,含应用ID、应用名称、自检项等信息。
应用ID:XXX
应用名称:XXX
自检项:
1、注意应用ID、应用名称填写正确。
2、业务需要完整填写备案申请中的自检项。
申请周期为7个工作日,还请耐心等待,申请结果通过邮件反馈给您。
发邮件给hmsiap@huawei.com,邮件标题为“xxx申请PMS支付白名单”。
填写申请邮件,含应用ID、应用名称、自检项等信息。
应用ID:XXX
应用名称:XXX
自检项:
1、注意应用ID、应用名称填写正确。
2、业务需要完整填写备案申请中的自检项。
申请周期为7个工作日,还请耐心等待,申请结果通过邮件反馈给您。
返回全价。
实时的,客户端触发场景后,华为服务器会在几秒内通知开发者服务器。
目前,调用支付接口和拉起支付页面是分开两步的,如果由于网络问题导致支付长时间在接口处没有返回,您可以允许用户重复拉起。但是您也需要对后面重复返回的接口内容,做重复处理,防止两次拉起页面。
时间从扣费成功开始算,即5月3日。
有两种可能:
当前设备登录的华为帐号服务地 (查看方法:) 必须在您的应用发布的国家/地区范围内,才允许支付。您可参见设置发布国家或地区查看您的应用发布的国家或地区。
如需完成支付,可在设备上切换华为帐号服务地后重试。
是的,目前支付只有一种UI界面。
有限制,在PMS上按照商品价格模板进行配置。
签名必须是SHA256,验签可以根据回调中signType确定。
4.0订单都是托管的,即支付成功后的订单号,都是华为返回的。具体支付请求字段严格按照4.0文档接入即可。
不是,次日可见。
商户请求号,是客户端在调用createPurchaseIntent接口发起支付请求后,由华为服务器生成的本次发起支付的唯一性标识,该标识会返回给客户端。
HMS2.0订单:点击补发,触发华为支付服务器向开发者服务器发送支付成功回调。
HMS4.0订单:点击补发,触发华为支付服务器向华为IAP服务器发送支付成功回调,您不会接到支付成功回调。
SDK4.0订单id全托管,即支付完成后,由华为服务器生成华为订单id(payorderId)或商户请求号(requestId/orderId)返回给客户端。
createPurchaseIntent接口返回payorderId和orderId,对应华为后台报表下的华为订单id和商户请求号。
手机客户端根据当前华为帐号所属的服务地(查看方式:)展示当地价格和单位。
可以,AppGallery Connect网站创建订阅型商品时,可以通过设置促销价格为免费来实现,促销价格包括免费和折扣价格。
每个月的真实天数。订阅的续期日是用户最初购买此订阅的日期,即初始日期。例如:1月9日开始,将于2月9日续期。但如果初始日期在下个月中不存在,则订阅将于下个月的最后一天续期;初始日期一旦再次出现,续期日便恢复为该日期。例如:用户于1月30日开始订阅,则下一个续期日是2月28日(或闰年2月29日),再下一次是3月30日。
用户可通过如下方式取消订阅:
是正常的,如果是在支付宝/微信应用内取消自动续费协议,华为应用内支付服务器会在这笔订阅续期的时候发送失败通知,而不是针对解约来做通知。
您可以通过续期失败的服务器关键事件通知里的expirationIntent来判断(3表示用户签约信息异常)是否是该场景。
您的应用在调用客户端购买接口首次订阅商品时,会收到支付结果,同时华为应用内支付服务器会向您配置的订阅事件通知地址发送订阅关键事件通知。订阅后期续费时,华为应用内支付服务器会向您配置的订阅事件通知地址发送续订成功事件通知,您可以在收到通知后进行相应的处理。
华为应用内支付服务器会发送ON_HOLD(9)的订阅关键事件通知到您配置的订阅事件通知地址;用户会收到续期失败的push通知。
不能的。目前订阅型商品会在到期前24小时的时候开始尝试提前扣费。
没有的。下期扣款时间在订阅到期前24小时内。您可通过订阅后返回的InAppPurchaseData数据中的expirationDate获取订阅本周期的到期时间。
商品到期前10天华为应用内支付服务器会获取商品的价格、状态信息,如果涨价,获取到价格后会发送涨价的push通知给用户。
是正常的,非立即扣费的场景,在订阅收银台会显示支付金额为0。
不影响已订阅用户,已订阅的商品仍然可以正常续期。
免费试用活动已生效的订阅型商品可以修改试用活动的结束时间,但是无法修改试用周期。若想修改该周期,可以先结束原有的试用活动,然后重新设置。
如果结束原有的试用活动,已经购买的用户服务会继续生效,在原试用时间结束后恢复非试用价格。
目前没有服务端接口支持该能力,建议您通过IAP SDK提供的客户端接口obtainOwnedPurchaseRecord查询订阅型商品或消耗型商品的所有历史购买数据,或通过obtainOwnedPurchases查询非消耗型商品的所有购买数据。
是的,只有实际支付金额,具体可参见InAppPurchaseData。
否,这是订阅流程的一部分。
是正常的,purchaseTime实际是指商品生效时间,不是实际扣款时间。
是的。订阅商品权益的发放不要依赖订阅关键事件的通知类型,因为订阅关键事件回调通知是异步的,且受网络传输等影响,可能存在数据不一致的情况,比如玩家先订阅后取消,异常情况下,取消的订阅关键事件回调先返回,订阅的关键事件后返回,此时如果依靠关键事件回调做权益发放,可能会导致发货异常。建议在接到订阅关键事件回调通知后,调用Subscription服务验证购买Token接口查询商品的最新状态。
订单/订阅关键事件通知地址统一在华为AppGallery Connect配置,不区分测试和正式环境。如果您确实需要测试该回调地址,可以在AppGallery Connect创建新的测试应用,通过测试应用完成回调测试。
用户从服务地A切到服务地B时,IAP订阅系统会保留用户在服务地A的订阅数据(包括收据),但会自动取消用户在服务地A的全部订阅,终止其续期,在当前周期结束之前,订阅仍生效,当前周期结束之后,订阅将不再续期,变为已到期状态。
建议保留作为兜底保障,以防服务器出现网络等异常导致掉单问题。
请参见配置支付服务参数配置通知地址,保存后一般3-5分钟即可生效。
暂时没有限制,后续可能有规划。
不会。
30天。
不会,一直保留直到补单成功。
用户支付时登录的华为帐号所在的服务地,用户可以打开手机查看。
该错误表示您验签时使用的IAP公钥长度有问题,建议您参见查询支付服务信息获取IAP公钥。
不可以,获取商品信息前必须登录。主要基于两点:
调用obtainProductInfo前需要您先调用isEnvReady接口,通过isEnvReady接口返回的IapApiException中的Status对象处理未登录场景。
不提供,当前仅支持使用IAP客户端obtainProductInfo接口来获取商品的详细信息。
是的。
正常的,该情况是因为网页支付宝会概率出现支付成功后,一直没有回调给华为的情况,此时,华为页面会呈现转圈,一直等待支付宝回调的现象。
出现该现象时,用户可以去中查看该笔订单是否支付成功;或者引导玩家安装支付宝客户端减少此类问题。
不会立即生效,一般在10分钟内生效。
不可以。
当前不支持。
可以。
可以,实现该功能需要:
不可以,沙盒支付的条件之一是测试应用的APK版本号大于当前在线版本。
建议您抓取客户端日志,搜索关键字hms_pay关键字进行定位:
请参见开通服务检查支付服务是否正常开启并成功获取到IAP公钥。
请参见集成HMS Core SDK检查您的agconnect-services.json是否正确放置在应用级根目录下。
如果上述方案均无法解决您的问题,请联系华为技术支持人员或进行在线提单。
不影响。华为IAP兼容老版本逻辑和支付公钥。
华为应用内支付基于用户使用的华为帐号所在服务地来提供服务,与开发者应用的IP地址无关。 例如,若用户的帐号服务地为新加坡,只要开发者应用发布地包含新加坡,则用户在各个区域都可使用新加坡货币完成支付。
这个是正常的,免费试用模式下,订阅不会产生费用,应用内支付服务器会为此类订单的payOrderId添加"SandBox"前缀。
请检查购买的商品是否是0元商品,如果是则为正常现象,该场景不会拉起IAP收银台。
纯客户端的开发也可以支持应用内支付功能,服务器开发不是强制的。
暂不支持,当前只能通过Activity获取结果信息。可通过Activity回调信息给Fragment进行处理。
可从以下三个方面排查问题。
用户可能禁止了新HMS Core(APK)的自动更新。当新HMS Core(APK)版本过低时,开发者应用调用IapClient相关接口时可能会一直返回-1错误码。可检查是否需要更新HMS Core(APK)。
部分国家/地区支持话费支付,具体可参见华为IAP范围覆盖。在这种情况下,华为将发生的费用提交给运营商,运营商按照用户选择的方法处理费用。
使用此支付方式时,用户需同意华为应用内支付服务条款,该服务条款可在查看。使用此方式完成交易时,用户需要输入相关的手机号码并选择正确的移动运营商。交易完成后,使用的手机号码将与该华为帐号绑定,可在未来的华为应用内支付交易中选择已绑定的号码完成支付。
如果用户购买了订阅型商品,只要交易成功,并且您设置了订阅通知地址,IAP服务器会发送通知到您的服务器。
如果用户购买了非订阅型商品,您的应用可调用obtainOwnedPurchases接口查询已购商品的购买信息,并将获取到的购买信息发送至您的服务器。
没有固定的周期。华为运营人员根据实际需要调整汇率。
当前支持100个。
订阅型商品被创建后,不允许更改其订阅组信息,无论该订阅组是激活还是停用。
可在AppGallery Connect网站商品管理页面中导出商品列表。
可参见自助结算指南查看商品产生的收益结算单并申请结算。
请检查是否已在AppGallery Connect网站上配置订单/订阅通知地址,具体可参见配置订单/订阅通知地址。
您的应用的应用名和包名不能包含符号&。
不会更改。取消订阅时,订阅不会立即变成已到期状态。订阅进入已到期状态后,正常情况下已到期订阅会具有保留期(保留期详见以下说明),在保留期前恢复订阅,subscriptionId均保持不变。只有在超过保留期后再次发起订阅,才会生成新的subscriptionId。
失效订阅的保留期:
正常的,购买订阅型商品涉及到续订,需绑定真实的银行卡进行签约,但实际测试时不会产生扣费。
IAP的沙盒测试没有提供任何虚拟银行卡,您需要使用自己的银行卡。
请检查您是否正确执行了混淆,此错误通常在混淆未配置或未完全配置时返回,具体请参见配置混淆脚本。
请检查工程中“agconnect-services.json”文件的应用包名是否正确,同时检查应用级“build.gradle”文件中的证书签名是否正确。
如果确认该信息正确后,结果仍然没有变化,则可能是HMS Core(APK)缓存造成的。卸载并重新安装HMS Core(APK),断开并重新连接手机网络,重新启动应用。
如果上述方案均无法解决您的问题,请联系华为技术支持人员或进行在线提单。
Debug包使用的签名文件与Release包使用的签名文件不同。可在Release包中使用与Debug包相同的签名文件。
您不需要在“AndroidManifest.xml”中添加此权限。
不支持。您的应用只能通过使用obtainProductInfo接口查询指定productId的商品的详情信息。
不支持。同一个productId只能使用一次。
在Google Play中发布的应用也可以访问华为应用内支付。
不支持。
您可通过obtainOwnedPurchaseRecord接口获取消耗型商品的历史购买数据。
您可使用getMicrosPrice方法获取的商品微价格/1000000来获得实际价格。
Huawei Pay与微信或支付宝类似,用户可以在IAP收银台页面使用Huawei Pay。
不会。
用户订阅之前,需要同意华为应用内支付服务条款,该服务条款可在中查看。用户只有在同意服务条款后,才能使用订阅。
Android 11更改了应用查询同一设备上其他已安装的应用以及与之交互的方式。您应用的targetSdkVersion是30或者更高版本,并且集成6.1.0.300之前版本的IAP SDK时,将无法访问HMS Core(APK),并且持续提示升级。
您可以通过以下两种方法解决。
升级IAP SDK至6.1.0.300及以上版本,版本信息请参见版本更新说明。
如果不升级SDK,需要在“AndroidManifest.xml”中manifest下添加<queries>标签。
- <manifest ...>
- ...
- <queries>
- <intent>
- <action android:name="com.huawei.hms.core.aidlservice" />
- </intent>
- </queries>
- ...
- </manifest>
<queries>标签对工具的要求如下:
如果您提供的证书在IAP服务内置信任库中查询不到,则该证书不被IAP信任,您需要构造完整的信任链以被IAP信任。
此处以Chrome浏览器最新版本(一般是支持自动验证证书链)为工具,以华为的证书为例,手工构造完整的证书链步骤如下:
您也可以选择其他证书链工具构造完成的证书链。
访问华为开发者网站, 单击浏览器前的锁,可查看证书状况,如下图所示:





IAP服务器内置了如下92个证书,请检查您的证书链,确保证书链的完整性,同时确保您的证书链中的证书在IAP服务器支持证书.xlsx中。
如果证书链存在问题,请参见如何解决证书链不完整。
payOrderId 指交易单号,用户支付后由华为服务器生成;
orderId 指订单ID,唯一标识一笔需要收费的收据,由华为应用内支付服务器在创建订单以及订阅型商品续费时生成。