鸿蒙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需要登录钉钉去请求授权,一般都能进

代码实现:

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)

拉起支付宝代码参考:

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命令进行获取(使用命令行进行获取)
hdc shell aa dump -l

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

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

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

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

代码实现:

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中常见的三种拉起方式,希望对其他开发人员有所帮助、若文中有不足之处望读者谅解并指出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/873116.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

顶踩Emlog插件源码

源码介绍 顶踩Emlog插件源码 前些天看到小刀娱乐网的文章页面有了一些变化,那就是增加了一个有价值/无价值的顶踩按钮。 样式也是非常的好看 再加上两个表情包是非常的有趣。 写到了Emlog系统,效果如上图。 如何使用: 需要在echo_log.…

(二)ASP.NET Core WebAPI项目的启动地址设置

上一篇介绍了ASP.NET Core WebAPI项目创建,可参考: 1.webAPI的访问地址 1) 启动时,选择CoreWebAPI(项目名称)运行项目 可以看到打开浏览器后的地址是:applicationUrl"\"launchUrl 2) 启动时,选择IIS Expre…

ELK学习笔记(一)——使用K8S部署ElasticSearch8.15.0集群

一、下载镜像 #1、下载官方镜像 docker pull elasticsearch:8.15.0 #2、打新tag docker tag elasticsearch:8.15.0 192.168.9.41:8088/new-erp-common/elasticsearch:8.15.0 #3、推送到私有仓库harbor docker push 192.168.9.41:8088/new-erp-common/elasticsearch:8.15.0二、…

一文理解粒子滤波

0. 粒子滤波流程 之前学习记录的文档,这里也拿出来分享一下~ 基本原理:随机选取预测域的 N NN 个点,称为粒子。以此计算出预测值,并算出在测量域的概率,即权重,加权平均就是最优估计。之后按权重比例&…

英文翻译工具怎么选?这4款值得收藏。

英语作为国际通用语言,在我们的日常生活中一直有着很重要的地位,往大了说可以促进国际交流,实现文化传播;往小了说,可以解决很多生活中的小问题。但是在很多情况下英文仍旧是我们一个语言障碍,所以好的翻译…

网络学习-eNSP配置ACL

AR1路由器配置 <Huawei>system-view Enter system view, return user view with CtrlZ. [Huawei]undo info-center enable Info: Information center is disabled. [Huawei]interface gigabitethernet 0/0/0 [Huawei-GigabitEthernet0/0/0]ip address 192.168.2.254 24 …

MapSet之相关概念

系列文章&#xff1a; 1. 先导片--Map&Set之二叉搜索树 2. Map&Set之相关概念 目录 1.搜索 1.1 概念和场景 1.2 模型 2.Map的使用 2.1 关于Map的说明 2.2 关于Map.Entry的说明 2.3 Map的常用方法说明 3.Set的说明 3.1关于Set说明 3.2 常见方法说明 1.搜…

windows 环境下搭建mysql cluster 集群详细步骤

1、环境准备 下载mysql集群版本&#xff0c;我这里下载的是mysql-cluster-8.0.39-winx64 https://dev.mysql.com/downloads/cluster/ 2、创建配置文件 mysql集群版本下载以后解压后目录如下&#xff0c;创建配置文件 config.ini(集群配置文件&#xff0c;my.ini mysql配置…

【大模型基础】P0 大模型之路 —— 窗外灯火阑珊

目录 前言 —— 本系列博文内容何谓语言语言、图形符号、编码与解码基于规则、基于统计 语言模型&#xff08;Language Model&#xff09;预训练语言模型BERT 与 GPT 大模型范式预训练 微调大模型提示 / 指令 OpenAI 若一个语言模型亮起一盏灯&#xff0c;你会发现&#xff0c…

三维布尔运算对不规范几何数据的兼容处理

1.前言 上一篇文章谈过八叉树布尔运算&#xff0c;对于规范几何数据的情况是没有问题的。 在实际情况中&#xff0c;由于几何数据来源不一&#xff0c;处理和生成方式不一&#xff0c;我们无法保证进行布尔运算的几何数据都是规范的&#xff0c;对于不规范情况有时候也有需求…

vue3写一个无限树形菜单,递归组件

原本使用element plus的el-tree&#xff0c;可是他的UI不匹配&#xff0c;狠难改成自己想要的&#xff0c;所以只能自己去写一个&#xff0c;做法&#xff1a;使用递归组件 效果 组件代码itemDir.vue // itemDir.vue<template><div><ul v-for"node in li…

【AcWing】852. spfa判断负环

#include<iostream> #include<algorithm> #include<cstring> #include<queue> using namespace std;const int N 1e510;int n,m; int h[N],w[N],e[N],ne[N],idx; int dist[N],cnt[N];//cnt存最短路径的边数 bool st[N];void add(int a,int b,int c){e[…

前端:Vue3学习-2

前端:Vue3学习-2 1. vue3 新特性-defineOptions2. vue3 新特性-defineModel3. vue3 Pinia-状态管理工具4. Pinia 持久化插件 -> pinia-plugin-persistedstate 1. vue3 新特性-defineOptions 如果要定义组件的name或其他自定义的属性&#xff0c;还是得回归原始得方法----再…

输送线相机拍照信号触发(博途PLC高速计数器中断立即输出应用)

博途PLC相关中断应用请参考下面文章链接: T法测速功能块 T法测速功能块(博途PLC上升沿中断应用)-CSDN博客文章浏览阅读165次。本文介绍了博途PLC中T法测速的原理和应用,包括如何开启上升沿中断、配置中断以及T法测速功能块的使用。重点讲述了在中断事件发生后执行的功能块处…

有希带你深入理解指针(4)

目录 前言&#x1f970;1.回调函数&#x1f63a;1.1回调函数的概念&#x1f60b; 2.qsort使用&#x1f92f;2.1什么是qsort&#x1f47b;2.2 qsort函数的使用&#x1f9d0; 3.模拟实现qsort&#x1f60e; 前言&#x1f970; 本篇文章是对指针知识的进一步讲解&#xff0c;如果…

【leetcode】二分查找专题

文章目录 1.基本的二分查找2.使用二分 查找左右端点2.1 左右端点2.2 二分模板 3.搜索插入位置4.x的平方根5.山脉数组的顶峰6.寻找峰值7.寻找旋转排序数组中的最小值 对于二分查找&#xff0c;相信大家都再熟悉不过了。一旦数据是有序的&#xff0c;我们大概率会想到二分&#x…

上海小学生古诗文大会2024年备考:吃透历年真题和知识点(持续)

一、小学生古诗文大会真题精选&#xff08;答案和解析见文末&#xff09; *1. 孟浩然的《宿建德江》是一首&#xff08;&#xff09;。 A.五言绝句 B.七言绝句 C.五言律诗 D.七言律诗 *2. 茕茕子立&#xff0c;形影相吊出自&#xff08;&#xff09; A.《出师表》 B.《…

常见Python GUI库分析

引言 在Python环境下进行桌面编程时&#xff0c;选择合适的GUI&#xff08;图形用户界面&#xff09;库至关重要。在Python环境下进行桌面编程GUI开发时&#xff0c;有多个优秀的库可供选择。以下是一些推荐的GUI库&#xff0c;包括它们的推荐理由、优劣势以及简单的demo示例。…

Deepspeed框架学习笔记

DeepSpeed 是由 Microsoft 开发的深度学习优化库,与PyTorch/TensorFlow等这种通用的深度学习框架不同的是,它是一个专门用于优化和加速大规模深度学习训练的工具,尤其是在处理大模型和分布式训练时表现出色。它不是一个独立的深度学习框架,而是依赖 PyTorch 等框架,扩展了…

C++20中lambda表达式新增加支持的features

1.弃用通过[]隐式捕获this&#xff0c;应使用[,this]或[,*this]显示捕获&#xff1a; namespace { struct Foo {int x{ 1 };void print(){//auto change1 [] { // badauto change1 [, this] { // good, this: referencethis->x 11;};change1();std::cout << "…