企业微信对接

news/2024/11/15 21:49:14/文章来源:https://www.cnblogs.com/qdxt/p/18297915

基本概念

  1. corpid 每个企业都拥有唯一的corpid,获取此信息可在管理后台“我的企业”-“企业信息”下查看“企业ID”(需要有管理员权限)
  2. userid 每个成员都有唯一的userid,即所谓“账号”。在管理后台->“通讯录”->点进某个成员的详情页,可以看到。
  3. 部门id 每个部门都有唯一的id,在管理后台->“通讯录”->“组织架构”->点击某个部门右边的小圆点可以看到
  4. tagid 每个标签都有唯一的标签id,在管理后台->“通讯录”->“标签”,选中某个标签,在右上角会有“标签详情”按钮,点击即可看到
  5. external_userid 企业外部联系人的id,可能是微信用户,也可能是企业微信用户。同一个客户在企业的不同自建应用,获取到的external_userid是相同的。。
  6. agentid 每个应用都有唯一的agentid。在管理后台->“应用管理”->“应用”,点进某个应用,即可看到agentid。
  7. secret 每一个应用都有一个独立的访问密钥,为了保证数据的安全,secret务必不能泄漏。secret查看方法:在管理后台->“应用管理”->“应用”->“自建”,点进某个应用,即可看到。
  8. access_token access_token是企业后台去企业微信的后台获取信息时的重要票据,由corpid和secret产生。所有接口在通信时都需要携带此信息用于验证接口的访问权限
    通讯录同步助手不需要配置可见范围,其权限范围默认是全公司(即根部门)。

获取access_token
请求方式: GET(HTTPS)
请求地址: https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET
权限说明:
每个应用有独立的secret,获取到的access_token只能本应用使用,所以每个应用的access_token应该分开来获取
注意事项:
开发者需要缓存access_token,当access_token失效或过期时,需要重新获取。access_token的有效期通过返回的expires_in来传达,正常情况下为7200秒(2小时)。

获取部门列表
请求方式:GET(HTTPS)
请求地址:https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=ACCESS_TOKEN&id=ID
ID为部门id。获取指定部门及其下的子部门(以及子部门的子部门等等,递归)。 如果不填,默认获取全量组织架构

获取成员ID列表
请求方式:POST(HTTPS)
请求地址:https://qyapi.weixin.qq.com/cgi-bin/user/list_id?access_token=ACCESS_TOKEN

userid转openid
请求方式:POST(HTTPS)
请求地址: https://qyapi.weixin.qq.com/cgi-bin/user/convert_to_openid?access_token=ACCESS_TOKEN

openid转userid
请求方式:POST(HTTPS)
请求地址: https://qyapi.weixin.qq.com/cgi-bin/user/convert_to_userid?access_token=ACCESS_TOKEN

发送应用消息
请求方式:POST(HTTPS)
请求地址: https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN

文本消息
请求示例:

{"touser" : "UserID1|UserID2|UserID3","toparty" : "PartyID1|PartyID2","totag" : "TagID1 | TagID2","msgtype" : "text","agentid" : 1,"text" : {"content" : "你的快递已到,请携带工卡前往邮件中心领取。\n出发前可查看<a href=\"http://work.weixin.qq.com\">邮件中心视频实况</a>,聪明避开排队。"},"safe":0,"enable_id_trans": 0,"enable_duplicate_check": 0,"duplicate_check_interval": 1800
}

参数说明:

参数 是否必须 说明
touser 否 指定接收消息的成员,成员ID列表(多个接收者用‘ ’分隔,最多支持1000个)。
特殊情况:指定为"@all",则向该企业应用的全部成员发送
toparty 否 指定接收消息的部门,部门ID列表,多个接收者用‘ ’分隔,最多支持100个。
当touser为"@all"时忽略本参数
totag 否 指定接收消息的标签,标签ID列表,多个接收者用‘ ’分隔,最多支持100个。
当touser为"@all"时忽略本参数
msgtype 是 消息类型,此时固定为:text
agentid 是 企业应用的id,整型。企业内部开发,可在应用的设置页面查看;第三方服务商,可通过接口 获取企业授权信息 获取该参数值
content 是 消息内容,最长不超过2048个字节,超过将截断(支持id转译)
safe 否 表示是否是保密消息,0表示可对外分享,1表示不能分享且内容显示水印,默认为0
enable_id_trans 否 表示是否开启id转译,0表示否,1表示是,默认0。仅第三方应用需要用到,企业自建应用可以忽略。
enable_duplicate_check 否 表示是否开启重复消息检查,0表示否,1表示是,默认0
duplicate_check_interval 否 表示是否重复消息检查的时间间隔,默认1800s,最大不超过4小时

