跳到主要内容

支付并签约场景

场景介绍

从4.1.0(11)版本开始,新增支持支付并签约场景。

用户在商户APP应用/元服务选购完不同的商品确认订单后,跳转至用户支付并签约确认页面,用户完成支付并签约后,后续再次购买商品时,商户可以直接发起代扣,减少用户拉起收银台、输入支付密码等相关操作。

支持商户模型:直连商户、服务商

华为支付支付并签约页面展示:

业务流程

开发者通过接入Payment Kit 提供的支付并签约能力,可以让用户在支付完成后快速与商户建立签约代扣的关系。具体接入流程如下:

  1. 商户客户端请求商户服务端创建商品订单。
  2. 商户服务端调用Payment Kit服务端直连商户预下单服务商预下单接口。
  3. Payment Kit服务端返回预支付ID(prepayId)给商户服务端。
  4. 商户服务端组建订单信息参数orderStr返回给商户客户端。
  5. 商户客户端使用orderStr调用requestPayment接口拉起Payment Kit支付收银台。
  6. Payment Kit客户端展示支付收银台。
  7. 用户通过收银台完成支付并签约。
  8. Payment Kit服务端处理支付并同步返回支付受理成功结果给Payment Kit客户端。
  9. Payment Kit异步处理支付完成并回调支付结果给商户服务端(支付失败场景不会有支付结果回调通知)。商户服务端需要使用SM2验签方式对支付结果进行验签。
  10. Payment Kit服务端处理签约并同步返回签约受理成功结果给Payment Kit客户端。
  11. Payment Kit服务端异步处理签约完成后回调签约结果给商户服务端(取消签约和签约失败场景不会有回调结果通知)。商户服务端需要使用SM2验签方式对签约结果进行验签。
  12. Payment Kit客户端展示结果页。
  13. 用户关闭结果页后Payment Kit客户端会返回支付状态给商户客户端。
  14. 商户客户端进行后续处理操作。

接口说明

接口返回值有两种返回形式:Promise和AsyncCallback。Promise和AsyncCallback只是返回方式不一样,功能相同。具体API说明详见接口文档

接口名描述
requestPayment(context:common.UIAbilityContext, orderStr: string): Promise<void>;拉起Payment Kit支付收银台。
requestPayment(context:common.UIAbilityContext, orderStr: string, callback: AsyncCallback<void>): void;拉起Payment Kit支付收银台。

开发步骤

预下单(服务器开发)

  1. 按照商户模型调用直连商户预下单服务商预下单接口获取预支付ID(prepayId)。

    为保证支付订单的安全性和可靠性需要对请求body和请求头PayMercAuth对象内的入参排序拼接进行签名,可参考签名规则

  2. 构建订单信息参数orderStr返回给客户端,业务接口请求示例代码可参考业务接口请求

拉起华为支付收银台(端侧开发)

使用orderStr调用requestPayment接口拉起Payment Kit支付收银台。

支付并签约拉起支付收银台与商户基础支付场景处理逻辑一致,可参见这里

支付并签约结果处理(服务器开发)

商户在构建直连商户预下单服务商预下单请求参数时,传入一个callbackUrl。在完成支付并签约后,华为支付服务器将以POST方式调用callbackUrl,将支付并签约的结果返回给商户服务器。

  • 如果用户没有提前登录,系统会自动拉起华为账号登录页面让用户登录。
  • 支付并签约接口请求成功不代表支付或签约成功,建议不要以客户端签约收银台返回作为用户支付并签约的最终结果,需以服务器接收到的结果通知或者查询API返回为准。

为保证信息合法性,商户服务器需要对返回的支付信息进行SM2验签,验签注意事项:

  1. 需直接使用通知的完整内容进行验签。
  2. 验签前需要对返回数据进行排序拼接,sign字段是签名值,排序拼接后的待验签内容需要排除sign字段。
  3. 验签公钥使用华为支付证书

延伸和拓展

当开发者完成上述支付并签约接入操作之后还可以调用以下API接口完成订单相关操作。

直连商户

查询支付订单申请退款查询退款订单查询签约订单申请解约查询对账单查询结算账单

服务商

查询支付订单申请退款查询退款订单查询签约订单申请解约查询对账单查询结算账单