企业微信第三方应用企业授权生成成员的二维码(图文教程)

26 篇文章 3 订阅

序:

  1. 你注意,这篇讲的是企业授权后获取成员二维码
  2. 你要有心理准备,因为流程会是从先获取部门=》在获取成员=》在获取二维码,如果这不是你想要的,到这里就可以打住别往下看
  3. 博文除了会写如何生成成员二维码外,还会写到如何获取成员30天里,每天新增多少客户统计。
  4. 雪狼是eggjs的后端(node后端)。

流程:

        应用suite_access_token的获取=》获取企业凭证=》获取子部门ID列表=》获取部门成员=》生成二维码(博主理解,二维码可以临时,也可以永久!你也可以看官网的解释,他默认生成的是永久才对,这也是个人理解,下文会配官网对应文档)

其实获取部门成员的id数组后你可以选中生成二维码或者统计该成员过去30天加了多少客户

正文

        准备工作,你这时候,需要先有两个东西

  1. 对方企业微信永久授权码permanent_code
  2. 对方企业微信corpid
  3. 然后就是自己企业的SuiteID、Secret、httpspost那边收到的推送解密的suite_ticket。

这两个数据,在雪狼另一篇博文里有提怎么获取==》企业微信第三方应用获取永久授权(全流程教程)-CSDN博客

一、应用suite_access_token的获取

官方文档=》获取第三方应用凭证 - 接口文档 - 企业微信开发者中心

async accessTokenFun(){
		let m = this,
			{app} = m;
			
		const result = await app.curl('https://qyapi.weixin.qq.com/cgi-bin/service/get_suite_token', {
			method: 'POST',
			data: {
				"suite_id":this.SuiteID ,
				"suite_secret":this.Secret, 
				"suite_ticket": this.suite_ticket
			},
			contentType: 'json',
			dataType: 'json',
		});
		m.suite_access_token=result.data.suite_access_token;
		await m.get_access_token();
	}

3个参数

参数是否必须说明
suite_id第三方应用id或者代开发应用模板id。第三方应用以ww或wx开头应用id(对应于旧的以tj开头的套件id);代开发应用以dk开头
suite_secret第三方应用secret 或者代开发应用模板secret
suite_ticket企业微信后台推送的ticket

别在问我ticket 怎么获取的了,去看这篇==》node企业微信代开发模板url的 Http Post业务回调-解决方案-CSDN博客

二、获取企业凭证

官方文档=》获取企业凭证 - 接口文档 - 企业微信开发者中心

async get_access_token(){
		let m = this,{app} = m;
		const result = await app.curl('https://qyapi.weixin.qq.com/cgi-bin/service/get_corp_token?suite_access_token='+m.suite_access_token, {
			method: 'POST',
			data: {
				auth_corpid:this.corpid,
				permanent_code:this.permanent_code
			},
			contentType: 'json',
			dataType: 'json',
		});
		this.access_token=result.data.access_token
		await this.simplelist();
	}
参数是否必须说明
auth_corpid授权方corpid
permanent_code永久授权码,通过get_permanent_code获取

拿到access_token 我们要用来获取部门列表

三、获取子部门ID列表

官方文档=》https://developer.work.weixin.qq.com/document/path/95350

在这之前记得把权限都打开在服务商后台>应用管理>选自己的应用>应用权限

注意!你得先有部门!!!

要到被授权的企业后台,先新建一个部门,在拉一个成员进来

被授权的企业要修改下,可见范围

选中要被测试的这个部门。

async simplelist(){
		let m = this,{app} = m;
		const result = await app.curl('https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token='+m.access_token, {
			method: 'get',
			data: {
				
			},
			contentType: 'json',
			dataType: 'json',
		});
		//department_id 是一个数组,会有多个部门,记得在可见范围那加入部门
		let departmentArr=result.data.department.filter((v,i)=>{
			return v.parentid
		})
		this.department_id=departmentArr[0].id//部门id
		await this.simpleUserlist();
	}
参数必须说明
access_token调用接口凭证
id部门id。获取指定部门及其下的子部门(以及子部门的子部门等等,递归)。 如果不填,默认获取全量组织架构

 department 是一个数组,可能会拉到公司这一级别,公司这一级别的parentid=0,id是1,而我新建的部门parentid是1,所以我return 0是false,return 1是true,来赛选子部门

