Payment Kit-华为支付服务

Payment Kit-华为支付服务
BeatenPayment Kit-华为支付服务
华为支付服务的主要应用场景包括商城购物和免密代扣,本文主要对其接入场景展开。
ArkTS API | paymentService(华为支付服务)
该部分包括华为支付服务的API接口,requestPayment的起始版本都是4.1.0(11),requestContract的起始版本都是5.5.0(12),且接口均支持在元服务中使用,在调用以下方法之前需要确保网络已连接!
导入模块
1 | import { paymentService } from '@kit.PaymentKit'; |
1.paymentService.requestPayment
requestPayment(context: common.UIAbilityContext, orderStr: string): Promise
requestPayment(context: common.UIAbilityContext, orderStr: string, callback: AsyncCallback
上述两种方法均会提供基础支付、支付并签约等功能,调用该方法后会拉起Payment Kit收银台(下文的方法都是如此,不再赘述),支付完成后分别使用Promise异步返回和通过AsyncCallback回调结果。
2.paymentService.requestContract
requestContract(context: common.UIAbilityContext, contractStr: string): Promise
requestContract(context: common.UIAbilityContext, contractStr: string, callback: AsyncCallback
上述两种方法均会提供签约功能。支付完成后分别使用Promise异步返回和通过AsyncCallback回调结果。
其中,UIAbility上下文,不传会报401参数错误;order拉起收银台传入的订单信息,不传也会报401;contractStr拉起签约收银台入参,不传也会报401;callback为回调函数。签约成功error为undefined。这里涉及到了错误码,那么接下来进入错误码。
ArkTS API错误码
| 错误码 | 错误信息 |
|---|---|
| 401 | Parameter error. |
| 1001930000 | 用户取消支付 |
| 1001930001 | 支付失败 |
| 1001930002 | 交易已处理(重复下单) |
| 1001930003 | 签约失败 |
| 1001930010 | 重复请求(每次入参都需要传入当前时间戳) |
| 1001930011 | 网络连接异常 |
签约代扣场景
通过接入Payment Kit签约代扣能力,获取用户签约授权后,可以向用户的账户发起扣款,这里无需用户输入支付密码。常用场景自动续费
商户接入流程概述如下:
- 创建签约订单: 商户客户端请求商户服务端创建签约订单。
- 调用Payment Kit服务: 商户服务端调用Payment Kit的预签约接口,获取预签约号(preSignNo)。
- 返回合同参数: Payment Kit服务端返回预签约号,商户服务端构建
contractStr参数并返回给商户客户端。 - 调起签约收银台: 商户客户端使用
contractStr调用requestContract接口,调起Payment Kit的签约收银台,展示相关签约信息。 - 用户签约操作: 用户在收银台完成签约,Payment Kit服务端确认并返回签约结果信息。
- 展示签约结果: Payment Kit客户端展示签约结果,用户关闭结果页后返回商户客户端。
- 签约结果回调: 签约完成后,Payment Kit服务端调用商户服务端的回调接口,返回签约结果。
- 签约结果验签: 商户服务器使用SM2验签对签约结果进行验证。
- 申请免密代扣: 商户服务器调用Payment Kit服务端的免密代扣接口申请代扣服务。
- 返回代扣申请结果: Payment Kit服务端同步返回代扣申请结果。
- 处理代扣: Payment Kit服务端处理代扣请求,成功后返回扣款结果信息给商户服务器。
- 扣款结果验签: 商户服务器使用SM2验签对扣款结果进行验证。
接口的返回值有如下两种形式如下,功能相同,作用都是拉起签约收银台
requestContract(context: common.UIAbilityContext, contractStr: string): Promise
requestContract(context: common.UIAbilityContext, contractStr: string, callback: AsyncCallback
开发步骤
预签约(服务器开发)
开发者需要调用接口获取preSignNo构建签约信息参数contractStr
拉起华为支付签约收银台(端侧开发)
商户客户端使用contractStr作为参数调用requestContract接口拉起收银台。如果接口通过.then()方法返回时表示当前订单支付成功,若是.catch()方法返回则表示失败。当request有异常可以通过error.code获得错误码。
- 如果用户没有登录。则会拉起登录页面
签约结果回调通知(服务器开发)
签约成功后,服务器会调用在模板中的回调接口(callbackUrl)传递给开发者签约订单的具体信息,同时服务器还会对返回的支付信息进行SM2验签。
请求示例与响应示例如下
部署示例
传送门
PaymentKit-SampleCode-Clientdemo-ArkTS: 华为支付服务客户端示例主要展示华为支付服务的单次支付能力入口。
项目结构如下
本地部署运行
IAP Kit
简介
对于Payment Kit的能力只支持实际的商品和服务,不支持一些虚拟商品和虚拟服务的支付,最火热的当然就是王者荣耀这款游戏。在这里,关于虚拟商品的支付我们可以接入IAP Kit(应用内支付服务)顾名思义,IAP Kit要为应用内的支付提高体验和更加简便,高效的实现应用内支付,其包括消耗型商品、非消耗型商品和自动续期订阅商品。
开发准备
在配置应用这一步bundleName需要与当时创建应用时的报名保持相同,配置内容如图,
配置应用身份信息,首先需要登陆AppGallery Connect进行相关一系列操作,在这里不过多赘述。其中我们需要主要的是获取APP ID 和Client ID 后,我们在工程的module节点中加入这两个属性配置,如图
部署示例
在这里我们使用DevEco Studio部署应用内支付服务该工程,当然您也可以部署到本地
链接如下:
IAPKit-Sample-Clientdemo-ArkTS: 此示例实现了接入IAP Kit消耗型商品、非消耗型商品、自动续期订阅商品购买能力。
工程部署结构如下图
结构解读
1 | └── entry/src/main/ets |
其中注意的几个地方,例如AppScope/app.json5文件中的bundleName修改为自己应用的包名,上文已经提及,以及client_id和app_id。在build-profile.json5文件中配置应用签名,demo中的商品做替换要让商品ID和商品的类型匹配。
本地启动demo在手机端看一下效果,如图
在我们的主界面可以看到三个按钮:Consumables:消耗型商品购买。NonConsumables:非消耗型商品购买。Subscriptions:自动续期订阅商品购买。点一个进去以后就可以看到商品信息以及相应金额得按钮,点击后拉起收银台,完成支付后,返回到商品页,弹出支付成功的提示。
这里所需依赖是需要登录华为账号














