微信企业号开发:主动发送消息

主企业号主动发送消息,也就是企业号主动推送的消息,适合于企业的通知,通告等。因此如果公司有通知,要求通知到所有员工,就应该使用主动发送消息。

格式是json格式,而且微信很灵活,当touser,toparty,totag的json值是null时,微信服务器主动忽略了。原来还担心,如果是null,在生成json格式时如何忽略掉是null的字段。

核心基本类:

public class MsgBase
    {
       public MsgBase()
       {
           this.safe = "0"; //表示是否是保密消息,0表示否,1表示是,默认0
       }
        /// <summary>
        /// UserID列表(消息接收者,多个接收者用‘|’分隔)。特殊情况:指定为@all,则向关注该企业应用的全部成员发送
        /// </summary>
        public string touser { get; set; }

        /// <summary>
        /// PartyID列表,多个接受者用‘|’分隔。当touser为@all时忽略本参数
        /// </summary>
        public string toparty { get; set; }

        /// <summary>
        /// TagID列表,多个接受者用‘|’分隔。当touser为@all时忽略本参数
        /// </summary>
        public string totag { get; set; }
        /// <summary>
        /// 消息类型
        /// </summary>
        public string msgtype { get; set; }
        /// <summary>
        /// 企业应用的id,整型。可在应用的设置页面查看
        /// </summary>
        public int  agentid { get; set; }

        /// <summary>
        /// 表示是否是保密消息,0表示否,1表示是,默认0
        /// </summary>
        public string safe { get; set; }
    }

public static class MsgType
    {
      public enum MsgBaseEnum
      {
          Text = 1,
          image = 2,
          voice = 3,
          video = 4,
          file = 5,
          news = 6,
          mpnews =7

      };
      public static string GetMsgTypeText(MsgBaseEnum type)
      {
          string text = "";
          switch(type)
          {
              case MsgBaseEnum.Text:
                  text = "text";
                  break;
              case MsgBaseEnum.image:
                  text = "image";
                  break;
              case MsgBaseEnum.voice:
                  text = "voice";
                  break;
              case MsgBaseEnum.video:
                  text = "video";
                  break;
              case MsgBaseEnum.file:
                  text = "file";
                  break;
              case MsgBaseEnum.news:
                  text = "news";
                  break;
              case MsgBaseEnum.mpnews:
                  text = "mpnews";
                  break;
              default:
                  throw new Exception("type=" + type + ",此类型的消息没有实现");

          }
          return text;
      }
    }

文字类型的消息

 public class TextMsg : MsgBase
    {
        public TextMsg(string content)
        {
            this.text = new TextMsgContent(content);
            this.msgtype = MsgType.GetMsgTypeText(MsgType.MsgBaseEnum.Text);
        }
        public TextMsgContent text { get; set; }
    }
    public class TextMsgContent
    {
        public TextMsgContent(string content)
        {
            this.content = content;
        }
        public string content { get; set; }
    }

发送消息

 public static class BLLMsg
    {

       public static bool SendMessage(MsgBase data)
       {
           string urlFormat = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={0}";
           string accessToken = BLLAccessToken.GetAccessToken();
           var url = string.Format(urlFormat, accessToken);
           WebUtils ut = new WebUtils();
           var postData = Tools.ToJsonString<MsgBase>(data);
           //数据不用加密发送
           LogInfo.Info("发送消息: " + postData);
           string sendResult = ut.DoPost(url, postData);
           SendMsgResult tempAccessTokenjson = Tools.JsonStringToObj<SendMsgResult>(sendResult);
           if (tempAccessTokenjson.HasError())
           {
               LogInfo.Error("发送消息错误: " + Tools.ToJsonString<SendMsgResult>(tempAccessTokenjson));
               return false;
           }

           return true;
       }
    }

测试代码:

 private void button9_Click(object sender, EventArgs e)
        {
            TextMsg data = new TextMsg("测试发送文字消息给整个企业" + DateTime.Now);
            data.agentid = 7;
            data.safe = "0";
            data.toparty = "1";
            BLLMsg.SendMessage(data);
        }

        private void button11_Click(object sender, EventArgs e)
        {
            TextMsg data = new TextMsg("测试发送文字消息给医疗部" + DateTime.Now);
            data.agentid = 7;
            data.safe = "0";
            data.toparty = "2";
            BLLMsg.SendMessage(data);
        }

        private void button10_Click(object sender, EventArgs e)
        {
            TextMsg data = new TextMsg("测试发送文字消息给所有用户" + DateTime.Now);
            data.agentid = 7;
            data.safe = "0";
            data.touser = "@all";
            BLLMsg.SendMessage(data);
        }
        private void button1_Click(object sender, EventArgs e)
        {

            TextMsg data = new TextMsg("单用户文字消息" + DateTime.Now);
            data.agentid = 7;
            data.safe = "0";
            data.touser = "iaodong";
            BLLMsg.SendMessage(data);
        }

主动发送消息官方文档

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-23 11:59:19

微信企业号开发:主动发送消息的相关文章

微信企业号给员工发送消息