上面代码,我们就获得了部门1的部门id(我只是方便测试,当然你最好跟着我先把全流程走完,你要改自己再去改多个部门)

四、获取部门成员

官方文档=》获取部门成员 - 接口文档 - 企业微信开发者中心

参数必须说明
access_token调用接口凭证
department_id获取的部门id
async simpleUserlist(){
		let m = this,{app} = m;
		const result = await app.curl('https://qyapi.weixin.qq.com/cgi-bin/user/simplelist?access_token='+m.access_token+'&department_id='+this.department_id, {
			method: 'get',
			data: {
				
			},
			contentType: 'json',
			dataType: 'json',
		});
		
		let userlist=result.data.userlist
		let userIdArr=result.data.userlist.map(x=>x.userid)
		
		// m.add_contact_way(userIdArr);//二维码
		m.get_user_behavior_data(userIdArr);
		
	}

拿到的userlist 是一个成员对象的数组,而我们只要成员id的数组,所以要处理下,让他变成[userId,userId....]的结构

五、配置客户联系「联系我」方式(主要拿来获取成员二维码)

官方文档=》客户联系「联系我」管理 - 接口文档 - 企业微信开发者中心

应用类型权限要求
自建应用配置到「客户联系 可调用接口的应用」中
代开发应用具有「配置「联系我」二维码」权限
第三方应用具有「配置「联系我」二维码」权限
async add_contact_way(userIdArr){
		let m = this,{app} = m;
		const result = await app.curl('https://qyapi.weixin.qq.com/cgi-bin/externalcontact/add_contact_way?access_token='+m.access_token, {
			method: 'POST',
			data: {
				type:2,//联系方式类型,1-单人, 2-多人
				scene:2,//场景,1-在小程序中联系,2-通过二维码联系
				user:userIdArr
			},
			contentType: 'json',
			dataType: 'json',
		});
		
		
		let qr_code=result.data.qr_code//二维码
		debugger
	}

userIdArr就是我们上一步获取的部门成员的id数组了,我还是上一个参数对照表说明吧。

参数必须说明
access_token调用接口凭证
type联系方式类型,1-单人, 2-多人
scene场景,1-在小程序中联系,2-通过二维码联系
style在小程序中联系时使用的控件样式,详见附表
remark联系方式的备注信息,用于助记,不超过30个字符
skip_verify外部客户添加时是否无需验证,默认为true
state企业自定义的state参数,用于区分不同的添加渠道,在调用“获取外部联系人详情”时会返回该参数值,不超过30个字符
user使用该联系方式的用户userID列表,在type为1时为必填,且只能有一个
party使用该联系方式的部门id列表,只在type为2时有效
is_temp是否临时会话模式,true表示使用临时会话模式,默认为false
expires_in临时会话二维码有效期,以秒为单位。该参数仅在is_temp为true时有效,默认7天,最多为14天
chat_expires_in临时会话有效期,以秒为单位。该参数仅在is_temp为true时有效,默认为添加好友后24小时,最多为14天
unionid可进行临时会话的客户unionid,该参数仅在is_temp为true时有效,如不指定则不进行限制
is_exclusive是否开启同一外部企业客户只能添加同一个员工,默认为否,开启后,同一个企业的客户会优先添加到同一个跟进人
conclusions结束语,会话结束时自动发送给客户,可参考“结束语定义”,仅在is_temp为true时有效

六、获取「联系客户统计」

官方文档=》获取「联系客户统计」数据 - 接口文档 - 企业微信开发者中心

async get_user_behavior_data(userIdArr){
		let m = this,{app} = m;
		let nowTime=parseInt(new Date().getTime()/1000);
		let dey7=nowTime-3600*24*7
		const result = await app.curl('https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get_user_behavior_data?access_token='+m.access_token, {
			method: 'POST',
			data: {
				userid:userIdArr,
				start_time:dey7,
				end_time:nowTime
			},
			contentType: 'json',
			dataType: 'json',
		});
		let arr=[]
		result.data.behavior_data.forEach((v,i)=>{
			arr.push({
				time:v.stat_time,
				add:v.new_contact_cnt
			})
		})
		
	}
