企业微信分享消息到当前会话JS-SDK调用
使用场景:企业微信自建应用接入到聊天窗口侧边工具栏,可发送消息到当前会话,官方文档地址developer.work.weixin.qq.com/document/pa…
注:发送消息必须先成功调用wx.agentConfig,调用wx.agentConfig之前,必须确保先成功调用wx.config
第一步:引入两个企微js文件,window对象身上就已经挂载了wx对象
<script src="//res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
<script src="https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js"></script>
let wx = window.wx;
第二步:通过后端接口获取调用wx.config的参数
wx.config({
beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '', // 必填,企业微信的corpID
timestamp: , // 必填,生成签名的时间戳
nonceStr: '', // 必填,生成签名的随机串
signature: '',// 必填,签名,见 附录-JS-SDK使用权限签名算法
jsApiList: [] // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
})
官方建议出于安全考虑,开发者必须在服务器端实现签名的逻辑,所以timestamp、nonceStr、signature、appId一般为后端生成返回,
签名生成规则如下: 参与签名的参数有四个: noncestr(随机字符串), jsapi_ticket(如何获取参考“获取企业jsapi_ticket”以及“获取应用的jsapi_ticket接口”), timestamp(时间戳), url(当前网页的URL, 不包含#及其后面部分)注(针对路由模式为history模式):url必须为当前网页完整url,一般通过window.location.href获取当前网页地址传给后端用于生成签名,并且url无需进行encode编码,url不能是ip地址,所以无法在本地使用开发模式进行调试(因为这个导致签名错误,当时研究了半天,最后还是部署到服务器接入企业微信进行调试,很麻烦)
data() {
return {
configParams: {
beta: true, // 必须这么写,否则wx.invoke调用形式的jsapi会有问题
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: "",
jsApiList: ["invoke"],
},
agentConfigParams: {
jsApiList: ["sendChatMessage"],
},
};
},
//获取Config参数
getConfigParams() {},
//获取AgentConfig参数
getAgentConfig() {},
async initConfig() {
await wx.config(this.configParams);
wx.ready(() => {
// console.log(this.agentConfigParams);
wx.agentConfig({
...this.agentConfigParams,
success(res) {
console.log("agentConfig", res);
},
fail(res) {
console.log("err", res);
if (res.errMsg.indexOf("function not exist") > -1) {
alert("版本过低请升级");
}
},
});
});
},
只要wx.config、 wx.agentConfig调用成功之后就可以进行消息发送了,pc端一次可以发送多条到聊天信息窗口,需再次点击发送,手机端一次只能发送一条消息。
//mediaid通过后端获取,需要通过文件url上传到腾讯服务器获取(具体不是很清楚了)
wx.invoke('sendChatMessage', {
msgtype:"text", //消息类型,必填
enterChat: true, //为true时表示发送完成之后顺便进入会话,仅移动端3.1.10及以上版本支持该字段
text: {
content:"你好", //文本内容
},
image:
{
mediaid: "", //图片的素材id
},
video:
{
mediaid: "", //视频的素材id
},
file:
{
mediaid: "", //文件的素材id
},
news:
{
link: "", //H5消息页面url 必填
title: "", //H5消息标题
desc: "", //H5消息摘要
imgUrl: "", //H5消息封面图片URL
},
miniprogram:
{
appid: "",//小程序的appid,企业已关联的任一个小程序
title: "this is title", //小程序消息的title
imgUrl:"https://search-operate.cdn.bcebos.com/d054b8892a7ab572cb296d62ec7f97b6.png",//小程序消息的封面图。必须带http或者https协议头,否则报错 $apiName$:fail invalid imgUrl
page:"/index/page.html", //小程序消息打开后的路径,注意要以.html作为后缀,否则在微信端打开会提示找不到页面
},
}, function(res) {
if (res.err_msg == 'sendChatMessage:ok') {
//发送成功
}
})