企微侧边栏开发(内部应用内嵌H5)

一、背景

公司的业务需要用企业微信和客户进行沟通,而客户的个人信息基本都存储在内部CRM系统中,对于销售来说需要一边看企微,一边去内部CRM系统查询,比较麻烦,希望能在企微增加一个侧边栏展示客户的详细信息,提升员工的工作效率。

1.1现状

目前内部CRM系统已经介入了企微的各种回调,销售给客户编辑信息,添加好友,删除好友等都会回存到CRM系统。

二、调研

直接在企微开发者文档搜索,搜不到关于如何配置侧边栏的教程,不过可以看到很多人咨询关于侧边栏的问题,所以企微是支持侧边栏的。

在浏览器搜,倒是搜到一些配置教程。看了一下,是可以在企业微信内嵌H5,符合业务需求。

企微侧边栏配置教程

2.1基本概念

基本概念介绍 - 文档 - 企业微信开发者中心 (qq.com)

补充一些:

userid,无论是企业内用户还是客户,都是企业内唯一,同一个人在不同企业主体可能userid是一样的。

agentid,也是企业内唯一,并且不同企业主体之间,很容易重复。

如果是需要配置多企业主体、多应用的,在存储的时候就需要多注意。

三、实现步骤

3.1企微后台配置侧边栏

1.创建应用

首先需要在企微管理后台创建一个应用。应用管理-应用-创建应用

2.配置应用

配置应用可见范围和配置侧边栏H5

配置要嵌入在侧边栏的网页链接,如果有需要携带到网页的参数也可以放在链接后面。比如corpId,agentId或者业务参数.

3.配置可信域名IP(要调用企微SDK则必配)

配置网页授权,如果网页需要调用企微的SDK,必须配置可信域名。这意味着需要先租域名并将域名绑定到企微对应的企业。

配置可信ip,ip直接用英文分号隔开

4.配置效果

在企微,添加外部客户(如@微信代表微信用户,就是外部客户),就可以在右侧看到配置的侧边栏了。

3.2代码接入企微

因为部分SDK需要在企微环境才能使用,在本地要测试会比较难,因此接入企微配置和登录的部分建议可以直接在测试环境测,因为本地环境没法配置可信域名.(或许使用内网穿透可以本地调试)

3.2.1、config配置

在调用企微的SDK之前,需要先调用企微的config方法完成页面的配置,每打开一个新的页面都需要进行一次配置。

为了兼容不同版本的企业微信,最好是先调用wx.config再调用wx.agentConfig完成页面配置。

在企业微信3.0.24版本之后,可以只调用wx.agentConfig配置页面

wx.config

wx.agentConfig

上述SDK有一个参数签名signature,需要通过一些参数加密获得,而所需的参数里面有一个jsapi_ticket,需要通过服务端调用企微接口获得。

而服务端调用企微接口都需要accessToken凭证。因而总体流程如下:

