企业微信JSSDK之侧边栏分享消息到会话

1,430 阅读3分钟

企业微信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