先看官方文档 https://work.weixin.qq.com/api/doc#10167/文本消息 请求方式:POST(HTTPS)请求地址: https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN ACCESS_TOKEN 来自: https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=企业号ID&corpsecret=应用secret 见下图:

微信公众平台主动发送消息

该功能利用公众平台客服接口,文档地址: http://mp.weixin.qq.com/wiki/1/70a29afed17f56d537c833f89be979c9.html 需要认证公众号方可实现,没有的口可以用测试平台使用. https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=你的access_token 发送图片消息: {     "touser":"ojM5us46feM315cpmf

微信企业号开发:接收消息和事件

接收到的消息和事件,其实都是微信post到我们配置的URL的消息.接收普通消息就是用户给公众号发送的消息,事件是由于用户的特定操作,微信post给我们的消息.被动响应消息是我们收到微信post过来的普通消息或者是事件时,企业号通过Response.Write这种方式回复的消息. 核心代码: 把微信post过来的数据先解密,转为能处理的XML,再把XML转为对象 #region 将POST过来的数据转化成实体对象 /// <summary> /// 将微信POST过来的数据转化成实体对象 ///

微信企业号开发—发送消息

开始回调模式后我们就要实现聊天功能了.平时使用微信聊天可以发送文本消息.语音.图片.视频等,这里只实现了其中的一些功能和大家分享. 一.与微信企业号建立连接 1.企业应用调用企业号提供的接口,管理或查询企业号后台所管理的资源.或给成员发送消息等,以下称主动调用模式. 2.企业号把用户发送的消息或用户触发的事件推送给企业应用,由企业应用处理,以下称回调模式. 3.用户在微信中阅读企业应用下发的H5页面,该页面可以调用微信提供的原生接口,使用微信开放的终端能力,以下称JSAPI模式. 这是微信企业号

微信企业号开发一:主动调用模式之TOKEN申请

微信企业号开发,数据访问格式分为以下三种: 1.企业应用调用企业号提供的接口,管理或查询企业号后台所管理的资源.或给成员发送消息等,以下称主动调用模式. 2.企业号把用户发送的消息或用户触发的事件推送给企业应用,由企业应用处理,以下称回调模式. 3.用户在微信中阅读企业应用下发的H5页面,该页面可以调用微信提供的原生接口,使用微信开放的终端能力,以下称JSAPI模式: 官方文档地址:http://qydev.weixin.qq.com/wiki/index.php 现在我们来看一下主动调用模式的

微信企业号开发:消息类型与差别

微信企业号的消息.分成两种,调用微信接口发送的消息在接口文档中叫做发送消息,这样的消息是json格式的.在微信server给我们配置的URL post数据时发送的消息叫做接收消息和事件,须要加密解密,不须要调用微信接口,这样的消息的格式是XML格式的. 两种消息的差别和联系: 发送消息是json格式的,不须要加密解密.须要调用微信的接口,须要AccessToken,这样的消息适用于公众号主动推送下发消息. 接收消息和事件的格式是XML格式的,须要加密,不须要调用微信接口,不须要AccessTok

[转载]微信企业号开发如何建立连接

连接将使你的企业号更具价值,你可以使用以下三种方式,连接你的企业号及企业应用: 1.企业应用调用企业号提供的接口,管理或查询企业号后台所管理的资源.或给成员发送消息等,以下称主动调用模式. 2.企业号把用户发送的消息或用户触发的事件推送给企业应用,由企业应用处理,以下称回调模式. 3.用户在微信中阅读企业应用下发的H5页面,该页面可以调用微信提供的原生接口,使用微信开放的终端能力,以下称JSAPI模式. 通过这三种连接方式的结合,你可以在企业号中建立功能强大的移动轻应用,并依托微信数亿活跃用户,

Force.com微信企业号开发系列(一) - 启用二次验证

微信于9月份推出企业号后引起了业界不小的反响,许多企业都在思索企业号将如何影响企业的运营,从本文开始,我将详细阐述微信企业号开发的相关知识,而本文将着重介绍如何实现更高安全机制的二次验证. 申请企业体验号: 企业号顾名思义就是企业来申请的号,申请时就像申请服务号一样,需要提供各种组织证明文件,对广大开发者来说很难操作,好在腾讯公司也像服务号一样开通了体验号申请,留意企业体验号的有效期间非常短,只有90天(服务号测试账号有1年有效期),且如果企业体验号长期不使用还会收到腾讯公司的提前失效提醒邮件.

微信企业号开发之回调模式的接口开发

一.前言 微信企业号应用中,有两种模式,一种是普通模式,这种模式只能进行简单网页链接,以及发送固定的消息.为了可以让企业号的用户更好的与应用交互,微信提供了回调模式,这种回调模式的可以将用户发送给微信的信息,转发到用户提供的一个回调接口上,该接口解析用户发送过来的信息,解析后进行相应,而且回调模式中,可以调用的东西不少,扫码,图片,视频,地理位置信息等. 在应用的模式下,选择回调模式,之后,需要设置3个参数(1.回调接口URL:2.token:3.ASESKey),URL就是提供的回调接口,微信