HarmonyOS Payment Kit:让你的APP支持鸿蒙支付
什么是 Payment Kit你在网上买东西的时候是不是经常会看到微信支付、“支付宝之类的选项Payment Kit 就是 HarmonyOS 版本的支付按钮”。它让你的应用可以方便地接入华为支付用户点一下就能完成付款。简单说Payment Kit 就是一个支付工具让你的应用能收钱。用户买东西的时候点支付按钮就会弹出华为支付的界面用户确认后就付款成功了。核心功能Payment Kit 提供以下功能单次支付用户购买商品时一次性付款支付结果回调支付完成后通知你的服务器环境搭建硬件要求设备类型华为手机HarmonyOS 系统HarmonyOS 5.0.5 Release 及以上软件要求DevEco Studio 版本DevEco Studio 6.1.0 Release 及以上HarmonyOS SDK 版本HarmonyOS 6.1.0 Release SDK 及以上前置准备在使用 Payment Kit 之前需要完成一系列配置。开通鸿蒙支付服务登录 AppGallery Connect选择盈利 鸿蒙支付服务 支付服务非虚拟类 立即开通申请支付商户号在华为支付商户平台绑定 AppID生成商户证书商户证书用来验证你的支付请求。需要生成 RSA 密钥对constcryptorequire(crypto);const{publicKey,privateKey}crypto.generateKeyPairSync(rsa,{modulusLength:3072,publicKeyEncoding:{type:spki,format:pem},privateKeyEncoding:{type:pkcs8,format:pem}});console.log(公钥,publicKey);console.log(私钥,privateKey);公钥上传到华为支付商户平台私钥保存在你的服务器上用来签名请求配置应用信息在module.json5中配置 AppID 和 Client ID{module:{metadata:[{name:app_id,value:你的APP ID},{name:client_id,value:你的Client ID}]}}项目结构├── entry/src/main/ets │ ├── entryability │ │ └── EntryAbility.ets // 程序入口类 │ └── pages │ └── Index.ets // 主页面 ├── entry/src/main/resources └── 服务端代码Java支付功能需要客户端和服务端配合完成。完整支付流程下面是 Payment Kit 的完整支付流程是否用户点击支付按钮客户端向服务端发起支付请求服务端调用预下单接口获取 prepayId组装 orderStr 返回客户端客户端调用 requestPayment拉起华为支付收银台用户是否确认支付?完成支付支付取消Payment Kit 服务器发送回调服务端验证回调签名更新订单状态支付结果回调处理流程下面是支付结果回调的处理流程是否是否Payment Kit 服务器发送回调服务端接收回调请求验证回调签名签名是否有效?解析支付结果拒绝请求支付是否成功?更新订单状态为已支付更新订单状态为支付失败执行后续业务逻辑记录失败原因返回成功响应第一步服务端预下单支付的第一步是服务端调用 Payment Kit 服务器的预下单接口获取预下单 ID。// 获取商户配置PetalPayConfigpetalPayConfigMercConfigUtil.getMercConfig();先获取商户配置包括商户号、私钥、证书序列号等。// 组装请求参数PreOrderCreateRequestV2preOrderReqPreOrderCreateRequestV2.builder().mercOrderNo(order-System.currentTimeMillis())// 订单号.appId(MercConfigUtil.APP_ID)// 应用ID.mercNo(MercConfigUtil.MERC_NO)// 商户号.tradeSummary(商品名称)// 商品简称.bizType(100002)// 业务类型实物商品购买.totalAmount(2L)// 金额分.callbackUrl(https://你的服务器/pay/callback)// 回调地址.build();组装预下单请求参数mercOrderNo订单号每次要不同appId应用 IDmercNo商户号tradeSummary商品名称bizType业务类型totalAmount金额单位分callbackUrl支付结果回调地址// 发起预下单请求DefaultPetalPayClientpayClientnewDefaultPetalPayClient(petalPayConfig);PreOrderCreateResponseresponsepayClient.execute(POST,/api/v2/aggr/preorder/create/app,PreOrderCreateResponse.class,preOrderReq);// 获取 prepayId 并组装 orderStrStringorderStrpayClient.buildOrderStr(response.getPrepayId());发送预下单请求获取prepayId然后用它组装orderStr返回给客户端。第二步客户端发起支付客户端收到服务端返回的orderStr后调用 Payment Kit 拉起支付界面。import{BusinessError}fromkit.BasicServicesKit;import{paymentService}fromkit.PaymentKit;import{common}fromkit.AbilityKit;EntryComponentstruct Index{context:common.UIAbilityContextthis.getUIContext().getHostContext()ascommon.UIAbilityContext;requestPaymentPromise(){// 使用服务端返回的 orderStrconstorderStr{app_id:***,merc_no:***,prepay_id:xxx,timestamp:...,noncestr:...,sign:****,auth_id:***};paymentService.requestPayment(this.context,orderStr).then((){// 支付成功console.log(succeeded in paying);}).catch((error:BusinessError){// 支付失败console.error(failed to pay, error.code:${error.code}, error.message:${error.message});});}build(){Column(){Button(支付).type(ButtonType.Capsule).width(50%).margin(20).onClick((){this.requestPaymentPromise();})}.width(100%).height(100%)}}paymentService.requestPayment()会拉起华为支付的收银台界面。用户确认支付后Promise 会 resolve如果用户取消或支付失败Promise 会 reject。第三步处理支付结果回调支付完成后Payment Kit 服务器会向你的服务器发送支付结果回调。publicCallBackBaseResponsetransationResultNotify(RequestBodyObjectcallbackRequest){StringcallbackStrJSONObject.toJSONString(callbackRequest);// 验证回调签名并处理业务逻辑returnVerifyTools.getCallbackResult(callbackStr,MercConfigUtil.HW_PAY_PUBLIC_KEY_FOR_CALLBACK,reqString-{NotifyPaymentReqcallbackReqJSONObject.parseObject(reqString,NotifyPaymentReq.class);// 处理支付结果更新订单状态、发货等});}回调处理步骤接收回调请求使用VerifyTools验证签名确保回调来自华为支付解析支付结果处理业务逻辑更新订单状态、发货等完整支付流程整个支付流程是这样的用户点击支付客户端向服务端发起支付请求服务端预下单服务端调用 Payment Kit 服务器获取预下单 ID返回 orderStr服务端把 orderStr 返回给客户端客户端拉起支付客户端调用requestPayment拉起收银台用户确认支付用户在收银台确认支付支付结果回调Payment Kit 服务器向服务端发送支付结果处理支付结果服务端更新订单状态适用场景Payment Kit 适合以下场景电商应用用户购买实物商品服务应用用户购买服务比如打车、外卖内容应用用户购买虚拟内容比如会员、课程游戏应用用户购买游戏道具注意事项企业开发者Payment Kit 只支持企业开发者接入证书安全商户私钥要妥善保管不要泄露订单号唯一每次支付的订单号要不同金额单位金额单位是分不是元回调验证一定要验证回调签名防止伪造错误处理每个接口调用都要处理错误总结Payment Kit 让你的应用可以方便地接入华为支付核心流程在 AppGallery Connect 开通鸿蒙支付服务生成商户证书配置应用信息服务端预下单获取 prepayId客户端拉起支付收银台处理支付结果回调掌握了这些你就能让你的应用支持鸿蒙支付让用户方便地购买你的商品或服务。