企业微信JSSDK开发,最大的坑就是分享消息到会话中的分享图片到会话,分享图片需要
mediaid
。
开发说明
点击按钮时,通过请求接口,获取mediaid
,成功之后调用sendChatMessage
方法。前提,config和agentConfig
签名成功.
问题一:
list页面,很多发送按钮,根据不同type类似,发送不同的msgtype
文本和链接都会正常的发送出去,但是到了图片,问题就来了:请求接口后mediaid
有拿到,但是不会进入到$wx.invoke
中,请求接口和$wx.invoke同步执行了。
解决方案:在list中,通过setInterval
定时自动触发$wx.invoke
,体验效果会比较差,需要等那么一会时间然后才有反应(待优化)。
问题二:
在触发分享消息到会话后,Android手机自动关闭页面,然后弹起企业微信的分享框,所以此时不论是点击确定按钮还是取消按钮,都触发不到回调函数;而IOS手机不会自动关闭,不论是点击确定按钮还是取消按钮都会触发进入到res.err_msg == "sendChatMessage:ok"
的回调里,并且在回调里写了处理逻辑,比如Toast.success("发送成功");
,会导致页面卡死。
所以在回调函数里不要做任何逻辑处理。
问题三:
想要在IOS手机触发分享消息到会话之后,关闭h5页面,把所有的关闭方法都试过了,失败。关闭方法如下,
$wx.closeWindow();
WeixinJSBridge.call("closeWindow");
window.opener = null;
window.close();
问题四:
独立的按钮,点击分享图片到会话中时,在已经获取了mediaid
的情况下, 在IOS手机中,需要点击两次才能够触发成功。
侧边栏分享消息到会话代码:
//聊天工具栏分享消息到会话
handleSendMessage(item){
// console.log(item)
let self =this;
if(this.flag) return
this.flag = true
$wx&&$wx.ready(function () {
if(item.type==0){//文本
$wx.invoke('sendChatMessage', {
msgtype: "text", //消息类型,必填
text: {
content: item.content, //文本内容
},
}, function (res) {
self.flag = false
if (res.err_msg == 'sendChatMessage:ok') {
//发送成功
}
});
}else if(item.type==1){//图片
let corpId = self.parmas.corpId, type="image", mediaUrl=item.picUrl;
GetWCMediaId(corpId, type, mediaUrl).then(res=>{
if(res.code==100){
let media_id = res.data.media_id;
let timer = setInterval(() => {
$wx.invoke('sendChatMessage', {
msgtype: "image", //消息类型,必填
image:{
mediaid: media_id,//图片的素材id
}
}, function (res) {
clearInterval(timer)
self.flag = false
if (res.err_msg == 'sendChatMessage:ok') {
//发送成功
}
});
}, 300);
}
})
}else if(item.type==2){//h5
$wx.invoke('sendChatMessage', {
msgtype: "news", //消息类型,必填
news:{
link: item.linkUrl, //H5消息页面url 必填
title:item.title, //H5消息标题
desc: item.content, //H5消息摘要
imgUrl: item.picUrl, //H5消息封面图片URL
}
}, function (res) {
self.flag = false
if (res.err_msg == 'sendChatMessage:ok') {
//发送成功
}
});
}
})
},
麻烦都按照这个模版收集下案例 我们对应核查
JS-SDK问题 问题描述:
config和agentConfig已经签名成功之后,点击按钮时,通过请求接口,获取mediaid,成功之后调用sendChatMessage方法。
问题一:
list页面,很多发送按钮,根据不同type类似,发送不同的msgtype
文本和链接都会正常的发送出去,但是到了图片,问题就来了:请求接口后mediaid有拿到,但是不会进入到wx.invoke中,请求接口和wx.invoke同步执行了。
解决方案:在list中,通过setInterval定时自动触发wx.invoke,体验效果会比较差,需要等那么一会时间然后才有反应(待优化)。
问题二:
在触发分享消息到会话后,Android手机自动关闭页面,然后弹起企业微信的分享框,所以此时不论是点击确定按钮还是取消按钮,都触发不到回调函数;而IOS手机不会自动关闭,不论是点击确定按钮还是取消按钮都会触发进入到res.err_msg == "sendChatMessage:ok"的回调里,并且在回调里写了处理逻辑,比如Toast.success("发送成功");,会导致页面卡死。
所以在回调函数里不要做任何逻辑处理。
问题三:
想要在IOS手机触发分享消息到会话之后,关闭h5页面,把所有的关闭方法都试过了,失败。关闭方法如下,
wx.closeWindow();
WeixinJSBridge.call("closeWindow");
window.opener = null;
window.close();
问题四:
独立的按钮,点击分享图片到会话中时,在已经获取了mediaid的情况下, 在IOS手机中,需要点击两次才能够触发成功。
Corpid:
反馈者手机号:13464694352
问题时间点:202005
操作录屏/接:
版本号:企业微信app 3.0.16 、 3.0.20
调用接口:sendChatMessage