文档管理中心

商品购买流程

消耗型商品购买流程

消耗型商品典型购买流程如下:

  1. 用户发起购买后,应用客户端向HMS Core(APK)发起购买请求,携带商品ID、商品类型等信息。
  2. HMS Core(APK)生成订单,返回IAP收银台。
  3. 应用客户端启动IAP收银台。
    说明

    若使用createPurchaseIntentWithPrice接口发起支付,您需要使用IAP公钥对接口返回的paymentData数据进行签名校验,具体请参见对返回结果验签。公钥获取方法请参见查询支付服务信息。验签成功后再启动IAP收银台。

  4. 用户完成支付后,HMS Core(APK)返回购买数据InAppPurchaseData(包含是否购买成功、订单ID、商品ID、购买Token等 )及其签名数据。
  5. 应用客户端向应用服务器上报购买数据及其签名数据。
  6. (建议)若您的应用对安全性要求较高,可通过服务端Order服务验证购买Token接口,向IAP服务器查询购买数据及其签名数据,通过此接口可进一步确认订单的准确性。验证购买Token时,需携带购买Token和商品ID信息。
  7. (建议)IAP服务端返回购买数据及其签名数据。
  8. 应用服务器使用IAP公钥验证购买数据签名。为避免资金损失,您在验签成功后,必须校验InAppPurchaseData中的productId、price、currency等信息的一致性。验证方法和公钥获取方式可参见验证InAppPurchaseData
  9. 验证成功后,发放商品,记录商品的发货状态(购买Token和商品ID)。
    注意

    务必保存已发货商品的购买Token,后续即使消耗失败也可从您的服务器获取商品的发货状态,避免重复发货的情况。

  10. 应用服务器返回发货结果给应用客户端。
  11. 应用通知IAP服务器更新商品发货状态。请务必确保发货成功后再调用本步骤。

    发货成功后应用客户端向HMS Core(APK)发送consumeOwnedPurchase请求以消耗该商品,以此通知IAP服务器更新商品的发货状态。发送consumeOwnedPurchase请求时,需携带购买数据中的purchaseToken。

    您也可使用服务端Order服务确认购买接口消耗商品,用于替换IAP客户端consumeOwnedPurchase接口。

    注意

    如果您在消耗之后再进行发货,将存在以下异常场景:您的应用发起消耗请求之后,华为应用内服务器已消耗成功但因网络异常等原因没有成功将结果回调给您的应用,该情况将造成服务器已经消耗但是应用没有发货的场景。此场景后续很难处理,为了避免不必要的问题,您需要在发货成功之后再执行消耗操作。

  12. HMS Core(APK)向应用返回消耗结果。应用成功执行消耗之后,IAP服务器会将相应商品重新设置为可购买状态,用户即可再次购买该商品。
说明
  • 当前流程对单机游戏同样适用,只需要将流程图中服务端的处理放在客户端即可。
  • 开发过程请参见开发商品购买
  • 消耗型商品请务必实现消耗型商品的补单流程,避免掉单问题发生。

非消耗型商品购买流程

非消耗型商品典型购买流程如下:

  1. 用户发起购买后,应用客户端向HMS Core(APK)发起购买请求,携带商品ID、商品类型等信息。
  2. HMS Core(APK)生成订单,返回IAP收银台。
  3. 应用客户端启动IAP收银台。
    说明

    若使用createPurchaseIntentWithPrice接口发起支付,您需要使用IAP公钥对接口返回的paymentData数据进行签名校验,具体请参见对返回结果验签。公钥获取方法请参见查询支付服务信息。验签成功后再启动IAP收银台。

  4. 用户完成支付后,HMS Core(APK)返回购买数据InAppPurchaseData(包含是否购买成功、订单ID、商品ID、购买Token等)及其签名数据。
  5. 应用客户端向应用服务器上报购买数据及其签名数据。
  6. (建议)若您的应用对安全性要求较高,可通过服务端Order服务验证购买Token接口,向IAP服务器查询购买数据及其签名数据,通过此接口可进一步确认订单的准确性。验证购买Token时,需携带购买Token和商品ID信息。
  7. (建议)IAP服务端返回购买数据及其签名数据。
  8. 应用服务器使用IAP公钥验证购买数据签名。为避免资金损失,您在验签成功后,必须校验InAppPurchaseData中的productId、price、currency等信息的一致性。验证方法和公钥获取方式可参见验证InAppPurchaseData
  9. 验证成功之后需通过购买数据中的purchaseState字段判断商品的购买状态。当购买状态为已购买(purchaseState=0)时,发放相应商品。
说明

对于非消耗型商品,用户只需购买一次就可以永久拥有该商品。后期提供服务请参见提供非消耗型商品对应的服务

开发过程请参见开发商品购买

订阅型商品购买流程

订阅型商品典型购买流程如下:

  1. 用户发起购买后,应用客户端向HMS Core(APK)发起createPurchaseIntent购买请求,携带商品ID、商品类型等信息。
  2. HMS Core(APK)生成订单,返回IAP收银台。
  3. 应用客户端启动IAP收银台。
  4. 用户完成支付后,HMS Core(APK)返回购买数据InAppPurchaseData(包含是否购买成功、订阅ID、商品ID、购买Token等 )及其签名数据。
  5. 应用客户端向应用服务器上报购买数据及其签名数据。
  6. (建议)若您的应用对安全性要求较高,可通过服务端Subscription服务验证购买Token接口,向IAP服务器查询购买数据及签名数据,通过此接口可进一步确认订单的准确性。验证购买Token时,需携带购买Token和订阅ID信息。
  7. (建议)IAP服务端返回购买数据及其签名数据。
  8. 应用服务器使用IAP公钥验证购买数据签名。为避免资金损失,您在验签成功后,必须校验InAppPurchaseData中的productId、price、currency等信息的一致性。验证方法和公钥获取方式可参见验证InAppPurchaseData
  9. 验证成功后,向用户提供相应的商品服务。

用户购买订阅型商品后,在订阅仍生效期间,您的应用需要持续向用户提供商品服务,步骤如下:

  1. 应用客户端向HMS Core(APK)发送obtainOwnedPurchases请求查询已购订阅型商品。
  2. HMS Core(APK)返回用户所有已订阅且正生效的商品的购买数据InAppPurchaseData(包含是否购买成功、订阅ID、商品ID、购买Token等)以及每个购买数据的签名数据。
  3. 应用客户端向应用服务器上报购买数据及其签名数据。
  4. 应用服务器使用IAP公钥验证购买数据签名。为避免资金损失,您在验签成功后,必须校验InAppPurchaseData中的productId、price、currency等信息的一致性。验证方法和公钥获取方式可参见验证InAppPurchaseData
  5. 验证成功后,向用户提供相应的商品服务。
说明

开发过程请参见订阅专用功能说明开发商品购买

搜索
请输入您想要搜索的关键词