文本消息展现:

特殊说明:
其中text参数的content字段可以支持换行、以及A标签,即可打开自定义的网页(可参考以上示例代码)(注意:换行符请用转义过的\n)

文本卡片消息
请求示例:

{"touser" : "UserID1|UserID2|UserID3","toparty" : "PartyID1 | PartyID2","totag" : "TagID1 | TagID2","msgtype" : "textcard","agentid" : 1,"textcard" : {"title" : "领奖通知","description" : "<div class=\"gray\">2016年9月26日</div> <div class=\"normal\">恭喜你抽中iPhone 7一台,领奖码:xxxx</div><div class=\"highlight\">请于2016年10月10日前联系行政同事领取</div>","url" : "URL","btntxt":"更多"},"enable_id_trans": 0,"enable_duplicate_check": 0,"duplicate_check_interval": 1800
}

参数说明:

参数 是否必须 说明
touser 否 成员ID列表(消息接收者,多个接收者用‘ ’分隔,最多支持1000个)。特殊情况:指定为@all,则向关注该企业应用的全部成员发送
toparty 否 部门ID列表,多个接收者用‘ ’分隔,最多支持100个。当touser为@all时忽略本参数
totag 否 标签ID列表,多个接收者用‘ ’分隔,最多支持100个。当touser为@all时忽略本参数
msgtype 是 消息类型,此时固定为:textcard
agentid 是 企业应用的id,整型。企业内部开发,可在应用的设置页面查看;第三方服务商,可通过接口 获取企业授权信息 获取该参数值
title 是 标题,不超过128个字节,超过会自动截断(支持id转译)
description 是 描述,不超过512个字节,超过会自动截断(支持id转译)
url 是 点击后跳转的链接。最长2048字节,请确保包含了协议头(http/https)
btntxt 否 按钮文字。 默认为“详情”, 不超过4个文字,超过自动截断。
enable_id_trans 否 表示是否开启id转译,0表示否,1表示是,默认0
enable_duplicate_check 否 表示是否开启重复消息检查,0表示否,1表示是,默认0
duplicate_check_interval 否 表示是否重复消息检查的时间间隔,默认1800s,最大不超过4小时

文本卡片消息展现 :

特殊说明:
卡片消息的展现形式非常灵活,支持使用br标签或者空格来进行换行处理,也支持使用div标签来使用不同的字体颜色,目前内置了3种文字颜色:灰色(gray)、高亮(highlight)、默认黑色(normal),将其作为div标签的class属性即可,具体用法请参考上面的示例。

markdown消息
请求示例:

{"touser" : "UserID1|UserID2|UserID3","toparty" : "PartyID1|PartyID2","totag" : "TagID1 | TagID2","msgtype": "markdown","agentid" : 1,"markdown": {"content": "您的会议室已经预定,稍后会同步到`邮箱`  \n>**事项详情**  \n>事 项:<font color=\"info\">开会</font>  \n>组织者:@miglioguan  \n>参与者:@miglioguan、@kunliu、@jamdeezhou、@kanexiong、@kisonwang  \n>  \n>会议室:<font color=\"info\">广州TIT 1楼 301</font>  \n>日 期:<font color=\"warning\">2018年5月18日</font>  \n>时 间:<font color=\"comment\">上午9:00-11:00</font>  \n>  \n>请准时参加会议。  \n>  \n>如需修改会议信息,请点击:[修改会议信息](https://work.weixin.qq.com)"},"enable_duplicate_check": 0,"duplicate_check_interval": 1800
}

示例效果:

参数说明:

