文档管理中心
我的

FAQ

本文导读
展开章节

如果您在下面没有找到需要的问题,请加入Stack Overflow社区参与讨论。

连接HMS Core(APK)出现6003错误,如何处理?

出现6003错误是由于指纹证书配置不一致导致的,请从以下方面检查:

  1. 确认证书指纹已经配置,并且本地客户端打包签名的证书和AppGallery Connect上配置的证书指纹是同一套证书。
  2. 检查证书中指纹条目,建议使用单条目。
  3. 如果配置完指纹,运行本地客户端仍然出现6003的错误,这是由于默认运行的是debug证书,请尝试清除HMS Core(APK)的缓存后再次运行。

App签名证书的签名算法为SHA1withRSA,对应用有影响吗?

有,现在必须使用SHA256算法。

AppGallery Connect“我的项目”中,左侧导航栏“盈利 > 应用内支付服务”,“配置”页签下的订单/订阅关键事件通知开关,是否必须打开?

不是必须的。在订单/订阅关键事件需要回调通知开发者服务器时打开,具体参考接收订单/订阅关键事件通知。

在AppGallery Connect中打开“应用内支付”功能时提示“商户认证不通过,请联系商户代表”。

出现该情况可能是开通了团队帐号能力的开发者,团队帐号下各个开发者帐号的权限不一样,出现该提示表示当前登录帐号无操作权限,可使用团队帐号的管理帐号登录并操作。

AppGallery Connect网站获取的IAP公钥的具体格式是什么?比如是PKCS1还是PKCS8。

PKCS8。

IAP公钥能暴露在客户端吗?

IAP公钥可以暴露在客户端,建议客户端实时从服务器获取,不要固化在客户端,避免后续密钥升级导致的客户端版本不兼容。

AppGallery Connect中可以配置多个订阅关键事件回调地址吗?

不可以。

App调用支付接口报错can't get applicationInfo by applicationId。

该错误表示支付服务未开启或开启异常。需要打开支付服务开关并配置支付服务参数。

开启方法:进入AppGallery Connect“我的项目”页面,执行如下操作:

  1. “API管理”页签下,打开应用内支付服务所在行开关。
  2. 左侧导航栏“盈利 > 应用内支付服务”,若“IAP”页签显示未生成IAP公钥,点击“设置”生成IAP公钥。

具体操作步骤请参见打开相关服务和配置支付服务参数。

AppGallery Connect获取的IAP公钥最大长度是多少?便于用户存储设置的最大长度是多少?

长度是随钥匙规格而定的,不是定长的。后续会升级到3072位或更长,建议在数据库中使用text类型存储。

AppGallery Connect商品管理页面,商品价格编辑界面的默认价格表示什么意思?

该默认价格在AppGallery Connect页面其他地方涉及商品价格展示时使用。

在AppGallery Connect中单独修改商品在某个地区的价格,以后汇率变动,是否会影响应用内的商品价格?

不会,除非您自己修改。

PMS价格展示是否做了数字调整?比如小数点第二位6/9等调整?

做了调整,具体调整规则请参见换算规则。

IAP接口验签时公钥如何获取?

若您使用3.0及以上版本的IAP SDK,请参见查询支付服务信息获取验签公钥。

其他版本验签时请参见文档获取验签公钥。

签名在服务器侧验证不通过,如何处理?

请对以下项目进行自检:

检查使用的公钥在不同语言和版本下是否存在排版问题。

比如在PHP版本上每行32字符可以正常验签,每行64字符就验签不通过,每行回车必须是硬回车。

签名校验是否可以都在服务端执行?

若您有架设服务器,建议您在服务器执行签名校验。

是否必须使用SHA256的证书才能通过验签?

是的,现在华为开发者联盟上要求配置的就是SHA256指纹。

服务器调用Order服务验证购买Token接口时,请求返回1203(子错误码12303)的错误码。

1203错误码表示请求参数错误,子错误码12303表示请求中的client_id在系统不存在,详细错误码说明请参见基于OAuth 2.0开放鉴权。

说明

请务必保证请求参数中的client_id为appid,client_secret为appsecret。

服务器调用Order服务验证购买Token接口时,提示missing required parameter: client_id,同时返回"sub_error": 20001,"error_description": "missing required parameter: client_id","error": 1102。

该接口请求头需要使用AccessToken进行鉴权,目前华为侧提供了两种方式,该接口使用客户端密码模式,建议您优先请参见基于OAuth 2.0开放鉴权检查获取方式是否正确。

服务器调用Order服务验证购买Token接口时,返回"responseCode":"6","responseMessage":"rights invalid"。

建议优先检查获取AccessToken时的appid和实际请求参数purchaseToken关联的appid是否同一个。

调用服务器接口时,返回"responseCode":"6","subErrCode":"209","responseMessage":"rights invalid"。

请检查使用的AccessToken与应用是否匹配。

IAP SDK 4.0没有支付回调了吗?

IAP SDK 4.0已经没有支付回调了,需要客户端APK支付完成后主动通知自己的服务器,服务器通过Order服务验证购买Token接口主动向华为请求验证订单情况。

服务器调用Order服务验证购买Token接口时报错:responseCode:"6","responseMessage":"900030-authorization format invalid"。