参数必须说明
access_token调用接口凭证
userid成员ID列表,最多100个
partyid部门ID列表,最多100个
start_time数据起始时间
end_time数据结束时间

start_timeend_time 是"秒"不是"毫秒"记住了!!!

他可以是统计成员,也可以是统计部门,咱这里是以成员来统计的。

behavior_data拿到手是数组,而且stat_time是按天来算的就算你传的现在的比如今天是12月1号9点,他也只会统计到12月1号0点,你懂吗,就算你现在加了一个人,这只能明天才能调接口才能统计到今天的数据。

参数说明
errcode返回码
errmsg对返回码的文本描述内容
behavior_data.stat_time数据日期,为当日0点的时间戳
behavior_data.new_apply_cnt发起申请数,成员通过「搜索手机号」、「扫一扫」、「从微信好友中添加」、「从群聊中添加」、「添加共享、分配给我的客户」、「添加单向、双向删除好友关系的好友」、「从新的联系人推荐中添加」等渠道主动向客户发起的好友申请数量。
behavior_data.new_contact_cnt新增客户数,成员新添加的客户数量。
behavior_data.chat_cnt聊天总数, 成员有主动发送过消息的单聊总数。
behavior_data.message_cnt发送消息数,成员在单聊中发送的消息总数。
behavior_data.reply_percentage已回复聊天占比,浮点型,客户主动发起聊天后,成员在一个自然日内有回复过消息的聊天数/客户主动发起的聊天数比例,不包括群聊,仅在确有聊天时返回。
behavior_data.avg_reply_time平均首次回复时长,单位为分钟,即客户主动发起聊天后,成员在一个自然日内首次回复的时长间隔为首次回复时长,所有聊天的首次回复总时长/已回复的聊天总数即为平均首次回复时长,不包括群聊,仅在确有聊天时返回
behavior_data.negative_feedback_cnt删除/拉黑成员的客户数,即将成员删除或加入黑名单的客户数。

好了,原创不易,35了,在做不了几年教程了,切看且珍惜吧

 文章原创,雪狼原创表情包在最底下,欢迎下载。

 扩展阅读

1、小程序手机号授权登录(图文教程)
2、短信验证码收不到-解决方案
3、vue3ts的透传$attrs用法
4、vue3 清空/重置reactive
5、vite打包可视化工具rollup-plugin-visualizer图文教程
6、vue3 h函数使用图文教程
7、抖音跳微信小程序(抖音分享卡片和链接)图文教程
8、pinia 持久化插件pinia-plugin-persistedstate 安装、使用(图文详解)
9、uni-app 生成安卓证书
10、uniapp小程序限制微信群访问(图文教程)
11、前端常见4种缓存方式(图文教程)
12、es6~es13 新增数组遍历一览
13、禁debugger调试网页,禁F12(完整教程)
14、常用的19个正则-表单验证
15、报错状态码 200 300 400 500
16、周公解梦功能(附数据)
17、node开发微信群聊机器人第⑮章
18、node开发微信群聊机器人第⑭章
19、node开发微信群聊机器人第⑬章
20、Linux安装node18完整图文教程
21、VMware虚拟机、linux安装图文教程
22、我把微信群聊机器人项目开源
23、node开发微信群聊机器人第⑫章
24、node开发微信群聊机器人第⑪章
25、node开发微信群聊机器人第⑩章
26、node开发微信群聊机器人第⑨章
27、node开发微信群聊机器人第⑧章
28、node开发微信群聊机器人第⑦章
29、node开发微信群聊机器人第⑥章
30、公众号涨粉攻略(阳谋)
31、公众号涨粉攻略(阴谋)
32、node开发微信群聊机器人第⑤章
33、node开发微信群聊机器人第④章
34、node开发微信群聊机器人第③章
35、用node开发微信群聊机器人第②章
36、用node开发微信群聊机器人第①章

雪狼原创表情包

1、【我很凶】微信表情 - 来自微信表情商店,扫二维码下载表情

2、【程序员雪狼】微信表情 - 来自微信表情商店,扫二维码下载表情

3、【web前端雪狼】微信表情 - 来自微信表情商店,扫二维码下载表情

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪狼之夜

打个赏,让博主知道博文没白写

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值