1.服务端调用接口查询accessToken(注意secret取的是自建应用的secret

2.服务端再调用接口查询jsapi_ticket(注意secret取的是自建应用的secret

3.服务端然后随机生成随机字符串、时间戳,再加上前端传入的url,以及调用上面接口获得的jsapi_ticket,构建字符串并加密。(注意url让前端通过location.href.split('#')[0]获取,而且需要encodeURIComponent

4.客户端从服务端获取到配置所需的全部参数,然后前后调用wx.config,wx.agentConfig完成配置。

上述凡是需要用secret的地方,传的secret都是应用的secret.并且获取accessToken和ticket的接口都要请求频率限制,因此后端最好缓存一下,过期时间设为企微那边给的时间即可,不过企微那边说有可能某些原因导致提前过期,这个时候就只能在需要accessToken的接口请求的时候去检测请求返回的err_code,如果code等于accessToken过期的错误码,就触发不走缓存请求更新accessToken缓存.

3.2.2、企微登录

H5的企微登录和小程序的登录完全不一样,因为小程序是直接在微信里面跑,而H5是跑在自家服务器的。因而不能用wx.qy.login进行登录。

又或者说,在侧边栏H5里面所谓的登录也只是为了给前端返回一个当前用户的唯一标识而已。

阅读了官方文档之后,决定使用网页授权的方式来完成授权登录。

1.构造网页授权链接获取登录凭证code

只有三个参数是需要自己传入的,redirect_uri要传网页域名+路径,借鉴官方给的例子即可,红色的参数就是要自己传的,其他的保持原样就行.(因为这个微信接口完全不涉及token,可以直接让前端发起).

请求该链接之后,会自动重定向到 redirect_uri?code=CODE&state=STATE.后面的部分是企微自动拼接的,我们可以直接从链接处获取到code.

2.获取访问用户身份

从上一步可以获取到用户凭证code,接下来可以调用接口获取用户身份信息.将当前登录的企微成员的user_id返回,并缓存起来,用作后面请求的身份凭证.(因为只是获取一个身份唯一标识,所以没有过期的说法)

3.获取当前外部客户身份

完成config配置之后页面就已经可以调用企微的SDK了,通过调用SDK可以获取企微当前打开的外部客户的信息

该接口对进入该网页的入口有要求,因为要在进入的时候携带一些东西才能知道当前打开的是哪个外部客户的页面.因而只能代码跑起来之后从企微侧边栏处进入的时候能获取到值.

至此,已经能获取当前登录的企微用户的唯一标识,外部客户的唯一标识.接下来就可以进行业务开发了.

3.3验证成果

能够正常完成配置,在企微绑定企微客户并展示客户信息.

四、思考

1.在获取到登录企微的用户唯一标识之后,一般会缓存起来以便后续使用,但如果退出登录,换一个账号登录企微,怎么知道应该要触发重新登录?

目前我们的做法是每次关闭H5都会清空缓存。(能解决串数据的问题,但速度会慢一点)

2.因为获取access_token的接口有请求频率限制,所以肯定得缓存起来。但access_token有可能会在返回的过期时间之前就过期了(官网写的,还没遇到过)。那么如果过期了怎么触发token更新?

目前的做法是在每个调用企微端的接口请求返回时就判断返回的code,如果是token过期的code就调用方法更新缓存token,并事务回滚,约定code让前端重新请求一次。(缺点是每次调用的地方都要加上判断的代码)

有一个想法:定一个规范,比如向企微发起的请求必须走某些公用方法。自定义一个切入点,对这些公用方法做增强,监听请求结果的code,如果是token过期的code就调用方法更新缓存token。(好处是后面写的方法就不需要再关心access_token的过期了,只需要按照规定写代码)

如果有更好的想法,欢迎一起交流!!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常见手撕项目C++

常见手撕项目C 设计模式单例模式饿汉模式懒汉模式 设计模式 单例模式 单例模式是一种常用的软件设计模式,其目的是确保一个类只有一个实例,并提供一个全局访问点来获取该实例。 优点: 资源控制:单例模式能够确保一个类只有一个实…

淘宝订单中的涉及红包检测、优惠券检测方案|工具|API

首先,检测订单红包的核心价值是什么? “红包的本质就是薅平台羊毛:不用怀疑,平台对于这种损害平台利益的行为肯定是最高等级的稽查”。那么,在日常运营中,需要尽可能过滤这类订单。 其次,如何使…

2024-03-28 问AI: 介绍一下AI 大神,Ian Goodfellow

文心一言 Ian Goodfellow是机器学习领域的知名学者,对深度学习领域有着重要贡献。他生于1985年,本科和硕士阶段就读于斯坦福大学,师从吴恩达。博士阶段,他跟随蒙特利尔大学的著名学者Yoshua Bengio研究机器学习,并在2…

SQL注入 (一)

一、sql注入的简介 将一段内容传入到目标网站,这段内容会被当做程序来执行 二、MySQL扩展补充 mysql的结构 库表名字段数据 mysql的用户 管理员:跨库、文件读写操作普通用户:猜解 判断目标网站的用户类别 白盒:读代码黑盒…

happybase基本操作方法

一、准备工作 (1)windows下安装happybase库: pip install happybase -i https://pypi.tuna.tsinghua.edu.cn/simple (2)确保HDFS、Hbase、Zookeeper服务正常运行: 启动HDFS命令:start-dfs.sh…

【数据结构 | 图论】如何用链式前向星存图(保姆级教程,详细图解+完整代码)

一、概述 链式前向星是一种用于存储图的数据结构,特别适合于存储稀疏图,它可以有效地存储图的边和节点信息,以及边的权重。 它的主要思想是将每个节点的所有出边存储在一起,通过数组的方式连接(类似静态数组实现链表…

多线程实现Scheduler定时任务

在Spring框架中,Scheduled注解用于标记一个方法作为定时任务,它使用cron表达式来定义任务的执行频率。对于cron表达式定义的定时任务,如果上一个任务的执行还没有完成,下一个任务的执行行为取决于你使用的调度器(sched…

C语言多服务器多播组网框架

使用技术: UDP ipv4 禁止本地回环 允许端口复用 超时等待 限制跳点 Echo 功能描述: 任意endpoint可主动发送多播,也可以收到信息后自动多播 前期准备: 开启操作系统多播广播功能,关闭系统防火墙,使用物理路由还需在路由开启广播多播功能 发送端和接收端运行不分先后 可无…

慧天【HTWATER】:水文水动力模型的革命性工具,城市内涝的精准解决方案

城市内涝水文水动力模型介绍 在城市排水防涝规划过程中,水文水动力耦合模型已经成为一种不可或缺的分析工具。在模型建立、城市内涝风险评估、排水系统性能诊断以及海绵城市规划等方面,内涝耦合模型提供了相应的模拟及分析工具: 1.1丰富的数…

Coding构建SSh登录教程

SSH 命令行 (Jenkins 原生) 持续集成中的 SSH 命令行插件通常用于授权构建机登录云服务器执行相应的命令与任务。通过 SSH 命令行插件,构建机可以针对云服务器执行以下操作: 将构建机上的文件推送到云主机; 将云主机上的文件拉取至构建机上&…

前端学习<二>CSS基础——09-CSS案例讲解:博雅互动

前言 CSS已经学了一些基础内容了,我们来讲解一个小案例吧。以博雅互动的官网首页举例。 版心 首页的版心如下: 这里我们要普及一个概念,叫“版心”。版心是页面中主要内容所在的区域。 比如说,网站左上角的logo,设计…

Flutter 开发学习笔记(0):环境配置

文章目录 前言开发需求环境配置运行出现问题我运行也是解决了很久的问题镜像源设置为清华的镜像源(不知道有没有影响)使用JDK21,JDK版本不能低于JDK11手动下载flutter 对应的gradle 运行成功! 前言 我最近一直在用Uniapp写代码&a…

vmware,linux,centos7,NAT模式下的网络配置

centos7的NAT网络配置 NAT模式说明虚拟机网络配置工具本机配置net8网络(NAT的网域)本机的IP配置(用于net8局域网内解析主机IP和域名对应关系使用)(可选)虚拟机内的网络配置虚拟机ping不通www.baidu.com的情况下虚拟机ping可以ping…

ESP32 433mhz

从抖音抄了一大神的Arduino代码 # include <RCwitch.h> ///调用RC开关函数库 RCSwitch mySwitch RCSwitch(); //增加一个RC开关并设置名称 const int FRR 15; / 设置315MHz 无限模块的接受管脚 void setup(){Serial.begin(115200); //打开串口i设置波特率115200mySw…

ARM64架构栈帧以及帧指针FP

文章目录 前言一、arm64架构寄存器简介1.1 异常等级1.2 通用寄存器1.3 ARM64架构ABI 二、ARM64架构函数调用标准2.1 AArch64过程调用标准简介2.2 通用寄存器中的参数 三、demo分析3.1 main函数3.2 funb3.3 funa 四、栈帧总结五、demo演示参考资料 前言 这篇文章描述了 x86_64架…

智过网:一建36岁好不好找工作?能干什么?

在职业发展的道路上&#xff0c;许多人在不同的年龄阶段都会面临不同的挑战和机遇。对于36岁这一年龄阶段的人来说&#xff0c;如果已经通过了国家一级建造师&#xff08;一建&#xff09;的考试&#xff0c;那么他们在找工作方面会有怎样的前景呢&#xff1f;又能从事哪些职业…

气象预测新篇章:Python人工智能的变革力量

Python是功能强大、免费、开源&#xff0c;实现面向对象的编程语言&#xff0c;在数据处理、科学计算、数学建模、数据挖掘和数据可视化方面具备优异的性能&#xff0c;这些优势使得Python在气象、海洋、地理、气候、水文和生态等地学领域的科研和工程项目中得到广泛应用。可以…

C#程序结构详解

目录 背景: 一、C#程序的基本组成部分 二、C# Hello World示例 三、程序结构解析 四、编译与执行C#程序 五、总结 背景: 在学习C#编程语言的过程中&#xff0c;了解程序的基本结构是非常重要的。C#程序由多个组成部分构成&#xff0c;每个部分都有其特定的功能和作用。下面…

20.变量的使用方式和注意事项

文章目录 一、变量的用法二、变量的注意事项三、总结 一、变量的用法 代码示例 public static void main(String[] args) {//1.基本用法// 定义变量&#xff0c;再进行输出int a 10;System.out.println(a);// 10System.out.println(a);// 10//2.变量参与计算int b 30;int c …

代码随想录学习Day 21

回溯算法理论基础 回溯法又叫回溯搜索法。回溯是递归的副产品&#xff0c;有递归就会有回溯&#xff0c;回溯操作一般出现在递归函数的下面。回溯函数 递归函数。回溯法的本质是穷举。 回溯法解决的问题&#xff1a; 组合问题&#xff1a;N个数里面按一定规则找出k个数的集…