4

从零开始详解应用内支付——商品创建及测试上架

 3 years ago
source link: https://blog.csdn.net/HUAWEI_HMSCore/article/details/115636921
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

当用户在应用市场里下载APP,体验了免费的基础功能和服务后,通过自主选择付费,以获取和使用应用内提供的增值服务——这种用户应用内购买行为的完成,就需要用到应用内支付(In-App Purchases,简称IAP)。

应用内支付有丰富的使用场景和需求,游戏类应用中装备和虚拟币的购买、视频类应用中会员的订阅、知识工具类应用中一次性购买开高级服务和功能……应用内支付大大拓宽了移动开发的盈利模式,增加了APP营收的灵活性。

在华为移动生态体系中,我们为开发者提供了安全好用的应用内支付基础开发服务,助力开发者降本增效,实现付费转化和持续营收。

本文将详解应用内支付开通启用、商品管理、测试和上架等环节操作步骤,呈现应用内商品生成全过程,让开发者轻松实现从入门运用和熟练掌握华为应用内支付服务。

IAP的启用及商品管理方法

启用服务

1.开启服务开关

1.1. 登录 AppGallery Connect 网站,选择“我的项目”,在项目列表中找到相应项目,在项目下的应用列表中选择需要开通服务的应用。

1

1.2. 在所选应用页面中点击<我的项目>,进入“API管理”页签,打开需要开通服务所在行的开关。

*API管理:在此页签确认和开通所需服务能力。支持一个服务有多个API开关,可单独控制各API开启或关闭,也可通过该服务右侧的API总开关一键开启或关闭该服务下的全部API。

2.配置支付服务参数        

2.1. 在所选应用页面左侧导航栏选择[ 盈利 > 应用内支付服务 ],点击[ 设置 ]。
如果首次配置会弹出签署协议弹框。

2.2. 点击“订阅通知地址”后的“√”图标,配置订阅通知地址。

2.3. 配置完成点击“√”。

4

创建商品及沙盒测试

1、创建商品:全球定价,一个版本搞定

登录AppAallery Connect,在[ 我的应用 ]界面选择应用,进入[ 运营  ]页面。

*数据信息为模拟

在[ 运营 ]页面左侧导航栏选择[ 产品运营 > 商品管理 ],选择[ 商品列表 ],点击[ 添加商品 ]。

1.1相关参数说明:

①确认创建的商品类型:华为应用内支付支持三种商品类型:

消耗型商品:即可以消耗使用的商品,比如游戏类应用中的金币、钻石、点券等,可用来兑换和购买应用内虚拟服务和物品的货币。

非消耗型商品:即购买后永久使用的商品。比如游戏中特别篇关卡、教育类应用中无限时的课程学习权限等

订阅型商品:即一种预定支付方式,购买后未来一段时间内允许访问增值更能或内容,周期结束后自动续期购买下一期的服务。比如音视频类、教育课程类应用中的月度会员等。

根据你所需添加的商品属性,来勾选商品类型进行进一步填写。

商品ID:以大小写字母及数字开头,由字母、数字及下划线 (_) 和句点 (.)组成,字符输入上限148个,一个应用内商品ID不能重复,保存后不能修改,删除后无法再次使用。
语言:点击[管理语言列表],勾选需支持的语言种类
商品名称:不能为空,字符上限55个,不支持特殊字符|
商品简介:不能为空,字符上限100个,不支持特殊字符|
商品价格:点击“查看编辑”,为商品适配合适价格。

1.2面向全球的商品信息设置:如果你的应用开发面向全球多个国家,无需维护管理多个地域版本。
多语言设置:创建商品时,在<语言>栏,勾选需支持的国家语言,并在<商品名称>一栏,输入对应国家语言的商品名及信息。

全球实时汇率定价参考:不同国家及地域的价格设置,只需定义一个商品价格,不同国家和地区价格会根据当地汇率来计算并显示,给开发者提供当地定价依据,也可自定义单个地域定价。

商品信息填写完成后,点击[编辑价格],即可进入商品价格编辑界面。

根据以上操作步骤,完成商品创建,回到商品列表页面进行商品的状态编辑,点击<生效>,即添加商品完成。

