当前位置: 首页 > news >正文

企业微信自建应用开发详细教程,如何获取授权链接?如何使用js-sdk?

企业微信自建应用开发详细教程,如何获取授权链接?如何使用js-sdk?

  • 前言
  • 可信域名
  • 如何获取code?
  • 如何注册js-sdk?
    • 第一步下载包
    • 第二步引用包
    • 第三步注册js-sdk
    • 疑难杂症
  • 总结

前言

最近做了一个需求,那就是把原有的一个h5项目迁移到企业微信里面,这是我之前没有做过的,特意来写一篇文章记录一下开发过程中遇到的一些坑,别说,坑是真不少,废话少说,直接上实操和代码。

可信域名

这是第一个坑,要调试的话,必须得先设置可信域名,在企业微信管理后台设置可信域名,先下载一个文件,放在你的域名能访问的根目录下,就能设置好可信域名了。

如何获取code?

企业微信提供了一个授权链接的方式,去获取code,简而言之,就是把自己的地址加密一下,通过传参的方式传给企业微信,而它则通过跳转路由的方式给你带过来code。
这个授权链接分为两种,一种是手动授权链接,一种是静默授权链接,建议使用手动授权链接。
手动授权链接可以拿到用户的个人敏感信息包括:企业微信头像、手机号、邮箱。
相关代码如下:

const getCode = () => {let url = encodeURIComponent(location.href);const urls = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${url}&response_type=code&scope=snsapi_privateinfo&agentid=${agentid}&state=highSeas#wechat_redirect`;let code = getUrlParam('code');if (!code) {window.location.href = urls;} else {if (!sessionStorage.getItem('token')) {// 没有token的,调用登录接口去获取tokenqiweiLogin(code as string);} else {// 有token的话就证明已经登录成功了}}
}// 获取url参数
const getUrlParam = (name: string) => {const res: any = {};if (location.search.indexOf('?') == -1) return;const search = location.search.split('?')[1]; // #前面的参数 返回类似于 a=10&b=20&c=30const paramArr = search.split('&');paramArr.forEach((item) => {const itemArr = item.split('=');const key = itemArr[0];const value = itemArr[1];res[key] = value;});return res[name] !== undefined ? res[name] : null;
};

如何注册js-sdk?

首先,要生成js-sdk签名,这就要看JS-SDK 签名算法,还要让后端配合去调用获取企业 jsapi_ticket的接口,可以在调用登录接口的时候,后端拿到token,然后让后端调用一下这个接口,把jsapi_ticket在登录接口一块返回给你。它和token的失效时间是一致的,我是统一把他们存在session里面了。
拿到这个票据之后,就好说了。

第一步下载包

npm install @wecom/jssdk
npm install crypto-js

第二步引用包

import * as ww from '@wecom/jssdk'
import CryptoJS from 'crypto-js';

第三步注册js-sdk

  // 注册jsApiconst registerApi = () => {ww.register({corpId: '你的企业id', // 必填,当前用户企业所属企业IDagentId: 你的应用id(数字类型), // 必填,当前应用的AgentIDjsApiList: ['hideOptionMenu'], // 必填,需要使用的JSAPI列表getConfigSignature, // 必填,根据url生成企业签名的回调函数});// 测试隐藏菜单ww.hideOptionMenu();};const getConfigSignature = async () => {// 根据 url 生成企业签名// 生成方法参考 https://developer.work.weixin.qq.com/document/14924let timestamp = Math.floor(Date.now() / 1000);let nonceStr = Math.random().toString(36).substr(2);let url = location.href.split('#')[0];let jsapi_ticket = sessionStorage.getItem('jsapi_ticket') || '';let string1 = `jsapi_ticket=${jsapi_ticket}&noncestr=${nonceStr}&timestamp=${timestamp}&url=${url}`;let signature = CryptoJS.SHA1(string1).toString();return { timestamp, nonceStr, signature };};

记住registerApi 方法一定要在登录完成以后,保存好jsapi_ticket之后调用哦。

疑难杂症

这个里面有一个监听页面返回的事件ww.onHistoryBack(callback),试了好多次都没有触发,有实现的,希望大佬指点一下。

总结

虽然,总结下来没有几步,看起来挺简单的,但是在开发过程中是有很多坑的,希望通过这篇文章可以帮助大家避坑。

关注我,不迷路。
不定时分享前端相关问题以及解决方案。
希望能帮助每个在开发类似功能的小伙伴。

http://www.dtcms.com/a/568676.html

相关文章:

  • html css js网页制作成品——高定晚礼服HTML+CSS网页设计(5页)附源码
  • 蓝牙钥匙 第43次 特殊用户群体场景下的汽车数字钥匙系统:包容性设计与技术创新
  • 万网如何建设购物网站wordpress分类目录 菜单 页面
  • 智能网联汽车 HD map架构解析
  • HTML常用单标签速查手册
  • 告别算法死记硬背,Hello-Algo 让抽象知识变直观,搭配cpolar穿透工具更自由
  • Go从入门到精通(27) - 并行任务处理器
  • Claude Code 使用 MiniMax M2 模型
  • Auto CAD二次开发——复制和旋转图形对象
  • 全屏响应式网站模板网站seo综合公司
  • php做简单网站教程视频教程企业门户网站模板 下载
  • Rust开发实战之WebSocket通信实现(tokio-tungstenite)
  • 编译缓存利器 ccahce、sccahce
  • Rust开发实战之使用 Reqwest 实现 HTTP 客户端请求
  • 各大公司开源网站广州出台21条措施扶持餐饮住宿
  • gmt_create为啥叫gmt
  • 从 NGINX 到 Kubernetes Ingress:现代微服务流量管理实战
  • 【C++】继承(2):继承与友元,静态成员,多继承黑/白盒复用
  • css实战:常用伪元素选择器介绍
  • 4.4 路由算法与路由协议【2013统考真题】
  • 营销型网站建设需要备案吗上饶网站建设企业
  • 福建网站建设科技有限公司品牌建设还需持续力
  • 工业CMOS相机的原理及基础知识
  • 无人机电气隔离与抗干扰技术概述
  • Elasticsearch的学习
  • GitHub 热榜项目 - 日榜(2025-11-04)
  • SAP 概述
  • 深圳家具网站建设做网站需要会写代码6
  • 常见的网站文件后缀名
  • 18、docker-macvlan-2-示例