900030-authorization format invalid:验签数据格式无效。可能的错误有:

  • header的token需要做Basic加密。
  • Authorization的AT前没有拼字符串APPAT,正确的APPAT:thisIsAppAtValue。

详细要求请参见公共说明。

用户在购买订阅型商品后,华为应用内支付服务器向开发者服务器发送订阅关键事件通知,为什么返回接口中的notificationType字段为9?

notificationType为9:一个已经到期的订阅进入帐号保留期。

购买订阅型商品,第三方扣款后,华为服务器长时间没收到付款成功消息返回,导致订单超时,此时华为服务器给游戏发送on hold(即notificationType为9)通知。

购买订阅型商品后,开发者服务器调用Order服务验证购买Token接口时,返回{"responseCode":"6","responseMessage":"paymentToken siteID invalid"}。

Order服务验证购买Token接口只针对非订阅型商品,订阅型商品请参见Subscription服务验证购买Token。

购买token校验中的AT请求有频率限制吗?

按照要求如果频繁申请会被流控,AT的时效为3600S。access_token在有效期内尽量复用,业务根据这个有效时间提前去申请新access_token即可。

obtainOwnedPurchases接口的调用时机。

  • 应用启动的时候调用obtainOwnedPurchases接口,查询是否有掉单的订单存在,存在的话补发货,发货成功后调用consumeOwnedPurchase进行消耗。
  • 支付过程中如果有某些异常导致返回,调用obtainOwnedPurchases接口,查询这笔支付是不是已经支付成功了,如果有掉单,进行补单。
  • 之前已经买过了,但是没有消耗,支付的时候会返回60051,这个时候您也可以调用obtainOwnedPurchases接口,查看下是否存在掉单情况,进行补单。

经常出现掉单导致用户大量投诉、开发流程中容易出现的一些问题导致用户购买体验差,应该怎么处理?

场景一:您先调用了consumeOwnedPurchase接口,再进行发货,该场景下如果发放道具失败,后续会导致无法触发补单机制,从而导致大量掉单,会收到了大量客户的投诉。

解决方案:严格按照IAP开发者文档操作,先进行发货操作,再调用consumeOwnedPurchase接口。

样例:XX应用解决该问题后,当月掉单从90单降低到4单,掉单率下降了95.5%。

场景二:您定义一种限量商品,当商品数量不足直接换成其他等额的商品发放给用户,导致用户认为没有到账而发起投诉。

解决方案:您应该将商品定义分开,一个商品ID对应一类商品,当限量商品数量不足时应该提示用户无法购买。如果要换成等额商品卖给用户必须清楚地告知用户当前付款后将会买到的商品是什么,需要在用户点击确认支付的时候才能触发付款。

样例:XX应用在用户购买限量道具数量不足时,直接将等额的游戏金币代替道具发放给用户,用户认为充值没有到账而投诉,投诉量达到20+。按照解决方案整改后,未再出现该问题。

场景三:用户发起购买后,您应用调用consumeOwnedPurchase接口失败,导致用户再次购买同样商品时,返回60051错误码,无法购买成功。

解决方案:您应严格按照开发文档指导,当购买接口返回60051时立即触发补单机制,避免用户无法购买该商品,同时在发货成功后,如果消耗失败,可进行重试以提高消耗成功率。

样例:XX应用客户端返回60051时没有触发补单机制,导致用户尝试十几次购买全部失败而放弃购买。按照解决方案整改后,未再出现该问题。

开发者服务器调用华为的Order服务验证购买Token接口,接口消息返回401错误码。

401表示AccessToken失效了,建议您重新获取AccessToken。

非消耗型商品支付后掉单,调用obtainOwnedPurchases接口查询问题订单,如何知道是否有发货?

非消耗型商品支付后无需消耗,目前是所有已购非消耗型商品会一直在obtainOwnedPurchases接口返回,相当于要一直提供对应服务,您可以自行判断是否有发货。已经提供服务的要继续提供(这个看您自身的设计),没有确认的就要发货和进行确认。具体流程请参见提供非消耗型商品对应的服务。

客户端通过obtainProductInfo能够查询到未激活的商品吗?

查询一次性商品时只返回已激活的商品,订阅型商品则都返回,可根据返回的商品信息中的status字段加以区分。

续订场景下,有什么办法可以关联自己的requestId吗?

续订场景下,subscriptionId是标识用户与商品之间的一一对应关系,所以是不会变的,您可以用这个字段关联标识自己的订单ID。

举个例子,发起订阅型商品购买时,支付请求中存在developerPayload字段,您可以通过这个字段关联自定义的订单ID,支付完成后可以拿到subscriptionId订阅ID信息,开发者服务器保存这几个信息的关联关系。

后面玩家续订成功后,华为会给您发送订阅关键事件通知,包含订阅ID信息(订阅ID关联用户和商品,是不变的)和华为生成的新订单id。

此时您可通过订阅ID唯一查询出来之前这个用户首次订阅的自定义字段developerPayload(或者说订单ID)。

obtainProductInfo查询商品信息是否有数量上限?

有,请勿超过200条。