相关参数说明:

  • 通用币种要求国家/地区:支持整数或两位小数,如输入1.34,则默认选取1.34作为该商品的输入价格;
  • 特殊币种要求国家/地区:

- 仅支持整数的国家/地区,整数或向上取整作为输入价格,如输入5.02,则默认选取6.00作为该商品的输入价格;

- 仅以五分之一为最小单位的国家/地区,整数或向上取符合五分之一要求的数值作为输入价格,如输入1.23,则默认选取1.40作为该商品的输入价格。

注意:华为在每月的月初都会邮件通知开发者去修改后台商品价格。开发者在收到邮件后,应该手动地去刷新相关商品的价格,以免出现汇率差距太大导致的亏损。

1.3商品激活
填写好信息点击[保存],返回商品列表,新添加商品会显示处于[失效]状态,点击确认[激活],商品即生效。

2、客户端接入,支付过程开发指南

2.1判断是否支持应用内支付

在使用应用内支付之前,你的应用需向华为应用内支付发送isEnvReady请求,以此判断用户当前登录的华为帐号所在的服务地是否在华为IAP支持结算的国家/地区中。如果应用未接入华为帐号的登录接口,可通过该接口完成登录操作。

开发步骤如下:

发起isEnvReady请求,并设置两个回调监听来接收接口请求的结果。

  • 当接口请求成功时,你的应用将获取到一个IsEnvReadyResult实例对象,表示用户当前登录的华为帐号所在的服务地支持IAP。
  • 当接口请求失败时,IAP会返回一个Exception对象,若该对象为IapApiException对象,可使用其getStatusCode()方法获取此次请求的返回码。

当返回帐号未登录(OrderStatusCode.ORDER_HWID_NOT_LOGIN)时,可使用IapApiException对象中的status拉起华为帐号登录页面,此后在Activity的onActivityResult方法中获取结果信息。从onActivityResult返回的intent中解析出returnCode,当returnCode=OrderStatusCode.ORDER_STATE_SUCCESS时,则表示当前帐号所在服务地支持IAP,其他则表示此次请求有异常。

*Status不支持序列化,请勿对IAP接口返回的Status对象执行序列化操作。

2.2展示商品信息

在华为AppGallery Connect网站上完成商品的配置后,需在你的应用中使用obtainProductInfo接口来获取此类商品的详细信息。

开发步骤如下:

  1. 构建请求参数ProductInfoReq,发起obtainProductInfo请求并设置
    OnSuccessListener和OnFailureListener回调监听器以接收接口请求的结果。您需要在ProductInfoReq中携带您此前已在华为AppGallery Connect网站上定义并生效的商品ID,并根据实际配置的商品指定其priceType。
    *obtainProductInfo每次只能查询一种类型的商品。
  2. 当接口请求成功时,IAP将返回一个ProductInfoResult对象,您的应用可通过该对象的getProductInfoList方法获取到包含了单个商品信息的ProductInfo对象的列表。您可以使用ProductInfo对象包含的商品价格、名称和描述等信息,向用户展示可供购买的商品列表。

2.3发起购买

AppGallery Connect网站支持托管的商品包括消耗型商品,非消耗型商品和订阅型商品。您的应用可通过createPurchaseIntent接口发起购买请求。开发步骤如下:

  1. 构建请求参数PurchaseIntentReq,发起createPurchaseIntent请求。您需要在PurchaseIntentReq中携带您此前已在AGC网站上定义并生效的商品ID。当接口请求成功时,您可获取到一个PurchaseIntentResult对象,其getStatus方法返回了一个Status对象,您的应用需要通过Status对象的startResolutionForResult方法来启动华为IAP收银台。
    *Status不支持序列化,请勿对IAP接口返回的Status对象执行序列化操作。
  2. 在你的应用拉起收银台并且当用户完成支付后(成功购买商品或取消购买),华为IAP会通过onActivityResult方式将此次支付结果返回给应用。可使用parsePurchaseResultInfoFromIntent方法获取包含结果信息的PurchaseResultInfo对象。
  • 支付失败(OrderStatusCode.ORDER_STATE_FAILED)
  • 已拥有该商品(OrderStatusCode.ORDER_PRODUCT_OWNED)

2.4确认交易

