鸿蒙Next-拉起支付宝的三种方式——教程

鸿蒙Next-拉起支付宝的三种方式------教程

鸿蒙Next系统即将上线,应用市场逐渐丰富、很多APP都准备接入支付宝做支付功能,目前来说有三种方式拉起支付宝:通过支付宝SDK拉起、使用OpenLink拉起、传入支付宝包名使用startAbility拉起。以上的三种拉起方式都是指的Next应用,不包含元服务,元服务有自己的生态限制暂时不支持拉起第三方应用。

一、使用支付宝SDK拉起

OpenHarmony第三方仓库包有支付宝的SDK:

仓库地址: https://ohpm.openharmony.cn/#/cn/detail/@cashier_alipay%2Fcashiersdk

官方Demo地址:

https://alidocs.dingtalk.com/i/nodes/qnYMoO1rWxrkmoj2IOpZR6yaJ47Z3je9?iframeQuery=utm_source%3Dportal%26utm_medium%3Dportal_recent&rnd=0.2928087218087806

官方的Demo需要登录钉钉去请求授权,一般都能进

代码实现:

tsx 复制代码
onAlipay() {
  ///这个支付信息对象的所有值都应该服务器返回
  let obj = new PayInfo(); //支付信息
  obj.appId = "1111111111111";
  obj.orderId = "1111111111"
  obj.productName = "1年VIP"
  obj.amount = 10
  obj.notifyUrl = 'https://www.huawei.com'
  obj.rsaPrivate =
    "MIICXQIBAAKBgQC+L0rfjLl3neHleNMOsYTW8r0QXZ5RVb2p/vvY3fJNNugvJ7lo4+fdBz+LN4mDxTz4MTOhi5e2yeAqx+v3nKpNmPzC5LmDjhHZURhwbqFtIpZD51mOfno2c3MDwlrsVi6mTypbNu4uaQzw/TOpwufSLWF7k6p2pLoVmmqJzQiD0QIDAQABAoGAakB1risquv9D4zX7hCv9MTFwGyKSfpJOYhkIjwKAik7wrNeeqFEbisqv35FpjGq3Q1oJpGkem4pxaLVEyZOHONefZ9MGVChT/MNH5b0FJYWl392RZy8KCdq376Vt4gKVlABvaV1DkapL+nLh7LMo/bENudARsxD55IGObMU19lkCQQDwHmzWPMHfc3kdY6AqiLrOss+MVIAhQqZOHhDe0aW2gZtwiWeYK1wB/fRxJ5esk1sScOWgzvCN/oGJLhU3kipHAkEAysNoSdG2oWADxlIt4W9kUiiiqNgimHGMHPwp4JMxupHMTm7D9XtGUIiDijZxunHv3kvktNfWj3Yji0661zHVJwJBAM8TDf077F4NsVc9AXVs8N0sq3xzqwQD/HPFzfq6hdR8tVY5yRMb4X7+SX4EDPORKKsgnYcur5lk8MUi7r072iUCQQC8xQvUne+fcdpRyrR4StJlQvucogwjTKMbYRBDygXkIlTJOIorgudFlrKP/HwJDoY4uQNl8gQJb/1LdrKwIe7FAkBl0TNtfodGrDXBHwBgtN/t3pyi+sz7OpJdUklKE7zMSBuLd1E3O4JMzvWP9wEE7JDb+brjgK4/cxxUHUTkk592"

  OrderInfoUtil.getOrderInfo(obj).then(orderInfo => {
    // orderInfo 由服务端生成
    // 第二个参数 控制是否展示支付宝loading
    new Pay().pay(orderInfo, true).then((result) => {
      let message =
        `resultStatus: ${result.get('resultStatus')} memo: ${result.get('memo')} result: ${result.get('result')}`;
      console.log("支付结果:" + message);

      if (result.get('resultStatus') == '9000') { //支付成功
        console.log("支付成功");
      } else {
        console.log("支付失败");
      }
    }).catch((error: BusinessError) => {
      LogUtil.e("aLiParSdk:", error)
    });
  })
}

完整的代码可以参考后面的git仓库,详细的描述在另外一位博主上也有详细的解释:

博主链接:鸿蒙Next-支付宝SDK接入教程_怎么唤起鸿蒙版支付宝-CSDN博客

完整代码仓库地址: https://gitee.com/qq1963861722/AliPayDemo.git

效果图

二、使用OpenLink拉起支付宝

使用OpenLink可以实现应用之间的跳转,具体的支付宝也可以参考拉起游览器的案例进行实现

使用API: UIAbilityContext.openLink 链接:UIAbilityContext-application-接口依赖的元素及定义-ArkTS API-Ability Kit(程序框架服务)-应用框架 - 华为HarmonyOS开发者 (huawei.com)