参数 是否必须 说明
touser 成员ID列表(消息接收者,多个接收者用‘
toparty 部门ID列表,多个接收者用‘
totag 标签ID列表,多个接收者用‘
msgtype 消息类型,此时固定为:markdown
agentid 企业应用的id,整型。企业内部开发,可在应用的设置页面查看;第三方服务商,可通过接口 获取企业授权信息 获取该参数值
content markdown内容,最长不超过2048个字节,必须是utf8编码
enable_duplicate_check 表示是否开启重复消息检查,0表示否,1表示是,默认0
duplicate_check_interval 表示是否重复消息检查的时间间隔,默认1800s,最大不超过4小时

网页授权登录

REDIRECT_URL中的域名,需要先配置至应用的“可信域名”,否则跳转时会提示“redirect_uri参数错误”。
要求配置的可信域名,必须与访问链接的域名完全一致;若访问链接URL带了端口号,端口号也需要登记到可信域名中。

如果企业需要在打开的网页里面携带用户的身份信息,第一步需要构造如下的链接来获取code参数:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE&agentid=AGENTID#wechat_redirect

参数说明:

参数 是否必须 说明
appid 企业的CorpID
redirect_uri 授权后重定向的回调链接地址,请使用urlencode对链接进行处理
response_type 返回类型,此时固定为:code
scope 应用授权作用域。snsapi_base:静默授权,可获取成员的基础信息(UserId);snsapi_privateinfo:手动授权,可获取成员的详细信息,包含头像、二维码等敏感信息。
state 重定向后会带上state参数,企业可以填写a-zA-Z0-9的参数值,长度不可超过128个字节
agentid 应用agentid,建议填上该参数(对于第三方应用和代开发自建应用,在填写该参数的情况下或者在工作台、聊天工具栏、应用会话内发起oauth2请求的场景中,会触发接口许可的自动激活)。snsapi_privateinfo时必填否则报错;
#wechat_redirect 终端使用此参数判断是否需要带上身份信息

员工点击后,页面将跳转至 redirect_uri?code=CODE&state=STATE,企业可根据code参数获得员工的userid。code长度最大为512字节。

获取访问用户身份

该接口用于根据code获取成员信息,适用于自建应用与代开发应用

请求方式:GET(HTTPS)
请求地址:https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token=ACCESS_TOKEN&code=CODE

参数说明:

参数 必须 说明
access_token 调用接口凭证
code 通过成员授权获取到的code,最大为512字节。每次成员授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。

权限说明:
跳转的域名须完全匹配access_token对应应用的可信域名,否则会返回50001错误。

返回结果:
a) 当用户为企业成员时(无论是否在应用可见范围之内)返回示例如下:

{"errcode": 0,"errmsg": "ok","userid":"USERID","user_ticket": "USER_TICKET"
}
参数 说明
errcode 返回码
errmsg 对返回码的文本描述内容
userid 成员UserID。若需要获得用户详情信息,可调用通讯录接口:读取成员。如果是互联企业/企业互联/上下游,则返回的UserId格式如:CorpId/userid
user_ticket 成员票据,最大为512字节,有效期为1800s。scope为snsapi_privateinfo,且用户在应用可见范围之内时返回此参数。后续利用该参数可以获取用户信息或敏感信息,参见"获取访问用户敏感信息"。暂时不支持上下游或/企业互联场景

b) 非企业成员时,返回示例如下:

{"errcode": 0,"errmsg": "ok","openid":"OPENID","external_userid":"EXTERNAL_USERID"
}
参数 说明
errcode 返回码
errmsg 对返回码的文本描述内容
openid 非企业成员的标识,对当前企业唯一。不超过64字节
external_userid 外部联系人id,当且仅当用户是企业的客户,且跟进人在应用的可见范围内时返回。如果是第三方应用调用,针对同一个客户,同一个服务商不同应用获取到的id相同

获取访问用户敏感信息

请求方式:POST(HTTPS)
请求地址:https://qyapi.weixin.qq.com/cgi-bin/auth/getuserdetail?access_token=ACCESS_TOKEN

参数说明:

参数 必须 说明
access_token 调用接口凭证
user_ticket 成员票据

权限说明:
成员必须在应用的可见范围内。

返回结果:

{"errcode": 0,"errmsg": "ok","userid":"lisi","gender":"1","avatar":"http://shp.qpic.cn/bizmp/xxxxxxxxxxx/0","qr_code":"https://open.work.weixin.qq.com/wwopen/userQRCode?vcode=vcfc13b01dfs78e981c","mobile": "13800000000","email": "zhangsan@gzdev.com","biz_mail":"zhangsan@qyycs2.wecom.work","address": "广州市海珠区新港中路"
}

参数说明:

参数 说明
errcode 返回码
errmsg 对返回码的文本描述内容
userid 成员UserID
gender 性别。0表示未定义,1表示男性,2表示女性。仅在用户同意snsapi_privateinfo授权时返回真实值,否则返回0.
avatar 头像url。仅在用户同意snsapi_privateinfo授权时返回真实头像,否则返回默认头像
qr_code 员工个人二维码(扫描可添加为外部联系人),仅在用户同意snsapi_privateinfo授权时返回
mobile 手机,仅在用户同意snsapi_privateinfo授权时返回,第三方应用不可获取
email 邮箱,仅在用户同意snsapi_privateinfo授权时返回,第三方应用不可获取
biz_mail 企业邮箱,仅在用户同意snsapi_privateinfo授权时返回,第三方应用不可获取
address 仅在用户同意snsapi_privateinfo授权时返回,第三方应用不可获取

