企业微信JS-SDK实现会话聊天功能
vue引入企业微信JS-SDK实现会话聊天功能
这两天在做一个对接企业微信实现会话聊天的功能, 发现企业微信文档这块儿做的不是特别详细,网上搜索也没找到特别完整的流程。 期间也踩了不少的坑, 在此进行分享, 希望大家以后能少走弯路。。
首先我们需要在 index.html 内引入jssdk
index.html
<script src="//res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
这里需要提醒的是,企业微信官方并没有发布官方的npm包, 官方需要使用 script 标签在 index.html 文件内进行引入。
这里有个不小的坑, 使用 npm 安装的 微信 jssdk 在使用会话聊天功能会出现如下报错:
openEnterpriseChat:invalid size of userids and externaluserids
如果你也有类似问题, 建议使用 script 标签方式进行引入。然后在 main.js 内挂载 wx对象。
main.js
const wx = window.wx; // index.html中引入外部js,获取js暴露的wx
Vue.$wx = Vue.prototype.$wx = wx;
第二步我们需要进行 config 的配置:
const account_id = this.$store.state.account_id;
const data = qs.stringify({
account_id,
url: location.href.split("#")[0] //向服务端提供授权url参数,并且不需要#后面的部分
});
axios({
method: "POST",
url: "后端服务器API",
data
})
.then(res => {
if (res.data.code == 1) {
const d = res.data.data;
this.$wx.config({
beta: true, // 必须这么写,否则wx.invoke调用形式的jsapi会有问题
debug: true, // 开启调试模式,
appId: d.appid, // 必填,企业号的唯一标识,此处填写企业号corpid
timestamp: d.timestamp, // 必填,生成签名的时间戳
nonceStr: d.nonceStr, // 必填,生成签名的随机串
signature: d.signature, // 必填,签名,见附录1
jsApiList: [
"openEnterpriseChat,agentConfig,selectExternalContact"
] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
}
})
.catch(error => {
console.log(error);
});
//通过ready接口处理成功验证
this.$wx.ready(function() {
// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});
this.$wx.error(function(res) {
console.log(res);
//config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
});
this.$wx.checkJsApi({
jsApiList: ["openEnterpriseChat,"], // 需要检测的JS接口列表,所有JS接口列表见附录2,
success: function(res) {
console.log(res);
// 以键值对的形式返回,可用的api值true,不可用为false
// 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
}
});
接下来就是调用企业微信的 api了
onSession() {
const external_userid = this.external_userid;
console.log("external_userid", external_userid);
if (!external_userid) {
this.$toast("非企业微信联系人无法发起聊天!");
return;
}
this.$wx.openEnterpriseChat({
userIds: "",// 注意:userIds和externalUserIds至少选填一个,且userIds+externalUserIds总数不能超过2000。
externalUserIds: external_userid, //参与会话的企业成员列表,格式为userid1;userid2;...,用分号隔开。
groupName: "", // 必填,会话名称。单聊时该参数传入空字符串""即可。
success: function(res) {
console.log("success", res);
// 回调
},
fail: function(res) {
console.log("fail", res);
if (res.errMsg.indexOf("function not exist") > -1) {
alert("版本过低请升级");
}
}
});
},
此处外部联系人可以通过 外部联系人选人接口selectExternalContact 获得(此API需要进行agentconfig配置), 或者通过服务器API的 https://work.weixin.qq.com/api/doc/90000/90135/92113 进行获取。
至此, 就可以实现会话聊天的功能了。。
企业微信JS-SDK实现会话聊天功能的更多相关文章
- 实战微信JS SDK开发:贺卡制作与播放(1)
前段时间忙于CanTK 2.0的开发,所以博客一直没有更新.CanTK 2.0主要增强了游戏和富媒体的开发,现在编码和测试基本完成了,等文档完成了再正式发布,里面有不少激动人心的功能,等发布时再一一细 ...
- 微信JS SDK接入的几点注意事项
微信JS SDK接入,主要可以先参考官网说明文档,总结起来有几个步骤: 1.绑定域名:先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”.备注:登录后可在“开发者中心”查看对 ...
- 微信js sdk上传多张图片
微信js sdk上传多张图片,微信上传多张图片 该案例已tp3.2商城为例 直接上代码: php代码: public function ind(){ $appid="111111111111 ...
- 微信JS SDK配置授权,实现分享接口
微信开放的JS-SDK面向网页开发者提供了基于微信内的网页开发工具包,最直接的好处就是我们可以使用微信分享.扫一扫.卡券.支付等微信特有的能力.7月份的时候,因为这个分享的证书获取问题深深的栽了一坑, ...
- 微信js SDK接口
微信JS-SDK说明文档 http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html 一.微信登录功能 在进行微信OAut ...
- 调用微信js sdk
场景:需要调用微信获取当前位置的借口. 途径:查看微信 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 .后 ...
- 微信JS SDK使用权限签名算法
jsapi_ticket 生成签名之前必须先了解一下jsapi_ticket,jsapi_ticket是公众号用于调用微信JS接口的临时票据.正常情况下,jsapi_ticket的有效期为7200秒, ...
- 微信js sdk分享开发摘记java版
绑定域名和引入js的就不说了 废话不说直接上代码 public void share(HttpServletRequest request) throws Exception { StringBuff ...
- 微信js sdk动态引用
一般情况下,微信的js-sdk只需要直接引用script即可 <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js&qu ...
随机推荐
- python接口测试4-数据库获取参数
首先确定需要传递的参数和接口,使用接口测试工具验证一下,接口和参数没有问题. 编写python接口脚本 import requests import unittest import json impo ...
- IO模式 select、poll、epoll
阻塞(blocking).非阻塞(non-blocking):最常听到阻塞与非阻塞这两个词就是在函数调用中,比如waitid这个函数,通过NOHANG参数可以把waitid设置为非阻塞的,也就是问询一 ...
- netty&websocket
1.先判断是不是http 消息,不是返回400,是则remove之前添加的http组件,动态添加websocket组件 添加WebSocket Encoder和WebSocket Decoder之后, ...
- java集合源码分析(三):ArrayList
概述 在前文:java集合源码分析(二):List与AbstractList 和 java集合源码分析(一):Collection 与 AbstractCollection 中,我们大致了解了从 Co ...
- HTTP系列(一)URI、URL、URN的区别
1.URI.URL.URN关系图 1)URI Uniform Resource Identifier 统一资源标识符 每个web服务器资源都有一个名字,服务器资源名被统称为统一资源标识符:URI就像 ...
- moviepy音视频剪辑:与time时间线相关的变换函数freeze_region、make_loopable、speedx、time_mirror、time_symmetrize介绍
☞ ░ 前往老猿Python博文目录 ░ 一.引言 在<moviepy音视频剪辑:moviepy中的剪辑基类Clip详解>介绍了剪辑基类的fl.fl_time.fx方法,在<movi ...
- 老猿学5G扫盲贴:中国移动5G融合计费漫游计费架构和路由方案
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt+moviepy音视频剪辑实战 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一. ...
- PyQt(Python+Qt)学习随笔:QStandardItemModel指定行和列创建模型后的数据项初始化的两种方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QStandardItemModel通过构造方法 QStandardItemModel(int ro ...
- PyQt(Python+Qt)学习随笔:QListView的itemAlignment属性
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QListView的itemAlignment属性用于控制每个数据项的对齐方式,其类型为枚举类Qt. ...
- Libp2p 简介
这是一个翻译的系列文章,原文参考:Introduction :: libp2p Documentation 欢迎来阅读libp2p相关文档,不论你是刚开始学习如何用libp2p来搭建P2P系统, 还是 ...