企业微信聊天框中点击自建应用获取当前聊天外部联系人userid,wx.agentConfig调用

目录

  • 企业微信自建应用获取当前聊天外部联系人userid,wx.agentConfig调用
    • 调用agentConfig
      • wx.agentConfig 和 wx.config区别
      • wx.agentConfig使用
      • 后端生成签名
    • 前端整体代码

企业微信自建应用获取当前聊天外部联系人userid,wx.agentConfig调用

调用agentConfig

wx.agentConfig 和 wx.config区别

这个在企业微信文档中有明确的解释,config注入的是企业的身份与权限,而agentConfig注入的是应用的身份与权限。尤其是当调用者为第三方服务商时,通过config无法准确区分出调用者是哪个第三方应用,而在部分场景下,又必须严谨区分出第三方应用的身份,此时即需要通过agentConfig来注入应用的身份信息。
在开放接口处也会有说明,使用某个接口必须要先成功使用什么注入。
需要注意的是如果用的config,会有那么两个额外接口可以使用,一个是wx.ready,一个是wx.error。作用及使用方法:

wx.ready(function(){// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});wx.error(function(res){// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
});

如果你有一些初始化页面时对一些config注入相关接口的使用,那么就可以写到wx.ready中。
在企业微信3.0.24以前的老版本(可通过企业微信UA判断版本号),在调用wx.agentConfig之前,必须确保先成功调用wx.config,但是现在的话可以直接进行wx.agentConfig注入后调用相关接口。

wx.agentConfig使用

在页面初始化时,从后台获取到签名及生成签名的时间戳、生成签名的随机字符串,然后在页面的script中去使用获取到的信息完成wx.agentConfig注入,导入jdk,使用这个地址https://res.wx.qq.com/open/js/jweixin-1.2.0.js

<script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
<script>
wx.agentConfig({corpid: 'wwa5550c05b175d888', // 必填,企业微信的corpid,必须与当前登录的企业一致agentid: '1000010',  // 必填,企业微信的应用id (e.g. 1000247)timestamp: 从后台获取到时间戳, // 必填,生成签名的时间戳nonceStr: '从后台获取到的随机字符串,可以写死,后台签名时一样就行', // 必填,生成签名的随机串signature: '从后台获取到签名',// 必填,签名,见附录-JS-SDK使用权限签名算法jsApiList: ['getCurExternalContact'], //必填,传入需要使用的接口名称success: function (res) {// 回调// 此处直接在注入回调中调用了获取当前外部联系人userId的接口,注意此接口是从聊天框的工具栏进入才能获取wx.invoke('getCurExternalContact', {}, function (res) {console.log('invoke', res)if (res.err_msg == "getCurExternalContact:ok") {userId = res.userId; //返回当前外部联系人userIdconsole.log('userid:', userId)add_user(userId)} else {//错误处理console.log('invoke失败:', res)}});},fail: function (res) {console.log('agentConfig应用注入失败:', res)if (res.errMsg.indexOf('function not exist') > -1) {alert('版本过低请升级')}}
});
</script>

后端生成签名

生成签到需要严格按照企业微信要求来,加密的字符顺序都不要更改,否则会出现签名错误导致注入失败。签名规则在企业微信文档中有详细说明
签名生成规则如下:
参与签名的参数有四个: noncestr(随机字符串), jsapi_ticket(如何获取参考“获取企业jsapi_ticket”以及“获取应用的jsapi_ticket接口”), timestamp(时间戳), url(当前网页的URL, 不包含#及其后面部分)

将这些参数使用URL键值对的格式 (即 key1=value1&key2=value2…)拼接成字符串string1。
有两个注意点:1. 字段值采用原始值,不要进行URL转义;2. 必须严格按照如下格式拼接,不可变动字段顺序。
string1 = "jsapi_ticket=JSAPITICKET&noncestr=NONCESTR&timestamp=TIMESTAMP&url=URL" // 大写部分为需要替换的部分,下面出现同样

  • jsapi_ticket是什么:jsapi_ticket是H5应用调用企业微信JS接口的临时票据
  • 获取方式:
    • 企业的jsapi_ticket: 请求地址及方法
      请求方式:GET(HTTPS)
      请求URL:https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=ACCESS_TOKEN
      
    • 应用的jsapi_ticket:
      	请求方式:GET(HTTPS)请求URL:https://qyapi.weixin.qq.com/cgi-bin/ticket/get?access_token=ACCESS_TOKEN&type=agent_config
      
      请注意,两种jsapi_ticket请求的接口是不一样的,此处只用从聊天窗口中获取外部联系人userid,所以使用的是应用的jsapi_ticket,应用的jsapi_ticket用于wx.agentConfig,通过接口也可以看出来,请自己注意,如果用错了会显示注入失败或者签名错误。
    • 本人使用的python,获取jsapi_ticket方法:
      def get_jsapi_ticket(ACCESS_TOKEN):"""通过access_token获取到应用jsapi_ticketjsapi_ticket是H5应用调用企业微信JS接口的临时票据分为企业 jsapi_ticket和 应用jsapi_ket详情 https://developer.work.weixin.qq.com/document/path/90506"""url = 'https://qyapi.weixin.qq.com/cgi-bin/ticket/get?access_token={}&type=agent_config'.format(ACCESS_TOKEN)resp = requests.get(url).json()print('请求数据:',resp)if resp['errmsg'] == 'ok':return resp['ticket'], resp_qy['ticket']else:print('请求错误', resp['errmsg'])return ''
      
  • 签名方法
    接着得到了string1后对string1进行sha1签名也就是加密,得到signature 签名。
    后端签名代码如下:
    def Qm(ticket):"""noncestr(随机字符串), jsapi_ticket(临时权限票据), timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分,也就是自建应用打开的页面的地址)"""noncestr = 'qywxtest'  # 此处随机字符串写死了,和前端wx.agentConfi中一样就行jsapi_ticket = tickettimestamp = int(time.time())print(timestamp)url = 'http://li-xun.work:5000/get_excel'str1 = "jsapi_ticket={}&noncestr={}&timestamp={}&url={}".format(jsapi_ticket, noncestr, timestamp, url)sha_str = hashlib.sha1(str1.encode('utf-8')).hexdigest()jm_data = {'sha_str': sha_str, 'timestamp': timestamp,'jsapi_ticket': jsapi_ticket}return jm_data
    

前端整体代码

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><script src="http://code.jquery.com/jquery-3.5.1.min.js"></script><script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script><script>init()function init() {$.ajax({url: "/jm",method: "GET",success: function (res) {var data = JSON.parse(res)console.log('data:', data, typeof (data))wx.agentConfig({corpid: 'wwa5550c05b175d496', // 必填,企业微信的corpid,必须与当前登录的企业一致agentid: '1000010', // 必填,企业微信的应用id (e.g. 1000247)timestamp: data.yy.timestamp, // 必填,生成签名的时间戳nonceStr: 'qywxtest', // 必填,生成签名的随机串signature: data.yy.sha_str,// 必填,签名,见附录-JS-SDK使用权限签名算法jsApiList: ['getCurExternalContact'], //必填,传入需要使用的接口名称success: function (res) {// 回调// 此处直接在注入成功的回调中使用获取外部联系人userid的接口wx.invoke('getCurExternalContact', {}, function (res) {console.log('invoke', res)if (res.err_msg == "getCurExternalContact:ok") {userId = res.userId; //返回当前外部联系人userIdconsole.log('userid:', userId)// 此函数在下方有说明add_user(userId)} else {//错误处理console.log('invoke失败:', res)}});},fail: function (res) {console.log('agentConfig应用注入失败:', res)if (res.errMsg.indexOf('function not exist') > -1) {alert('版本过低请升级')}}});}})}// 此方法为通过获取到的userid再传给后端,后端获取到外陪联系人的信息返回一个带有外部联系人的名称及头像的html页面,替换整个页面function add_user(id) {$.ajax({url: "/get_excel",method: "POST",data: { userid: id },success: function (html) {$("html").html(html)}})}</script>
</body></html>

效果图:
从外部联系人联系框打开自建应用

如何配置自建应用到工具栏:PC端企业微信,点击头像,管理企业——>应用管理——>自建应用——>配置到聊天工具栏——>名称只能最多4个字,然后页面注意用签名中的url地址的页面即可。
移动端
在这里插入图片描述


以上

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

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

相关文章

如何让企业微信的消息在微信里显示?

很多用户在下班之后很少打开企业微信&#xff0c;可是又害怕错过一些重要消息通知&#xff0c;因此将企业微信消息显示在微信里&#xff0c;可以及时接收。 前言 由于企业微信是工作软件&#xff0c;很多员工在上班登录企业微信&#xff0c;可以及时接受消息&#xff0c;但下班…

微信与企业微信消息如何互通?

部分企业仍在使用微信运营客户&#xff0c;是因为担心企业微信在与客户沟通方面不如微信&#xff0c;无法便捷有效地与客户进行沟通&#xff0c;但是企业微信拥有与微信一样的沟通体验&#xff0c;且能实现互通。 前言 由于微信没有运营功能&#xff0c;越来越多的企业已经将其…

通过企业微信自建应用向微信推送信息

打开企业微信官网&#xff08;https://work.weixin.qq.com/&#xff09;注册企业&#xff1a; 注册完成后&#xff0c;进入管理后台点击创建应用&#xff1a; 创建后即可查看应用的AgentId和Secret&#xff1a; 拖到下面将后面需要进行数据推送的机器的IP地址配置到企业可信IP&…

企业微信

好久没有更新博客了&#xff0c;今天抽时间玩一个轻松的&#xff0c;想必大家平时上班也和我一样或多或少都会用到企业微信吧&#xff1f;不用也没关系&#xff0c;就当一个新技能GET一下也无妨&#xff1b;直接进入主题&#xff1a;来一个发送文件、信息到企业微信的教程&…

企业微信的后台怎么进入和管理?

企业微信管理后台&#xff0c;只有企业的管理员才可以进企业微信后台&#xff0c;普通员工想要进入后台、可以联系管理员将你设置为后台管理员。 一、怎么进入企业微信后台 管理员进入企业微信后台有两种路径&#xff1b; 路径一&#xff1a; 企业管理员直接在浏览器搜索企…

关于企业微信API:sendChatMessage

企业微信api接口&#xff1a;wx.qy.sendChatMessage(Object object) 通过聊天工具栏向当前会话发送消息&#xff0c;支持多种消息格式&#xff0c;包括文本(“text”)&#xff0c;图片(“image”)&#xff0c;视频(“video”)&#xff0c;文件(“file”)、H5(“news”&#xf…

企业微信-拉取企业微信聊天记录

完整代码下载地址&#xff1a;https://download.csdn.net/download/lyn5284767/11485236 一&#xff0c;前提 1&#xff0c;企业微信开通了会话内容存档 2&#xff0c;程序运行环境windows平台&#xff0c;VS2017&#xff0c;c 3&#xff0c;你是企业微信的管理员 二&#…

企业微信 sendChatMessage接口,聊天工具栏分享消息到会话。

微信一惯的怎么为难开发者怎么来&#xff0c;分享一个使用sendChatMessage的过程。 微信官方文档给出的使用方法 wx.invoke(sendChatMessage, {msgtype:"text", //消息类型&#xff0c;必填text: {content:"你好", //文本内容},image:{mediaid: "&qu…

企业微信客户端调试工具

最近自己在搞企业微信上的第三方应用&#xff0c;需要调试一些东西。没有像谷歌那样的开发者工具真的好头疼。 还好企业微信提供这样的工具。那我来说说自己是如何下载和使用的。 第一步&#xff0c;先去官网下载 常见问题 - FAQ - 接口文档 - 企业微信开发者中心 直接下载 …

企业微信的corpsecret在哪里?

问题&#xff1a; 查看“企业微信”的官方开发文档&#xff0c;在“获取access_token”部分提到&#xff0c;使用GET请求方法&#xff0c;访问 https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpidID&corpsecretSECRET ,可以获得应用的“access_token”。参数说明里&am…

如何控制企业微信

在GitHub上有一个项目叫《vworkApi》它是基于PC端的企业微信封装的、REST风格的接口&#xff0c;开发者可通过HTTP轻松调用&#xff0c;真正实现“跨语言”操作&#xff01;使用非常简单&#xff0c;任何一门语言都可以直接上手 GitHub地址&#xff1a;https://github.com/mrsa…

集成企业微信,给企业微信用户发消息

1.企业微信申请 企业微信官方地址&#xff1a;https://work.weixin.qq.com/ 2.企业微信给用户发消息 申请企业微信以后&#xff0c;我们可以用管理员登录企业微信后台。 2.1.登录企业微信后台管理 2.2.创建应用 在应用管理模块&#xff0c;创建一个应用 2.3.发送消息 进…

调用企业微信接口发送微信消息

准备工作&#xff1a; 1.需要注册个企业微信账号&#xff0c;地址&#xff1a;https://work.weixin.qq.com/wework_admin/loginpage_wx 2.在企业微信中&#xff0c;创建一个应用&#xff0c;如下图&#xff1a; 需要上传应用logo、填写应用名称、并选择成员&#xff0c;之后点…

李彦宏:谷歌比百度多付4000万美元 也没做出ChatGPT

雷递网 乐天 5月5日 百度CEO李彦宏日前在百度骄傲颁奖典礼上就有媒体指百度错失了首先做出ChatGPT的机会传闻做出回应&#xff0c;称谷歌当时比百度多支付了4000多万美元&#xff0c;也一样没有先做出ChatGPT。Ilya Sutskever转身就离开Google去参与创建了OpenAI。 李彦宏指出&…

百度李彦宏:文心一言和 ChatGPT 水平差距不是很大,也就一两个月

3 月 26 日消息&#xff0c;近日&#xff0c;李彦宏在极客公园的直播中表示&#xff0c;文心一言确实不如现在最好的 ChatGPT 版本&#xff0c;但差距也不是很大&#xff0c;可能就是一两个月的差别。 李彦宏称&#xff0c;“我也不断在讲文心一言不够完美&#xff0c;事实上如…

你画过哪些好玩儿的作品?

CJQtime &#xff0c;搬砖师在读 韦易笑、 朱炫、 ze ran 等 18453 人赞同 进知乎两年了&#xff0c;一直是个透明人&#xff0c;从来不问不答&#xff0c;只是看到自己喜欢的答案会点个赞而已。基友在 身边有个会画画的朋友是怎样的体验&#xff1f; - 艺术发了些我平时瞎画的…

程序员的绘画

作为一个爱好画画的程序员&#xff0c;记录一下自己的绘画作品&#xff1a; 1.2016年过年时在家画的&#xff1a; 2.2016年四份左右画的&#xff1a; 3.2016年四月份左右画的&#xff1a; 4.2016年五月份左右画的&#xff1a; 5.2016年六月份左右画的&#xff1a; 6.2016年6月份…

谷歌内部文件泄露:我们和 OpenAI 都赢不了,因为正被“开源”偷家!

整理 | 郑丽媛 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 由 ChatGPT 掀起的 AI 大模型之战&#xff0c;已在全球范围内持续了几个月&#xff0c;其中业界尤为关注的&#xff0c;就是 OpenAI 和谷歌二者之间的博弈。 曾经&#xff0c;2017 年率先发布的 Tran…

如何用 AI 练英语口语?

语言学习&#xff0c;就得靠多训练。 痛点 有的小伙伴学了很长时间的英语&#xff0c;但学到的却是「哑巴英语」&#xff0c;特点是见着外国人张不开嘴。这里面有多种因素&#xff0c;但最主要还是练得太少。语言这东西就得靠多训练。经常和外国人说话&#xff0c;语言能力很快…

无账号体验Google的texttospeech API

如果你有google云账号&#xff0c;可以自行参考&#xff08;https://codelabs.developers.google.com/codelabs/cloud-text-speech-python3&#xff09;完成体验。如果你没有google云账号&#xff0c;也不想用信用卡注册一个&#xff0c;但是又想快速体验一下&#xff0c;请继续…