用户完成一次支付之后,你需根据购买数据InAppPurchaseData的purchaseState字段来判断订单是否已成功支付。若purchaseState为已支付(取值为0),你需发放相应的商品或提供相应的服务,此后需要向华为IAP发送发货确认请求。

  1. 对于消耗型商品,你需从InAppPurchaseData JSON字符串中解析出purchaseToken信息,用于确认商品的发货状态。
    在成功发货并记录已发货的商品的purchaseToken之后,你的应用需要使用consumeOwnedPurchase接口消耗该商品,以此通知华为应用内支付服务器更新商品的发货状态。发送consumeOwnedPurchase请求时,请在请求参数中携带purchaseToken。应用成功执行消耗之后,华为应用内支付服务器会将相应商品重新设置为可购买状态,用户即可再次购买该商品。
  2. 对于非消耗型商品,华为应用内支付服务器默认返回已确认的订单数据,在用户购买成功之后无需确认交易。您需要在用户购买成功之后持续向用户提供相应的商品服务。具体请参见提供非消耗型商品对应的服务
  3. 对于订阅型商品,在用户购买成功后,无需您额外执行确认交易操作,但需要在订阅生效期间持续向用户提供相应的商品服务,具体请参见订阅专用功能说明-提供商品对应的服务

2.5 提供非消耗型商品对应的服务

若应用为用户提供非消耗型商品,可在应用启动时通过obtainOwnedPurchases接口获取用户已购的非消耗型商品的购买信息,格式请参见InAppPurchaseData。若返回的购买信息列表不为空,请确认每个购买信息的purchaseState字段。若purchaseState为0,你需提供相应的商品服务。

开发步骤如下:

  1. 使用obtainOwnedPurchases获取用户已购非消耗型商品的信息。
  2. 你的应用需要在请求参数OwnedPurchasesReq中指定查询的priceType为1。
  3. 你可从返回的每个商品信息中解析出purchaseState,用于判断当前商品的购买状态,以此作为你的应用的发货标志。

3、沙盒测试:无需真实支付,完成端到端支付测试

添加商品完毕后,可通过沙盒测试,在无需真实付款的条件下,进行端到端的支付环节检测。沙盒测试步骤如下:
3.1配置沙盒测试环境
· 设置测试帐号。
在进行测试前,需在AppGallery Connect中的用户与访问添加测试帐号,这些测试帐号都是真实的华为帐号。具体请参见<管理测试帐号>。
*说明:沙盒测试帐号添加完成之后需要30min~1h才能生效。使用时请检查当前的帐号是否支持沙盒测试。

· 配置沙盒测试版本。

如果要测试的应用包此前没有在AGC上架过版本,只需要确保测试包的versionCode大于0;如果已有上架的版本,则测试包的versionCode需要大于上架版本的versionCode。

3.2测试非订阅型商品支付
可在设备上登录已配置的测试帐号,并安装该待测试应用。发起非订阅型商品购买时,华为IAP会检测到该用户为测试用户,跳过实际支付环节,直接支付成功。
效果示例如下:

3

3.3测试订阅型商品续订

订阅型商品的购买流程和普通商品(非订阅)的购买流程类似,但订阅还有其他细节场景,比如续订成功或失败,续订周期时长。为了帮助开发者快速测试应用的订阅场景,沙盒环境下的订阅续订时间会比正常情况更快,引入“时光机”概念。

时光机:仅针对订阅型商品的续期时间,不影响订阅型商品的生效时间(比如订阅周期为1周,商品在3分钟后发生续期,此时订阅型商品有效期延长了1周)。
效果示例如下:

1

完成以上步骤,你就顺利搞定应用内商品创建和测试上架。商品管理环节,商品信息修改、失效激活商品、删除商品等操作步骤,我们下期继续。

华为应用内支付还提供了“零掉单”的订单管理、提营收增长的增强型订阅服务等能力,我们也会在后期为大家推送超细详解,敬请期待哦~

>>了解更多详情,请戳:

华为应用内支付服务官网

华为应用内支付服务开发指导文档

>>华为HMS Core官方社区

>>华为移动服务开源仓库地址:GitHubGitee

关注我们,第一时间了解华为移动服务最新技术资讯~


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK