首页 > 其他分享 >H5接入飞书

H5接入飞书

时间:2023-09-10 11:11:21浏览次数:43  
标签:调用 console log 接入 res JSAPI H5 鉴权

开发流程

文档 https://open.feishu.cn/document/client-docs/h5/introduction

  1. 创建并配置企业自建应用。
  2. (可选)鉴权调用 JSAPI。
  3. (可选)配置应用的免登流程。
  4. 发布并使用应用。

开放接口(H5 JSAPI)
开放平台提供了网页应用可以调用的 H5 JSAPI 。调用 JSAPI 依赖开放平台提供的工具包 JSSDK,使用时只需要在调用 JSAPI 的页面引入 JS 文件即可,引入方式如下代码所示。

<script
type= "text/javascript"
src= "https://lf1-cdn-tos.bytegoofy.com/goofy/lark/op/h5-js-sdk-1.5.23.js"
></script>

基本概念

https://open.feishu.cn/document/client-docs/h5/development-guide/basic-concepts

鉴权

当你调用开放平台客户端 API(JSAPI)时,飞书为了数据安全,需要先验证网页应用有权限访问的 JSAPI 范围,该过程称为鉴权。

免登

免登是指飞书用户在客户端内进入网页应用后,无需输入飞书用户名和密码,网页应用便可自动获取当前用户身份,进而登录系统的流程。

JSSDK

飞书客户端 JSSDK 是飞书面向客户端网页开发者(接入方)提供的网页开发工具包,仅可用在飞书客户端内。

access_token

access_token 是带有授权的飞书开放平台访问凭证,该访问凭证代表应用从平台、租户(指公司或者团队)、用户手中获得的授权。如需调用飞书服务端 API,则网页应用需要从飞书开放平台获取相应的访问凭证(access token)。开放平台提供了 3 种不同类型的访问凭证,分别为应用授权凭证 app_access_token、租户授权凭证 tenant_access_token、用户授权凭证 user_access_token,用于验证调用方身份、确保调用方具有执行操作所需要的权限。关于凭证的更多说明,可参见获取访问凭证。

jsapi_ticket

jsapi_ticket代表网页应用调用飞书 JSAPI 的临时凭证,是实现鉴权校验的重要数据。鉴权方式:比接入方服务端依据jsapi_ticket等数据生成的签名,与认证中心依据jsapi_ticket等数据生成的签名,若两个签名相等即为鉴权成功。

签名

签名是用于 JSSDK 权限验证的一段密文。为了防止数据泄露,会对jsapi_ticket、网页 URL 等参数拼接成字符串verifyStr,并用 sha1 数据加密算法对verifyStr进行加密,得到的密文就是签名signature。

鉴权调用 JSAPI

在开放平台创建好自建应用后,即可在本地开发相应的 Web 项目。如果你的 Web 项目需要调用 H5 JSAPI ,则需要先通过鉴权。JSAPI 鉴权是指飞书验证网页应用有权限访问的 JSAPI 范围。本文主要介绍 JSAPI 鉴权的工作流程,以及各飞书版本的鉴权策略。

文档 https://open.feishu.cn/document/client-docs/h5/development-guide/step-2:-call-jsapi(optional)

代码实现

官方文档 https://open.feishu.cn/document/home/integrating-web-apps-in-5-minutes/debug-and-release#ba60a8dc

前端利用服务端传来的数据实现 JSAPI 鉴权,鉴权成功后即可进行 JSAPI 的调用。

  1. 引入 JSSDK。

JSSDK 为网页应用提供了调用手机系统功能和飞书客户端功能(如:扫一扫、云文档)的能力,并支持性能优化,使你的网页应用体验能够接近原生体验。

<!DOCTYPE html>

<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>网页应用鉴权</title>
    <link rel="stylesheet" href="/public/index.css" />
    <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
    <!-- 引入 JSSDK -->
    <!-- JS 文件版本在升级功能时地址会变化,如有需要(比如使用新增的 API),请重新引用「网页应用开发指南」中的JSSDK链接,确保你当前使用的JSSDK版本是最新的。-->
    <script
      type="text/javascript"
      src="https://lf1-cdn-tos.bytegoofy.com/goofy/lark/op/h5-js-sdk-1.5.16.js"
    ></script>
    <!-- 在页面上添加VConsole方便调试-->
    <script src="https://unpkg.com/vconsole/dist/vconsole.min.js"></script>
    <script>
      var vConsole = new window.VConsole();
    </script>
  </head>

  <body>
    <div>
      <div class="img">
        <!-- 头像 -->
        <div id="img_div" class="img_div"></div>
        <span class="text_hello">Hello</span>
        <!-- 名称 -->
        <div id="hello_text_name" class="text_hello_name"></div>
        <!-- 欢迎语 -->
        <div id="hello_text_welcome" class="text_hello_welcome"></div>
      </div>
      <!-- 飞书icon -->
      <div class="icon"><img src="../public/svg/icon.svg" /></div>
    </div>
    <script src="/public/index.js"></script>
  </body>
</html>
  1. 调用 config 接口进行 JSAPI 鉴权。

前端可利用服务端传来的 appId、timestamp、nonceStr、signature 字段,调用 config 接口进行 JSAPI 鉴权。如果鉴权校验失败,除了可以在 onFail 中进行失败回调的处理,还可以在 h5sdk.error 接口中进行处理(需要在调用 config 接口前完成)。

function apiAuth() {
  console.log("start apiAuth");
  if (!window.h5sdk) {
    console.log("invalid h5sdk");
    alert("please open in feishu");
    return;
  }

  // 调用config接口的当前网页url
  const url = encodeURIComponent(location.href.split("#")[0]);
  console.log("接入方前端将需要鉴权的url发给接入方服务端,url为:", url);
  // 向接入方服务端发起请求,获取鉴权参数(appId、timestamp、nonceStr、signature)
  fetch(`/get_config_parameters?url=${url}`)
    .then((response) =>
      response.json().then((res) => {
        console.log(
          "接入方服务端返回给接入方前端的结果(前端调用config接口的所需参数):", res
        );
        // 通过error接口处理API验证失败后的回调
        window.h5sdk.error((err) => {
          throw ("h5sdk error:", JSON.stringify(err));
        });
        // 调用config接口进行鉴权
        window.h5sdk.config({
          appId: res.appid,
          timestamp: res.timestamp,
          nonceStr: res.noncestr,
          signature: res.signature,
          jsApiList: [],
          //鉴权成功回调
          onSuccess: (res) => {
            console.log(`config success: ${JSON.stringify(res)}`);
          },
          //鉴权失败回调
          onFail: (err) => {
            throw `config failed: ${JSON.stringify(err)}`;
          },
        });
        // 完成鉴权后,便可在 window.h5sdk.ready 里调用 JSAPI
        window.h5sdk.ready(() => {
          // window.h5sdk.ready回调函数在环境准备就绪时触发
          // 调用 getUserInfo API 获取已登录用户的基本信息,详细文档参见https://open.feishu.cn/document/uYjL24iN/ucjMx4yNyEjL3ITM
          tt.getUserInfo({
            // getUserInfo API 调用成功回调
            success(res) {
              console.log(`getUserInfo success: ${JSON.stringify(res)}`);
              // 单独定义的函数showUser,用于将用户信息展示在前端页面上
              showUser(res.userInfo);
            },
            // getUserInfo API 调用失败回调
            fail(err) {
              console.log(`getUserInfo failed:`, JSON.stringify(err));
            },
          });
          // 调用 showToast API 弹出全局提示框,详细文档参见https://open.feishu.cn/document/uAjLw4CM/uYjL24iN/block/api/showtoast
          tt.showToast({
            title: "鉴权成功",
            icon: "success",
            duration: 3000,
            success(res) {
              console.log("showToast 调用成功", res.errMsg);
            },
            fail(res) {
              console.log("showToast 调用失败", res.errMsg);
            },
            complete(res) {
              console.log("showToast 调用结束", res.errMsg);
            },
          });
        });
      })
    )
    .catch(function (e) {
      console.error(e);
    });
}
  1. 调用 JSAPI。

完成 JSAPI 鉴权后,即可在window.h5sdk.ready里调用 JSAPI。示例代码路径:web_app_with_jssdk/python/public/index.js。在apiAuth函数中的window.h5sdk.ready函数里实现 JSAPI 的调用。

// 完成鉴权后,便可在 window.h5sdk.ready 里调用 JSAPI
window.h5sdk.ready(() => {
  // window.h5sdk.ready回调函数在环境准备就绪时触发
  // 调用 getUserInfo API 获取已登录用户的基本信息,详细文档参见https://open.feishu.cn/document/uYjL24iN/ucjMx4yNyEjL3ITM
  tt.getUserInfo({
    // getUserInfo API 调用成功回调
    success(res) {
      console.log(`getUserInfo success: ${JSON.stringify(res)}`);
      // 单独定义的函数showUser,用于将用户信息展示在前端页面上
      showUser(res.userInfo);
    },
    // getUserInfo API 调用失败回调
    fail(err) {
      console.log(`getUserInfo failed:`, JSON.stringify(err));
    },
  });
  // 调用 showToast API 弹出全局提示框,详细文档参见https://open.feishu.cn/document/uAjLw4CM/uYjL24iN/block/api/showtoast
  tt.showToast({
    title: "鉴权成功",
    icon: "success",
    duration: 3000,
    success(res) {
      console.log("showToast 调用成功", res.errMsg);
    },
    fail(res) {
      console.log("showToast 调用失败", res.errMsg);
    },
    complete(res) {
      console.log("showToast 调用结束", res.errMsg);
    },
  });
});

标签:调用,console,log,接入,res,JSAPI,H5,鉴权
From: https://www.cnblogs.com/zychuan/p/17690912.html

相关文章

  • Android前端音视频数据接入GB28181平台意义
    技术背景在我们研发Android平台GB28181前端音视频接入模块之前,业内听到最多的是,如何用Android端在没有国标摄像头设备的前提下,模拟GB28181的信令和媒体流交互流程,实现GB28181整体方案的测试。Android端真的没有必要做个支持GB28181的接入模块?如果说做一个设备端摄像头国标设备接入......
  • nodejs采集淘宝、天猫网商品详情数据以及解决_m_h5_tk令牌及sign签名验证(2023-09-09)
    一、淘宝、天猫sign加密算法淘宝、天猫对于h5的访问采用了和APP客户端不同的方式,由于在h5的js代码中保存appsercret具有较高的风险,mtop采用了随机分配令牌的方式,为每个访问端分配一个token,保存在用户的cookie中,通过cookie带回服务端分配的token,客户端利用分配的token对请求的URL......
  • h5养鸡游戏看广告源码开发
      H5养鸡游戏模式有app和小程序模式,都是以看广告模式出现,但是H5形式也可以开发,但怎么运营就看客户怎么操作了。其实网页版的游戏无非就是充值,商城卖货,返利等模式。  首先,我们需要设计游戏的功能和界面。在游戏设计中,我们需要考虑小鸡的生长周期、饲料消耗、疾病预防等问题......
  • CH59X/CH58X/CH57X sleep模式下串口唤醒收发数据
    整体程序逻辑:下方的具体程序及使用是基于CH592进行的SLEEP模式睡眠唤醒是由协议栈管理的,还在睡眠时,无法接收到数据。已经通过使能HAL_SLEEP开启睡眠。如果需要在睡眠时实时接收串口传来的数据是不可行的,需要先将设备唤醒之后再进行串口数据的接收;将唤醒的条件设置为下降沿唤醒......
  • h5养鸡游戏源码开发定制
      养鸡游戏H5版本模式,是一种以网页版的模式出现,玩家输入网址就能打开游戏,无需下载,直接打开的游戏便吸引了不少的用户加入。H5养鸡游戏的版本多,其中还有app和小程序版本的。  养鸡游戏H5开发需要借助HTML5、CSS3和JavaScript前端代码写,所有的软件都是如此,包括app和小程序。......
  • GB国标28181协议下设备接入EasyCVR后,如何调用接口获取RTMP和RTSP视频流
    EasyCVR是一款安防视频监控平台,具有强大的可拓展性、灵活的视频能力和轻快的部署特性。它支持多种主流标准协议,包括国标GB28181、RTSP/Onvif、RTMP等,并能够接入各个厂家的私有协议与SDK,例如海康Ehome、海大宇等设备的SDK。该平台不仅具备传统安防视频监控的功能,如视频监控直播、云......
  • 国标GB28181视频监控EasyGBS接入大量通道时,创建角色接口未响应的问题解决方法
    EasyGBS是一款基于国标GB28181协议的视频云服务平台。它支持多路设备同时接入,并能将视频流以RTSP、RTMP、FLV、HLS、WebRTC等格式分发到多个平台和终端。该平台提供了视频监控直播、云端录像、云存储、检索回放、智能告警、语音对讲、平台级联等功能。在视频能力方面,GB28181视频监......
  • RTSP协议视频平台EasyNVR接入大华摄像头无法拉取H265格式视频流的解决方案
    EasyNVR作为视频智能安防监控平台,在早期版本中已经集成了EasyPlayer.JS播放器。随着EasyPlayer.JS网页视频播放器的升级,EasyNVR也支持了H.265编码格式的视频播放。此外,EasyNVR还可以集成iframe的视频播放功能,这些功能的存在为EasyNVR智能安防监控平台带来了更多的扩展性。我们将Eas......
  • 安防视频监控平台EasyCVR为何接入海康SDK协议后无法播放?
    EasyCVR是一款开源的视频监控/安防监控/视频汇聚平台,能够在复杂网络环境中统一汇聚、整合和集中管理各类分散的视频资源。在视频监控播放方面,EasyCVR支持1、4、9、16个画面窗口播放,并能同时播放多路视频流,还支持视频定时轮播。该平台支持多种播放协议,包括HLS、HTTP-FLV、WebSocket-......
  • 在CH582的USB代码中启用5、6、7双向端点
      CH582手册中是有标明有8组USB端点的,不过代码中只用了端点0~4,端点5、6、7也是可以使用的。占个坑代码后续更新。......