调用华为的Order服务验证购买Token接口时,多个服务器分别获取的AccessToken,同一个时间只有一个token有效还是多个token同时有效?

各个Token是独立的,有效期内都是有效的。但是当前一个服务器1个小时内申请不可超过2个,否则会触发流控。

如果您存在多个服务器或一个服务器开启多个进程申请了Access Token,请参见Access Token流控机制进行处理。

连接HMS Core(APK)出现907135702错误码,如何处理?

需要在华为开发者联盟上配置证书指纹。

有关非消耗型商品测试的常见问题。

  • 重新安装APK时,已购的非消耗型商品是否会被重置并支持再次购买?

    否,非消耗型商品的购买将记录在华为应用内支付服务器上,重新安装该应用程序不会影响购买记录。

  • 一段时间后会自动取消非消耗型商品的购买吗?

    不会自动取消。

  • 是否可以手动取消非消耗型商品的购买,以避免每次测试都需要创建单独的测试帐户的问题?

    沙盒测试环境下,可以调用消耗接口对非消耗型商品进行消耗,消耗成功之后即可再次购买非消耗型商品,而无需创建多个测试帐户。

可以使用非华为手机进行测试吗?

可以,但测试设备必须安装HMS Core(APK),否则服务将不能正常运行。 为了稳定起见,建议使用华为设备进行测试。

已经在华为控制台成功添加沙盒帐号,但是沙盒功能仍然无法使用。

沙盒功能需要同时满足两个条件:沙盒测试帐号添加成功+测试包的versionCode大于上架版本的versionCode。IAP SDK 4.0.2版本新增isSandboxActivated接口用于检查当前是否处于沙盒环境,并返回沙盒环境不可用的原因。具体请参见沙盒测试。

沙盒环境下,客户端拉起支付页面,点击返回按钮,再次购买会显示该商品已经拥有,请问这个现象正常吗?

是正常的。当HMS Core(APK)版本小于4.0.2.300时,在沙盒环境下创建一次性商品订单,本质是创建一个已经完成了的支付订单,即使中途取消还是会成功购买这个商品。

具体说明可参见沙盒测试。

用户使用银行卡支付时报错:此交易被拒绝,请稍后再试。您也可尝试其他付款方式。

可能原因:该银行卡支付被风控了,建议更换支付方式或更换银行卡支付。

沙盒环境下,支付成功后,华为后台的报表会有记录吗?

不会,只有真实支付的才会记录。

非华为手机调不起支付页面,返回码1或907135003。

非华为手机存在兼容性问题,建议使用华为手机测试,部分第三方手机可通过如下方式解决该问题:

  1. 检查手机上是否已经安装了HMS Core(APK)。
  2. 将手机上的HMS Core(APK)权限都打开。

沙盒环境下,支付成功后,subIsvaild为false。

商品类型为消耗型商品或非消耗型商品时, subIsvalid始终为false。

商品类型为订阅型商品时,subIsvaild为true表示商品已经收费且未过期,也没有发生退款,您可以基于该标志为用户提供服务。为false表示未完成购买或者已经过期,或者购买后已经退款。同一个商品,在沙盒环境下续期最多支持6次,即使后面再尝试续期,也不能再次续订了,状态会一直保持过期状态。正式环境不会有这个限制。

沙盒环境下购买非订阅型商品不会扣款?

不会扣款,其他与正式环境一致,比如订阅场景下的关键事件回调通知也会存在。

沙盒环境和正式生产环境有什么区别?

1. 沙盒环境下支付都是立即完成并且一定成功,不会真实扣费;

2. 沙盒环境下支付订阅型商品不会扣款、订阅周期缩短、订阅续期最大支持5次。

3. 沙盒环境下暂不支持测试订阅下周期生效的场景。

同一商品的订阅在沙盒场景下自动续期5次后不再自动续期,如何进行后续业务调测。

可调用服务器的撤销订阅接口撤销该订阅,每次撤销后重新订阅都会再次自动续期5次。

支付方式中为啥只有支付宝,没有微信支付?

微信支付需要联系华为运营提交申请代扣模板,具体操作请参见关于微信连续扣费模板申请。

说明

微信支付仅在中国大陆支持。

关于微信连续扣费模板申请。

  • 接入订阅时,如何申请微信连续扣费的模板ID?

    发邮件给hmsiap@huawei.com,邮件标题为“订阅业务微信模板申请”。

    填写申请表,含APPID、应用名称、模板文字内容、扣费周期、价格等信息,界面提示申请注意事项,请参见微信自动续费申请模板.xlsx。

  • 微信模板申请有什么填写要求和注意事项?

    填写要求:

    1. 模板名称只需填写商品名称,不超过10个字符(含字母数字等)
    2. 规则说明里必须输入续费的明确金额及周期(支持AB价模板)
    3. 按要求提供相关的业务说明材料,可见参考模板。
    4. 华为支付自动续费不符合标准需使用微信支付扣款。
  • 申请通过的时间和周期?

    申请周期为7个工作日,还请耐心等待,申请结果通过hmsiap@huawei.com反馈给您。

