华为快应用接入应用内支付服务开发指导
1. 应用内支付服务介绍
华为应用内支付服务(In-App Purchases,IAP)为应用提供便捷的应用内支付体验,接入流程简便,助力您的商业变现。通过应用内支付,用户可以在您的应用内购买各种类型的虚拟商品,包括消耗型商品、非消耗型商品和订阅型商品。

图1 应用内支付特点
华为应用内支付服务包含商品管理系统(Product Management System,PMS),您在华为AppGallery Connect网站录入商品ID和定价之后,即可托管商品。IAP会根据地区和汇率展示本地化的语言和货币价格,从而实现全球发布。
1. 币种与语言:华为为每个国家/地区指定一个默认币种和一个默认语言,不支持一个国家/地区配置多种语言。
2. 商品定价:华为根据您设置的汇率换算价格(含税)和汇率提供已上线华为支付的各国参考价,您可自行修改各国价格。
3. 汇 率: 固定汇率,此汇率非实时汇率,华为将根据此汇率更新货币价格。在您没有修改商品价格的情况下,华为更新汇率不会影响您的商品定价。
2.开发流程

图2 总体接入流程
当您需要与IAP服务器进行业务调用(如Order服务需调用IAP服务器提供的验证购买Token接口),或仅仅依靠您的客户端无法处理更加复杂的业务逻辑时,可增加服务端开发阶段。
2.1 交互流程

图3 消耗类商品

图4 非消耗类商品

图5 订阅类商品
2.2 获取购买历史记录
在支付接口中有两个接口名字很相似,它们是pay.obtainOwnedPurchaseRecord和pay.obtainOwnedPurchases。在使用场景上,两个接口是有区别的。
pay.obtainOwnedPurchases:
1. 消耗类商品:检查是否有需要补发货的商品,如果返回数据不为空,需要进行补发货处理,并调用 pay.consumeOwnedPurchase 接口进行消耗处理。一般在应用启动和支付返回60051或-1错误码时调用。
2. 非消耗类商品:查询当前用户已购买的商品记录。
3. 订阅类商品:查询当前登录华为账号的用户在此应用下已有的订阅关系。
pay.obtainOwnedPurchaseRecord:
1. 消耗类商品:查询执行过发货和消耗操作的商品记录。
2. 订阅类商品:查询当前用户在本应用中的所有续期记录。
2.3 开发自检
为了确保您正确地完成应用内支付服务接入,防止因接入问题导致上架审核被驳回或者上线运行遭遇投诉和损失,请务必进行上架前自检。
1. 商品名称描述语言为对应帐号归属服务地的语言,账号服务地切换路径:应用市场app->我的->国家/地区,切换不同服务地后,您可以检查商品名称是否和PMS系统上一致。
2. 商品价格展示为对应帐号归属服务地的货币单位+单价。
3. 弹出支付界面,支付界面中商品名称、商品价格与应用中一致。
4. 购买消耗型商品,发货并消耗后可以再次购买该商品。
5. 购买非消耗型商品后,不可再次购买该商品,再次购买返回错误码60051,首次购买成功后应用需提供相应服务。
6. 购买订阅类型商品后,不可再次购买该商品,再次购买会返回错误码60051,首次购买成功后应用需提供相应服务。
7. 购买消耗型商品异常掉单,重新进入应用需要补单。
3. 沙盒测试
沙盒测试允许您在接入华为应用内支付联调过程中无需真实支付即可完成端到端的测试,您可以在AppGallery Connect中配置测试帐号(账号需是真实的华为账号),并设置允许这些帐号执行沙盒测试。

1. 沙盒环境下购买非消耗型商品,购买之后可以执行消耗,之后可以再次购买,以方便测试 ( 现网环境不可以 )。
2. 购买成功后的收据信息中,会携带值为 0 的purchaseType字段,标识此次购买为沙盒测试的记录。
3. 沙盒测试拉起收银台时会弹出沙盒环境标志的弹框,收银台和成功页也均有沙盒环境的标志。
4. 沙盒环境下的订阅续订时间会比正常情况更快。

4.示例代码
示例代码请参考华为快应用参考官网接入支付服务的demo部分。
本文是快应用接入应用内支付的慕课指导的word版本,具体demo讲解可参考慕课视频教程。