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

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

前言

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

可信域名

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

如何获取code?

企业微信提供了一个授权链接的方式,去获取code,简而言之,就是把自己的地址加密一下,通过传参的方式传给企业微信,而它则通过跳转路由的方式给你带过来code。

这个授权链接分为两种,一种是手动授权 链接,一种是静默授权 链接,建议使用手动授权 链接。

手动授权链接可以拿到用户的个人敏感信息 包括:企业微信头像、手机号、邮箱。

相关代码如下:

javascript 复制代码
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的,调用登录接口去获取token
	        qiweiLogin(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=30
	 const 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里面了。

拿到这个票据之后,就好说了。

第一步下载包

javascript 复制代码
npm install @wecom/jssdk
npm install crypto-js

第二步引用包

javascript 复制代码
import * as ww from '@wecom/jssdk'
import CryptoJS from 'crypto-js';

第三步注册js-sdk

javascript 复制代码
  // 注册jsApi
  const registerApi = () => {
    ww.register({
      corpId: '你的企业id', // 必填,当前用户企业所属企业ID
      agentId: 你的应用id(数字类型), // 必填,当前应用的AgentID
      jsApiList: ['hideOptionMenu'], // 必填,需要使用的JSAPI列表
      getConfigSignature, // 必填,根据url生成企业签名的回调函数
    });
    // 测试隐藏菜单
    ww.hideOptionMenu();
  };
  const getConfigSignature = async () => {
    // 根据 url 生成企业签名
    // 生成方法参考 https://developer.work.weixin.qq.com/document/14924
    let 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),试了好多次都没有触发,有实现的,希望大佬指点一下。

总结

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

关注我,不迷路。

不定时分享前端相关问题以及解决方案。

希望能帮助每个在开发类似功能的小伙伴。

相关推荐
军军君015 小时前
Three.js基础功能学习十三:太阳系实例上
前端·javascript·vue.js·学习·3d·前端框架·three
vx-bot5556665 小时前
企业微信接口在多租户SaaS平台中的集成架构与数据隔离实践
大数据·架构·企业微信
xiaoqi9226 小时前
React Native鸿蒙跨平台如何实现分类页面组件通过searchQuery状态变量管理搜索输入,实现了分类的实时过滤功能
javascript·react native·react.js·ecmascript·harmonyos
qq_177767376 小时前
React Native鸿蒙跨平台实现应用介绍页,实现了应用信息卡片展示、特色功能网格布局、权限/联系信息陈列、评分展示、模态框详情交互等通用场景
javascript·react native·react.js·ecmascript·交互·harmonyos
2603_949462106 小时前
Flutter for OpenHarmony社团管理App实战:预算管理实现
android·javascript·flutter
wuhen_n6 小时前
JavaScript内存管理与执行上下文
前端·javascript
Hi_kenyon6 小时前
理解vue中的ref
前端·javascript·vue.js
jin1233227 小时前
基于React Native鸿蒙跨平台地址管理是许多电商、外卖、物流等应用的重要功能模块,实现了地址的添加、编辑、删除和设置默认等功能
javascript·react native·react.js·ecmascript·harmonyos
2501_920931708 小时前
React Native鸿蒙跨平台医疗健康类的血压记录,包括收缩压、舒张压、心率、日期、时间、备注和状态
javascript·react native·react.js·ecmascript·harmonyos
橙露9 小时前
React Hooks 深度解析:从基础使用到自定义 Hooks 的封装技巧
javascript·react.js·ecmascript