关于非PMS商品购买接口使用申请。

  • 接入使用非PMS商品购买接口时,如何提交备案申请?

    发邮件给hmsiap@huawei.com,邮件标题为“xxx申请非PMS支付白名单”。

    填写申请邮件,含应用ID、应用名称、自检项等信息。

  • 参见如下非PMS支付白名单申请正文模板:

    应用ID:XXX

    应用名称:XXX

    自检项:

    1. 为什么需要开通非PMS购买,PMS购买为何不能满足要求,备案申请后项目仅使用非PMS购买?
    2. 您是否是在服务器侧处理订单校验和发货流程?
    3. 您在对购买结果验签成功后,是否进一步校验了InAppPurchaseData中的productId、price、currency等信息的一致性。如果您没有做校验,计划何时补充?(如方便,请您提供关键代码实现并截图说明,截图中请删除密钥等敏感信息)
    说明

    1、注意应用ID、应用名称填写正确。

    2、业务需要完整填写备案申请中的自检项。

  • 申请通过的时间和周期?

    申请周期为7个工作日,还请耐心等待,申请结果通过邮件反馈给您。

关于PMS商品购买接口使用申请。

  • 当您在已经使用了非PMS商品购买,同时需要用PMS商品购买时,如何提交备案申请?

    发邮件给hmsiap@huawei.com,邮件标题为“xxx申请PMS支付白名单”。

    填写申请邮件,含应用ID、应用名称、自检项等信息。

  • 参见如下PMS支付白名单申请正文模板:

    应用ID:XXX

    应用名称:XXX

    自检项:

    1. 为什么在已经使用非PMS购买的场景下,仍需要使用PMS购买?
    2. 是否计划在备案申请后全部切换为PMS购买?
    3. 您是否是在服务器侧处理订单校验和发货流程?
    4. 您在对购买结果验签成功后,是否进一步校验了InAppPurchaseData中的productId、price、currency等信息的一致性。如果您没有做校验,计划何时补充?(如方便,请您提供关键代码实现并截图说明,截图中请删除密钥等敏感信息)
    说明

    1、注意应用ID、应用名称填写正确。

    2、业务需要完整填写备案申请中的自检项。

  • 申请通过的时间和周期?

    申请周期为7个工作日,还请耐心等待,申请结果通过邮件反馈给您。

Order服务验证购买Token接口返回的purchaseTokenData数据里的price字段是用户的实际充值金额吗?如果有优惠券等组合支付情况下,返回是实际支付值还是实际支付+优惠券的全价?

返回全价。

订单/订阅关键事件通知的时效性,开发者服务器会多久收到通知?

实时的,客户端触发场景后,华为服务器会在几秒内通知开发者服务器。

客户端调用支付接口,如果长时间没有弹出支付界面,允许用户重新发起支付,结果出现两个支付界面。针对该情况,有没有接口去取消前面的调用,或者大概什么时间一定会有返回?

目前,调用支付接口和拉起支付页面是分开两步的,如果由于网络问题导致支付长时间在接口处没有返回,您可以允许用户重复拉起。但是您也需要对后面重复返回的接口内容,做重复处理,防止两次拉起页面。

对于周期为1个月的订阅型商品,假如3.31日24点是订阅失效时间,如果在失效期内4.3日才扣费成功,这时订阅截止时间是4.30日还是5.3日?

时间从扣费成功开始算,即5月3日。

发布海外的应用,支付时提示“当前支付服务不可用”,应该怎么处理?

有两种可能:

支付时提示“本应用未在当前国家/地区发布。若要使用,请前往“应用市场”>“我的”>“设置”>“国家/地区”更改设置”,应该怎么处理?

当前设备登录的华为帐号服务地 (查看方法:“华为应用市场 > 我的 > 设置 > 国家/地区”) 必须在您的应用发布的国家/地区范围内,才允许支付。您可参见设置发布国家或地区查看您的应用发布的国家或地区。

如需完成支付,可在设备上切换华为帐号服务地后重试。

支付的UI界面只有一种吗?是否还有其他支付界面?

是的,目前支付只有一种UI界面。

华为支付最大金额是否有限制?

有限制,在PMS上按照商品价格模板进行配置。

签名和验签的算法有区别吗?

签名必须是SHA256,验签可以根据回调中signType确定。

SDK4.0支付不需要传递订单号了吗?之前SDK2.0是存在的。

4.0订单都是托管的,即支付成功后的订单号,都是华为返回的。具体支付请求字段严格按照4.0文档接入即可。

联盟后台的报表是实时的吗?

不是,次日可见。

华为后台订单报表里显示的商户请求号,是什么时候上传的?

商户请求号,是客户端在调用createPurchaseIntent接口发起支付请求后,由华为服务器生成的本次发起支付的唯一性标识,该标识会返回给客户端。

针对没发货成功的问题订单,点击华为后台订单报表中补发按钮,会触发什么流程?

HMS2.0订单:点击补发,触发华为支付服务器向开发者服务器发送支付成功回调。

HMS4.0订单:点击补发,触发华为支付服务器向华为IAP服务器发送支付成功回调,您不会接到支付成功回调。

华为后台支付报表中的商户请求号是通过sdk接口中哪个字段上报的,或者服务端哪个字段上报的?

SDK4.0订单id全托管,即支付完成后,由华为服务器生成华为订单id(payorderId)或商户请求号(requestId/orderId)返回给客户端。

