vue引入企业微信JS-SDK实现会话聊天功能

这两天在做一个对接企业微信实现会话聊天的功能, 发现企业微信文档这块儿做的不是特别详细,网上搜索也没找到特别完整的流程。 期间也踩了不少的坑, 在此进行分享, 希望大家以后能少走弯路。。

  1. 首先我们需要在 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;
  1. 第二步我们需要进行 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"}
}
});
  1. 接下来就是调用企业微信的 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实现会话聊天功能的更多相关文章

  1. 实战微信JS SDK开发:贺卡制作与播放(1)

    前段时间忙于CanTK 2.0的开发,所以博客一直没有更新.CanTK 2.0主要增强了游戏和富媒体的开发,现在编码和测试基本完成了,等文档完成了再正式发布,里面有不少激动人心的功能,等发布时再一一细 ...

  2. 微信JS SDK接入的几点注意事项

    微信JS SDK接入,主要可以先参考官网说明文档,总结起来有几个步骤: 1.绑定域名:先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”.备注:登录后可在“开发者中心”查看对 ...

  3. 微信js sdk上传多张图片

    微信js sdk上传多张图片,微信上传多张图片 该案例已tp3.2商城为例 直接上代码: php代码: public function ind(){ $appid="111111111111 ...

  4. 微信JS SDK配置授权,实现分享接口

    微信开放的JS-SDK面向网页开发者提供了基于微信内的网页开发工具包,最直接的好处就是我们可以使用微信分享.扫一扫.卡券.支付等微信特有的能力.7月份的时候,因为这个分享的证书获取问题深深的栽了一坑, ...

  5. 微信js SDK接口

    微信JS-SDK说明文档 http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html 一.微信登录功能 在进行微信OAut ...

  6. 调用微信js sdk

    场景:需要调用微信获取当前位置的借口. 途径:查看微信 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 .后 ...

  7. 微信JS SDK使用权限签名算法

    jsapi_ticket 生成签名之前必须先了解一下jsapi_ticket,jsapi_ticket是公众号用于调用微信JS接口的临时票据.正常情况下,jsapi_ticket的有效期为7200秒, ...

  8. 微信js sdk分享开发摘记java版

    绑定域名和引入js的就不说了 废话不说直接上代码 public void share(HttpServletRequest request) throws Exception { StringBuff ...

  9. 微信js sdk动态引用

    一般情况下,微信的js-sdk只需要直接引用script即可 <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js&qu ...

随机推荐

  1. QQ账号测试用例

  2. LIKE 运算符

    运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算.例如:2+3,其操作数是2和3,而运算符则是"+".在vb2005中运算符大致可以分为5种类型:算术运算符.连接运算 ...

  3. 【AcWing 99】激光炸弹——二维前缀和

    (题面来自AcWing) 一种新型的激光炸弹,可以摧毁一个边长为 R 的正方形内的所有的目标. 现在地图上有 N 个目标,用整数Xi,Yi表示目标在地图上的位置,每个目标都有一个价值Wi. 激光炸弹的 ...

  4. JZOJ2020年8月12日提高组反思

    JZOJ2020年8月12日提高组反思 真·难亿一点点 T1 题目长并附带伤害-- 暴力搜 对于字符串,我选择\(Pascal\) T2 概率问题,再见 T3 样例没懂,再见 T4 有史以来见过的条件 ...

  5. 图像处理gamma修正(伽马γ校正)的原理和实现算法

    ☞ ░ 前往老猿Python博文目录 ░ 本文转自博客园:淇淇宝贝的文章<图像处理之gamma校正>,原文链接:https://www.cnblogs.com/qiqibaby/p/532 ...

  6. 第8.10节 使用__class__查看Python中实例对应的类

    一. 语法释义 __class__属性很简单,直接返回实例对应的类.语法如下: 实例. class 当不知道一个实例的类名又想对类的部分内容进行访问时可以使用__class__返回类. 注意:是返回实 ...

  7. Python正则表达式re.findall("[A-Za-z]([A-Za-z0-9])*[.]txt",'Abc2019.txt')的结果为什么是['9']

    在<Python妙用re.sub分析正则表达式匹配过程>中老猿分析了findall函数的返回情况,老猿前一阵子在执行这个语句时: >>> re.findall(" ...

  8. PHP代码审计分段讲解(3)

    05 ereg正则%00截断 放上源代码 <?php $flag = "flag"; if (isset ($_GET['password'])) { if (ereg (& ...

  9. Elements-of-Python_03_LanguageFeature

    (内容包括Python语法概述,流程控制,条件表达式) 1 Python语法 1.1 Python的特点 Python是一种完全面向对象的.解释性的.可移植的.开源的脚本编程高级语言,具有丰富的库,允 ...

  10. 国际关注,Panda 交易所获悉美银监机构批准特许银行托管加密资产

    近期,Panda 交易所注意到,根据此前与Cointelegraph分享的一份声明,美国货币监理署(OCC)正在授予联邦特许银行托管加密货币的权限. 鉴于加密钱包与其他种类资产的托管要求不同,这一问题 ...