API官方参考用法链接: 使用Deep Linking实现应用间跳转-指向性跳转-应用间跳转-Stage模型开发指导-Ability Kit(程序框架服务)-应用框架 - 华为HarmonyOS开发者 (huawei.com)

拉起支付宝代码参考:

ts 复制代码
let context = getContext(this) as common.UIAbilityContext;
let link: string = 'alipays://platformapi/startapp' //支付宝拉起的专属链接
let openLinkOptions: OpenLinkOptions = {
  appLinkingOnly: false,
  parameters: { demo_key: 'demo_value' }
};

try {
  context.openLink(
    link,
    openLinkOptions,
    (err, result) => {
      LogUtil.e(TAG, `openLink callback error.code: ${JSON.stringify(err)}`);
      LogUtil.i(TAG, `openLink callback result: ${JSON.stringify(result.resultCode)}`);
      LogUtil.i(TAG, `openLink callback result data: ${JSON.stringify(result.want)}`);
    }
  ).then(() => {
    LogUtil.i(TAG, `open link success.`);
  }).catch((err: BusinessError) => {
    LogUtil.e(TAG, `open link failed, errCode ${JSON.stringify(err.code)}`);
  });
} catch (e) {
  LogUtil.e(TAG, `exception occured, errCode ${JSON.stringify(e.code)}`);
}

完整代码仓库地址: https://gitee.com/qq1963861722/AliPayDemo.git

实现效果参考

三、使用startAbility拉起支付宝

在鸿蒙Next系统中知道应用的包名就可以通过startAbility拉起另一个应用,明确了拉起的应用使用显式Want传入包名进行拉起

使用API: UIAbilityContext.startAbility

API官方参考用法链接: https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-inner-application-uiabilitycontext-V5#uiabilitycontextstartability

支付宝的包名获取方式

1.通过hdc命令进行获取(使用命令行进行获取)
c 复制代码
hdc shell aa dump -l

hdc命令的使用链接: hdc-调试工具-开发 - 华为HarmonyOS开发者 (huawei.com)

2.通过连接真机在编译器中的Device File Browser获取包名

路径:/data/app/el2/100/database/com.alipay.mobile.client

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

代码实现:

ts 复制代码
const context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
let want: Want = {
  deviceId: '',
  bundleName: 'com.alipay.mobile.client',
  abilityName: 'EntryAbility',
  flags: wantConstant.Flags.FLAG_INSTALL_ON_DEMAND, //如果未安装指定的功能,请安装该功能,
  parameters: {
    //自定义参数传递页面信息
  }
}
context.startAbility(want)

完整代码仓库地址: https://gitee.com/qq1963861722/AliPayDemo.git

效果实现:

以上是支付宝在鸿蒙Next中常见的三种拉起方式,希望对其他开发人员有所帮助、若文中有不足之处望读者谅解并指出。

相关推荐
PlumCarefree1 小时前
基于鸿蒙API10的RTSP播放器(八:音量和亮度调节功能的整合)
华为·ffmpeg·音视频·harmonyos
Android技术栈3 小时前
鸿蒙开发(NEXT/API 12)【使用fetchsync发送同步网络请求 (C/C++)】 远场通信服务
c语言·网络·c++·信息与通信·harmonyos·鸿蒙系统·openharmony
OH五星上将16 小时前
OpenHarmony(鸿蒙南向开发)——标准系统移植指南(一)
harmonyos·移植·openharmony·鸿蒙开发·鸿蒙内核·子系统
OH五星上将21 小时前
OpenHarmony(鸿蒙南向开发)——标准系统移植指南(二)Linux内核
linux·驱动开发·嵌入式硬件·移动开发·harmonyos·鸿蒙开发·鸿蒙内核
cdblh1 天前
【时间盒子】-【6.任务页面】在同一个页面新建、编辑任务
华为·鸿蒙·deveco studio·harmonyos next·harmony os
JohnLiu_1 天前
HarmonyOS Next鸿蒙扫一扫功能实现
华为·harmonyos·鸿蒙·扫一扫
weixin_424343021 天前
2024年8月HarmonyOS鸿蒙应用开发者高级认证全新题库
华为·harmonyos
让开,我要吃人了1 天前
OpenHarmony鸿蒙( Beta5.0)RTSPServer实现播放视频详解
驱动开发·嵌入式硬件·华为·移动开发·harmonyos·鸿蒙·openharmony
至善迎风1 天前
“华为杯”第二十一届中国研究生数学建模竞赛参赛邀请函
数学建模·华为·研究生数学建模·数学建模研赛
OH五星上将1 天前
OpenHarmony(鸿蒙南向开发)——轻量和小型系统三方库移植指南(二)
驱动开发·移动开发·harmonyos·内存管理·openharmony·鸿蒙内核·鸿蒙移植