createPurchaseIntent接口返回payorderId和orderId,对应华为后台报表下的华为订单id和商户请求号。

玩家手机上显示的商品价格和单位是依据什么原则展示?当前玩家的地理位置吗?

手机客户端根据当前华为帐号所属的服务地(查看方式:“应用市场 > 我的 > 设置 > 国家/区域”)展示当地价格和单位。

订阅型商品是否可以免费提供给用户试用一段时间?

可以,AppGallery Connect网站创建订阅型商品时,可以通过设置促销价格为免费来实现,促销价格包括免费和折扣价格。

订阅支持花币支付吗?

  • 中国:订阅不支持花币,只支持微信和支付宝。
  • 其他国家/地区:如果服务地支持花币,那么订阅支持花币,但需要用户在付款与账单里设置优先扣费方式,勾选花币,而且勾选花币时,需要同时勾选银行卡或者话费的支付方式,不能只勾选花币。如果服务地不支持花币,那么订阅也不支持。

续期周期为1个月的订阅型商品,周期一个月是取固定天数还是每个月的真实天数呢?

每个月的真实天数。订阅的续期日是用户最初购买此订阅的日期,即初始日期。例如:1月9日开始,将于2月9日续期。但如果初始日期在下个月中不存在,则订阅将于下个月的最后一天续期;初始日期一旦再次出现,续期日便恢复为该日期。例如:用户于1月30日开始订阅,则下一个续期日是2月28日(或闰年2月29日),再下一次是3月30日。

如何取消订阅?

用户可通过如下方式取消订阅:

  • 用户可前往华为应用市场,在“我的>头像>付款与账单>自动续费/免密支付”中取消订阅;
  • 您的应用可以通过startIapActivity接口跳转到HMS Core(APK)的管理订阅页面,用户可以在HMS Core(APK)的管理订阅页面里取消/恢复/切换订阅。

在支付宝应用中取消订阅,华为应用支付服务器没有回调取消订阅信息,是正常的吗?有什么解决办法吗?

是正常的,如果是在支付宝/微信应用内取消自动续费协议,华为应用内支付服务器会在这笔订阅续期的时候发送失败通知,而不是针对解约来做通知。

您可以通过续期失败的服务器关键事件通知里的expirationIntent来判断(3表示用户签约信息异常)是否是该场景。

首次订阅和后期续费游戏方如何收到通知?

您的应用在调用客户端购买接口首次订阅商品时,会收到支付结果,同时华为应用内支付服务器会向您配置的订阅事件通知地址发送订阅关键事件通知。订阅后期续费时,华为应用内支付服务器会向您配置的订阅事件通知地址发送续订成功事件通知,您可以在收到通知后进行相应的处理。

自动续期时,如果余额不足导致扣费失败,华为应用内支付服务器是否会有订阅关键事件通知?用户是否会收到相关通知?

华为应用内支付服务器会发送ON_HOLD(9)的订阅关键事件通知到您配置的订阅事件通知地址;用户会收到续期失败的push通知。

订阅型商品能指定扣款的时间吗?例如:用户会员的到期日为2022年9月1日,华为会在8月31号尝试扣款,能不能指定到现有会员时间到期日9月1日再进行扣费?

不能的。目前订阅型商品会在到期前24小时的时候开始尝试提前扣费。

成功订阅的通知里有下期扣款的时间吗?

没有的。下期扣款时间在订阅到期前24小时内。您可通过订阅后返回的InAppPurchaseData数据中的expirationDate获取订阅本周期的到期时间。

订阅型商品涨价,已订阅的用户如何收到涨价通知?

商品到期前10天华为应用内支付服务器会获取商品的价格、状态信息,如果涨价,获取到价格后会发送涨价的push通知给用户。

已取消的订阅,在本周期有效期内恢复订阅,订阅收银台显示支付金额为0,是正常的吗?

是正常的,非立即扣费的场景,在订阅收银台会显示支付金额为0。

在AppGallery Connect直接停止生效某个订阅商品,对已订阅该商品的用户有什么影响?

不影响已订阅用户,已订阅的商品仍然可以正常续期。

应用中有可免费试用1个月的订阅型商品,可以将免费试用期从1个月修改为7天吗?如果可以,对已购买该商品的用户会有影响吗?

免费试用活动已生效的订阅型商品可以修改试用活动的结束时间,但是无法修改试用周期。若想修改该周期,可以先结束原有的试用活动,然后重新设置。

如果结束原有的试用活动,已经购买的用户服务会继续生效,在原试用时间结束后恢复非试用价格。

有相关API可以获取用户所有购买数据吗?

目前没有服务端接口支持该能力,建议您通过IAP SDK提供的客户端接口obtainOwnedPurchaseRecord查询订阅型商品或消耗型商品的所有历史购买数据,或通过obtainOwnedPurchases查询非消耗型商品的所有购买数据。

订阅设置了促销价,订阅通知回调是只有实际支付价格,没有商品原价吗?

是的,只有实际支付金额,具体可参见InAppPurchaseData。

账号保留能力是否可以关闭?

否,这是订阅流程的一部分。

订阅场景下,华为后台支付报表中该笔订单的扣款时间是3月31日,同时3月31日收到华为订阅关键事件回调,但是通知中的扣款时间purchaseTime是4月1号,这个是正常的吗?

是正常的,purchaseTime实际是指商品生效时间,不是实际扣款时间。

订阅关键事件回调里面,没有商品是否已过期的信息,是只能调用Subscription服务验证购买Token接口去查看吗?

是的。订阅商品权益的发放不要依赖订阅关键事件的通知类型,因为订阅关键事件回调通知是异步的,且受网络传输等影响,可能存在数据不一致的情况,比如玩家先订阅后取消,异常情况下,取消的订阅关键事件回调先返回,订阅的关键事件后返回,此时如果依靠关键事件回调做权益发放,可能会导致发货异常。建议在接到订阅关键事件回调通知后,调用Subscription服务验证购买Token接口查询商品的最新状态。

订单/订阅关键事件配置地址是否有测试环境?

订单/订阅关键事件通知地址统一在华为AppGallery Connect配置,不区分测试和正式环境。如果您确实需要测试该回调地址,可以在AppGallery Connect创建新的测试应用,通过测试应用完成回调测试。

用户手动切换服务地后,之前服务地的订阅会保留吗?

用户从服务地A切到服务地B时,IAP订阅系统会保留用户在服务地A的订阅数据(包括收据),但会自动取消用户在服务地A的全部订阅,终止其续期,在当前周期结束之前,订阅仍生效,当前周期结束之后,订阅将不再续期,变为已到期状态。

接入华为服务器提供的订单回调通知后,客户端之前接入的补单流程是否需要删除?

建议保留作为兜底保障,以防服务器出现网络等异常导致掉单问题。

接入华为服务器订单回调通知能力,需要在哪里配置通知地址?配置好后多久生效?

请参见配置支付服务参数配置通知地址,保存后一般3-5分钟即可生效。

华为的Order服务验证购买Token接口是否有QPS流控等限制?

暂时没有限制,后续可能有规划。

用户在自动续费扣费前,会收到短信通知吗?

不会。

purchaseToken的过期时间是多久?

30天。

消耗型商品支付了,但是客户端长期没有调用消耗接口,华为会自动退款吗?

不会,一直保留直到补单成功。

用户的支付订单数据具体保存在华为某个站点的判断依据是?

用户支付时登录的华为帐号所在的服务地,用户可以打开手机“华为应用市场 > 我的 > 设置 > 国家/地区”查看。

支付成功后对purchaseTokenData数据进行验签时,出现如下错误 :java.security.SignatureException: Signature length not correct: got 384 but was expecting 64是什么原因?

该错误表示您验签时使用的IAP公钥长度有问题,建议您参见查询支付服务信息获取IAP公钥。

客户端可以在不登录华为帐号的情况下通过调用obtainProductInfo接口获取商品详情吗?

不可以,获取商品信息前必须登录。主要基于两点:

  1. 不同的玩家登录后看到的商品价格可能是不一样的,比如首次购买可能享有优惠价;
  2. 华为IAP的接口基于安全考虑需要获取应用及用户的信息鉴权,因此需要帐号登录。

调用obtainProductInfo查询商品信息时,返回错误码60050(用户未登录)但未返回帐号登录页面,该场景怎么引导用户登录?

调用obtainProductInfo前需要您先调用isEnvReady接口,通过isEnvReady接口返回的IapApiException中的Status对象处理未登录场景。

华为提供获取商品信息的服务器接口吗?

不提供,当前仅支持使用IAP客户端obtainProductInfo接口来获取商品的详细信息。

客户端调用obtainProductInfo获取商品信息之后,商品的UI展示是由开发者控制的吗?

是的。

使用网页支付宝支付成功后,回到华为应用内支付界面一直转圈,该情况正常吗?

正常的,该情况是因为网页支付宝会概率出现支付成功后,一直没有回调给华为的情况,此时,华为页面会呈现转圈,一直等待支付宝回调的现象。

出现该现象时,用户可以去“手机设置 > 华为帐号中心 > 付款与账单”中查看该笔订单是否支付成功;或者引导玩家安装支付宝客户端减少此类问题。

华为后台的订单/订阅通知地址配置后会立即生效吗?

不会立即生效,一般在10分钟内生效。

在AppGallery Connect网站上配置的商品类型可以修改吗?

不可以。

华为支持h5支付吗?

当前不支持。

获取的appAT和headers,在Order服务验证购买Token和Order服务确认购买两个接口中可以共用吗?

可以。

IAP SDK支持调起横屏版支付界面吗?

可以,实现该功能需要:

  • 玩家手机已开启支持自动旋转
  • 您的应用需要支持可旋转属性,该技术属于Android通用技术,建议您自行查询解决方案。

已经上线的应用还能用沙盒支付吗?

不可以,沙盒支付的条件之一是测试应用的APK版本号大于当前在线版本。

无法拉起华为支付。

建议您抓取客户端日志,搜索关键字hms_pay关键字进行定位:

  • 如果提示“createOrder onResponse responseCode:6,responseMessage:IAP_APP_NOT_EXISTED”,请检查如下内容:

请参见开通服务检查支付服务是否正常开启并成功获取到IAP公钥。

请参见集成HMS Core SDK检查您的agconnect-services.json是否正确放置在应用级根目录下。

  • 如果提示“Product type doesn't match that in pms”,请检查华为后台配置的商品类型与客户端实际调用的商品类型是否一致。
  • 如果提示“Product info cannot be found”,请检查如下内容:
    1. 检查华为后台配置的商品id与客户端实际调用的商品ID是否一致。
    2. 检查华为后台配置的商品信息是否激活。
  • 如果提示“App doesn't exist from pms”,请参见集成HMS Core SDK检查您的agconnect-services.json是否正确放置在应用级根目录下。

如果上述方案均无法解决您的问题,请联系华为技术支持人员或进行在线提单。

从IAP SDK 2.x更新到最新版本后,支付验签的公钥和方式均变化了,对集成IAP SDK 2.x支付的在架版本有业务影响吗?

不影响。华为IAP兼容老版本逻辑和支付公钥。

用户是否可以购买跨区域的商品?例如,一个亚洲的用户是否能在欧洲开发者开发的应用中购买商品?

华为应用内支付基于用户使用的华为帐号所在服务地来提供服务,与开发者应用的IP地址无关。 例如,若用户的帐号服务地为新加坡,只要开发者应用发布地包含新加坡,则用户在各个区域都可使用新加坡货币完成支付。

使用非沙盒帐号订阅一个可以免费试用一段时间的商品,生成的payOrderId带有"SandBox"前缀,这是正常的吗?

这个是正常的,免费试用模式下,订阅不会产生费用,应用内支付服务器会为此类订单的payOrderId添加"SandBox"前缀。

使用非沙盒帐号并通过createPurchaseIntent接口购买一个商品时,不需要支付,这是正常的吗?

请检查购买的商品是否是0元商品,如果是则为正常现象,该场景不会拉起IAP收银台。

开发者服务器必须集成应用内支付的功能吗?

纯客户端的开发也可以支持应用内支付功能,服务器开发不是强制的。

IAP是否支持回调结果到Fragment?

暂不支持,当前只能通过Activity获取结果信息。可通过Activity回调信息给Fragment进行处理。

查询商品信息时返回错误码-1。

可从以下三个方面排查问题。

  • 检查是否开通应用内支付服务。
  • 检查是否已经创建正在查询的商品。
  • 检查商品ID和商品类型是否匹配。

isEnvReady接口返回错误码-1。

用户可能禁止了新HMS Core(APK)的自动更新。当新HMS Core(APK)版本过低时,开发者应用调用IapClient相关接口时可能会一直返回-1错误码。可检查是否需要更新HMS Core(APK)。

用户在什么场景可以使用话费支付?

部分国家/地区支持话费支付,具体可参见华为IAP范围覆盖。在这种情况下,华为将发生的费用提交给运营商,运营商按照用户选择的方法处理费用。

使用此支付方式时,用户需同意华为应用内支付服务条款,该服务条款可在“手机设置 > 华为帐号中心 > 付款与账单”查看。使用此方式完成交易时,用户需要输入相关的手机号码并选择正确的移动运营商。交易完成后,使用的手机号码将与该华为帐号绑定,可在未来的华为应用内支付交易中选择已绑定的号码完成支付。

用户在支付成功页面终止应用进程后,开发者服务器如何收到支付成功通知?

如果用户购买了订阅型商品,只要交易成功,并且您设置了订阅通知地址,IAP服务器会发送通知到您的服务器。

如果用户购买了非订阅型商品,您的应用可调用obtainOwnedPurchases接口查询已购商品的购买信息,并将获取到的购买信息发送至您的服务器。

HUAWEI IAP中不同货币的汇率同步周期有多长?

没有固定的周期。华为运营人员根据实际需要调整汇率。

可以添加多少个沙盒测试帐号?

当前支持100个。

可以将一个订阅型商品从一个订阅组移到另一个订阅组吗?

订阅型商品被创建后,不允许更改其订阅组信息,无论该订阅组是激活还是停用。

怎么获取商品ID列表信息?

可在AppGallery Connect网站商品管理页面中导出商品列表。

如何生成月度报表,查看某商品的销售量?

可参见自助结算指南查看商品产生的收益结算单并申请结算。

支付成功后,开发者服务器未收到回调通知。

请检查是否已在AppGallery Connect网站上配置订单/订阅通知地址,具体可参见配置订单/订阅通知地址。

使用支付宝支付时,提示系统繁忙,请稍后重试。

您的应用的应用名和包名不能包含符号&。

在沙箱环境中恢复取消或已到期的订阅时,subscriptionId不会更改吗?

不会更改。取消订阅时,订阅不会立即变成已到期状态。订阅进入已到期状态后,正常情况下已到期订阅会具有保留期(保留期详见以下说明),在保留期前恢复订阅,subscriptionId均保持不变。只有在超过保留期后再次发起订阅,才会生成新的subscriptionId。

说明

失效订阅的保留期:

  • 中国大陆:180天
  • 其他国家或地区:30天

沙盒帐号在订阅时,选择银行卡支付方式,需要先绑定银行卡,是否正常?