注:对于自建应用与代开发应用,敏感字段需要管理员在应用详情里选择,且成员oauth2授权时确认后才返回。敏感字段包括:性别、头像、员工个人二维码、手机、邮箱、企业邮箱、地址。

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

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

相关文章

【unity开发】怎么下载国际版的unity编辑器版本

有一天从公司那接手了一个项目,然后发现那个项目的版本我没有,我就去unity官网下载。 下载完了发现还是版本不对。 仔细一看发现,他们用的版本号末尾少了个"c1"。c1的意思是中国特供版,好像是说有微信api的支持。那么我应该怎么做呢? 下面随便一个版本为例子1.点…

html+js实现选中左边的数据到右边

效果后台要开发个功能,给游戏内的用户赠送道具,先把道具列表展示,然后选择要增送的道具,可以加上道具图片之类的,美化 index.html 页面没有美化,只是实现了效果。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&qu…

《代理选择与反爬虫策略探究:如何优化网络爬虫效率与稳定性》

本文全面介绍了在选择合适的代理时应考虑的因素,涵盖了各种代理类型(如高匿代理、隧道代理等)的特点及其适用场景。文章深入探讨了常见的反爬虫策略,以及如何通过调整爬虫策略来应对这些策略,从而提升爬虫的效率和稳定性。适合对网络爬虫开发和代理技术感兴趣的读者阅读。…

Redis部署与使用

一、关系型数据库与非关系型数据库 1.关系型数据库 关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。 SQL语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作。 主流的关系型数据库…

excel表格中怎样将一列的数值全部加上一个数值

1、打开目标文件2、然后在B1或者其它单元格中输入数字“10”,如图所示。3、然后鼠标右击此单元格,在右键菜单中执行“复制”命令。4、然后选中要加10的所有数据,在右键菜单中点击“选择性粘贴”选项5、然后在出现的窗口中,点击运算区域的“加”选项,进行确定。6、完成以上…

CRC我就拿下了

国人讲CRC的没有什么能讲明白的文章,除了一篇《我学习 CRC32、CRC16、CRC 原理和算法的总结(与 WINRAR 结果一致)》,这里先感谢他,另,他也有一些没有说明白的地方,怎么说呢,还是鄙人自己来吧。 我弄明白CRC这个原理和算法主要参考的是上面的国人的那篇和这个外国的《A …

在vscode中打开浏览器

在html页面右键,选择 open in default browser 即可打开默认浏览器 布局——<!-- 文档类型为html --> <!DOCTYPE html> <html lang="en"> <head><!-- 字符集为utf-8 --><meta charset="UTF-8"><!-- 设置浏览器兼容…

[Java]“不同族”基本数据类型间只能“强转”吗?

本篇文章标题即摘要,就不赘述。 如果文中有不妥或不对的,多多交流。【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://www.cnblogs.com/cnb-yuchen/p/18298193 出自【进步*于辰的博客】本文阐述需要计算不同位二进制的表示范围,引用博文《[MySQ…

还在困惑需要多少数据吗?来看看这份估计指南 | CVPR 2022

论文基于实验验证,为数据需求预测这一问题提供了比较有用的建议,详情可以直接看看Conclusion部分。 来源:晓飞的算法工程笔记 公众号论文: How Much More Data Do I Need? Estimating Requirements for Downstream Tasks论文地址:https://arxiv.org/abs/2207.01725 论文代…

uniapp实现问卷多项填空

产品提出了一个需求,需要实现类似问卷星的记录单,要求有单选,多选,填空,以及多项填空。前三者好实现,最后一个花费了我挺长的时间。 在pc端后台管理模板选项设置的时候,保存是将整个问题保存进去,以三个或三个以上的下划线为一个空,保存的形式例为: cm* cm*___ cm…

编译器

本页面主要介绍了各系统下各类编译器/解释器的安装步骤。 GCC Windows 手动下载安装 访问 MinGW-w64 的下载页面,有多个构建版本。方便起见,我们使用由 WinLibs 提供的构建版本。 首先前往 WinLibs 下载最新的安装包,选择合适的版本,本文选择了 GCC 12.3.0 + LLVM/Clang/LL…

MacOS 15 Sequoia 启用允许“任何来源”应用

MacOS 15 Sequoia 新系统中,spctl --master-disabl指令被禁用,无法启用允许“任何来源”应用程序,导致每一次安装新的应用程序,需要手动在设置中允许,十分麻烦。MacOS 15 Sequoia 启用允许“任何来源”应用 spctl 无法使用 在 MacOS 15 Sequoia Beta3 系统中 spctl 命令被…