正常的,购买订阅型商品涉及到续订,需绑定真实的银行卡进行签约,但实际测试时不会产生扣费。

有什么银行卡可以用来使用沙盒测试吗?

IAP的沙盒测试没有提供任何虚拟银行卡,您需要使用自己的银行卡。

调用isEnvReady接口时返回错误-5,Core error。

请检查您是否正确执行了混淆,此错误通常在混淆未配置或未完全配置时返回,具体请参见配置混淆脚本。

调用isEnvReady接口时始终返回错误码907135000。

请检查工程中“agconnect-services.json”文件的应用包名是否正确,同时检查应用级“build.gradle”文件中的证书签名是否正确。

如果确认该信息正确后,结果仍然没有变化,则可能是HMS Core(APK)缓存造成的。卸载并重新安装HMS Core(APK),断开并重新连接手机网络,重新启动应用。

如果上述方案均无法解决您的问题,请联系华为技术支持人员或进行在线提单。

在Release包中,无法拉起IAP收银台,但是Debug包可以拉起IAP收银台。

Debug包使用的签名文件与Release包使用的签名文件不同。可在Release包中使用与Debug包相同的签名文件。

使用IAP SDK接口时是否需要增加android.permission.REQUEST_INSTALL_PACKAGES权限。

您不需要在“AndroidManifest.xml”中添加此权限。

IAP支持查询应用下所有有效商品的productId吗?

不支持。您的应用只能通过使用obtainProductInfo接口查询指定productId的商品的详情信息。

是否能在删除商品后添加具有相同productId的商品?

不支持。同一个productId只能使用一次。

是否有计划向其他渠道开放华为应用内支付,如Google Play?

在Google Play中发布的应用也可以访问华为应用内支付。

是否支持微信H5支付?

不支持。

如何获取消耗型商品的历史交易详细信息,如商品名称、商品ID、商品价格等?

您可通过obtainOwnedPurchaseRecord接口获取消耗型商品的历史购买数据。

当前返回的商品价格携带币种信息,如EUR 50.00,没有方法可以获取商品价格的精确数值。

您可使用getMicrosPrice方法获取的商品微价格/1000000来获得实际价格。

HUAWEI IAP和Huawei Pay有什么区别?

Huawei Pay与微信或支付宝类似,用户可以在IAP收银台页面使用Huawei Pay。

订阅自动续期扣费前,用户是否会收到短信通知?

不会。

当使用IAP订阅商品时,华为是否要求用户知道哪些协议?

用户订阅之前,需要同意华为应用内支付服务条款,该服务条款可在“手机设置 > 华为帐号中心 > 付款与账单 > 设置 > 服务条款”中查看。用户只有在同意服务条款后,才能使用订阅。

在Android 11上,已安装HMS Core(APK)最新版本,仍然提示升级,如何解决?

Android 11更改了应用查询同一设备上其他已安装的应用以及与之交互的方式。您应用的targetSdkVersion是30或者更高版本,并且集成6.1.0.300之前版本的IAP SDK时,将无法访问HMS Core(APK),并且持续提示升级。

您可以通过以下两种方法解决。

  • 方法一:

    升级IAP SDK至6.1.0.300及以上版本,版本信息请参见版本更新说明。

  • 方法二:

    如果不升级SDK,需要在“AndroidManifest.xml”中manifest下添加<queries>标签。

    收起
    自动换行
    深色代码主题
    复制
    1. <manifest ...>
    2. ...
    3. <queries>
    4. <intent>
    5. <action android:name="com.huawei.hms.core.aidlservice" />
    6. </intent>
    7. </queries>
    8. ...
    9. </manifest>
    说明

    <queries>标签对工具的要求如下:

    • Android Studio需升级至3.3或更高版本。
    • Android Gradle插件需升级至3.3.3、3.4.3、3.5.4、3.6.4、4.0.1或4.1.0及更高版本。

如何解决证书链不完整

如果您提供的证书在IAP服务内置信任库中查询不到,则该证书不被IAP信任,您需要构造完整的信任链以被IAP信任。

此处以Chrome浏览器最新版本(一般是支持自动验证证书链)为工具,以华为的证书为例,手工构造完整的证书链步骤如下:

说明

您也可以选择其他证书链工具构造完成的证书链。

  1. 查看服务器证书。

    访问华为开发者网站, 单击浏览器前的锁,可查看证书状况,如下图所示:

  2. 查看服务器证书链。

  3. 选择复制到文件,选择下一步。

  4. 选择Base64编码X.509(.CER)(S),导出证书至文件中。

  5. 依次导出证书链中的所有证书,并按照如下图所示顺序拼接为一个证书文件,将拼接好的证书返回给IAP服务器。

IAP服务器支持证书

IAP服务器内置了如下92个证书,请检查您的证书链,确保证书链的完整性,同时确保您的证书链中的证书在IAP服务器支持证书.xlsx中。

如果证书链存在问题,请参见如何解决证书链不完整。

payOrderId 和 orderId的区别

payOrderId 指交易单号,用户支付后由华为服务器生成;

orderId 指订单ID,唯一标识一笔需要收费的收据,由华为应用内支付服务器在创建订单以及订阅型商品续费时生成。