95992828九五至尊2

音信的群发处理和预览功用,微信企业号的新闻发送

四月 19th, 2019  |  九五至尊老品牌值信赖

 大家精通,公司号第2是面向公司急需而生的,由此内部音讯的沟通突显相当主要,而且发送、回复信息数量应该很惊人,对于大厂家进一步如此,由此能够整合公司号达成内部音讯的调换。集团号具有关切安全、新闻无界定等天性,很合乎公司内部的环境。本文首要介绍怎么着接纳企业号达成公文、图片、文件、语音、录制、图像和文字音信等消息的发送操作。

在重重场地下,大家只怕须要接纳微信公众号的优势,定时给钦命用户群发送1些加大信息依然音信内容,以便给关切客户1种通常更新公众号内容的感到到,同时也方便大家平常和用户展开互动。微信公众号的高等群发接口正是为了处理这一个场所的,本文介绍在C#代码中怎么着封装信息的群发和预览等功效。

一、公司号特点

对于商家号,有以下壹些特色:

壹)关心更安全

–唯有集团通信录的分子才干关切公司号,分级管理员、保密音信等各类特色确认保证公司内部信息的平安。

商家方可设置自动验证关怀者身份,实行三遍安全认证,保证公司消息应用和传递安全。

若职员和工人离职,企管员可在通信录中删除该成员,该成员即自行撤消关怀集团号,同时微信中的企业号历史记录也会被清除。

2)应用可铺排

–公司可自动在商店号中可陈设多个服务号,能够连接区别的公司应用系统,唯有授权的合营社成员才干动用相应的服务号。

三)新闻无界定

–发送音信无界定,并提供周详的的军管接口及微信原生技艺,以适应公司复杂、性情化的运用场景。

信用合作社得以积极发音信给职工,信息量不受限制

四)使用更省心

–集团号在微信中有联合的信息入口,用户能够更方便人民群众地管理集团号音信。微信通信录也可以直接待上访问集团号中的应用。

 

一、音信群发的坚守和限量

对此公众号中的服务号和订阅号,群发的消息有明确的限定,具体规则如下所示。

1、对于认证订阅号,群发接口每天可成功调用1次,此次群发可选择发送给全部用户或某个分组;
2、对于认证服务号虽然开发者使用高级群发接口的每日调用限制为100次,但是用户每月只能接收4条,无论在公众平台网站上,还是使用接口群发,用户每月只能接收4条群发消息,多于4条的群发将对该用户发送失败;
3、具备微信支付权限的公众号,在使用群发接口上传、群发图文消息类型时,可使用<a>标签加入外链;
4、开发者可以使用预览接口校对消息样式和排版,通过预览接口可发送编辑好的消息给指定用户校验效果。

群发图文新闻的过程如下:

1、首先,预先将图文消息中需要用到的图片,使用上传图文消息内图片接口,上传成功并获得图片URL
2、上传图文消息素材,需要用到图片时,请使用上一步获取的图片URL
3、使用对用户分组的群发,或对OpenID列表的群发,将图文消息群发出去
4、在上述过程中,如果需要,还可以预览图文消息、查询群发状态,或删除已群发的消息等

群发图片、文本等此外消息类型的历程如下:

1、如果是群发文本消息,则直接根据下面的接口说明进行群发即可
2、如果是群发图片、视频等消息,则需要预先通过素材管理接口准备好mediaID

二、公司号的保管接口内容

目前同盟社号的始末能够用上面包车型大巴道岔图来呈现,分别包罗素材管理、被动响应音信、通信录管理、自定桐花菜单等内容,详细能够看上面图示。

九五至尊老品牌值信赖 1

 

 贰、新闻的群发处理

 纵然群发的音信类型有二种,如包含图像和文字消息、文本新闻、图片、录制、语音、卡劵等等,不过音信群发形式分为两类:依据群组发送音信和依据OpenID发送音讯二种。

依照微信接口的定义,我们规划了对地方三种不一致措施的发送接口,大家把差别门类的新闻放到枚举MassMessageType
举行定义。

        /// <summary>
        /// 根据分组进行群发消息(图文消息、文本消息、语音消息、视频消息、图片、卡劵等)
        /// </summary>
        /// <param name="accessToken">访问凭证</param>
        /// <param name="mediaIdOrContent">群发媒体文件时传入mediaId,群发文本消息时传入content,群发卡券时传入cardId</param>
        /// <param name="groupId">群发到的分组的group_id</param>
        /// <param name="isToAll">
        /// 使用is_to_all为true且成功群发,会使得此次群发进入历史消息列表。
        /// 设置is_to_all为false时是可以多次群发的,但每个用户只会收到最多4条,且这些群发不会进入历史消息列表</param>
        /// <returns></returns>
        MassMessageResult SendByGroup(string accessToken, MassMessageType messageType, string mediaIdOrContent, string groupId, bool isToAll = false);

        /// <summary>
        /// 根据OpenId进行群发消息(视频消息需要单独)
        /// </summary>
        /// <param name="accessToken">访问凭证</param>
        /// <param name="messageType">消息类型</param>
        /// <param name="mediaIdOrContent">用于群发的消息的media_id</param>
        /// <param name="openIdList">openId字符串数组</param>        
        /// <returns></returns>
        MassMessageResult SendByOpenId(string accessToken, MassMessageType messageType, string mediaIdOrContent, List<string> openIdList);

中间枚举MassMessageType定义代码如下所示。

   /// <summary>
    /// 群发消息的类型
    /// </summary>
    public enum MassMessageType
    {
        /// <summary>
        /// 图文消息
        /// </summary>
        mpnews,

        /// <summary>
        /// 文本消息
        /// </summary>
        text,

        /// <summary>
        /// 图片
        /// </summary>
        image,

        /// <summary>
        /// 语音
        /// </summary>
        voice,

        /// <summary>
        /// 音乐
        /// </summary>
        music,

        /// <summary>
        /// 视频
        /// </summary>
        video,

        /// <summary>
        /// 卡劵
        /// </summary>
        wxcard
    }

下一场大家按照下边包车型地铁接口达成相关的处理函数,群发音信的类定义代码如下所示。

    /// <summary>
    /// 消息群发.
    /// 在公众平台网站上,为订阅号提供了每天1条的群发权限,为服务号提供每月(自然月)4条的群发权限。
    /// 而对于某些具备开发能力的公众号运营者,可以通过高级群发接口,实现更灵活的群发能力。
    /// </summary>
    public class MassSendApi : IMassSendApi

对于图像和文字新闻的群发规则,微信接口定义如下。

接口调用请求表明

http请求方式: POST
https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=ACCESS_TOKEN

POST数听他们表明

POST数据示例如下:

图像和文字新闻(注意图像和文字音信的media_id要求经过上述措施来获得):

{
   "filter":{
      "is_to_all":false,
      "group_id":2
   },
   "mpnews":{
      "media_id":"123dsdajkasd231jhksad"
   },
    "msgtype":"mpnews"
}

另外类似文本新闻、图片、录像、语音、卡劵等发送方式接近,都是提供三个例外的JSON字符串,然后提交到对应的接连地址就足以了,因而大家能够把它们举行联合的卷入处理。

咱俩得以在2个规范语句里面对剧情开展组装,例如对于图文音信的处理代码如下所示。

switch (messageType)
            {
                case MassMessageType.mpnews://图文消息
                    postData = new
                    {
                        filter = new
                        {
                            is_to_all = isToAll, //是否让此次群发进入历史消息列表
                            group_id = groupId //群发到的分组的group_id
                        },
                        mpnews = new
                        {
                            media_id = mediaIdOrContent  //用于群发的消息的media_id
                        },
                        msgtype = "mpnews"
                    }.ToJson();
                    break;

对于文本新闻的组装如下所示。

                case MassMessageType.text://文本消息
                    postData = new
                    {
                        filter = new
                        {
                            is_to_all = isToAll, //是否让此次群发进入历史消息列表
                            group_id = groupId //群发到的分组的group_id
                        },
                        text = new
                        {
                            content = mediaIdOrContent  //用于群发的消息的内容
                        },
                        msgtype = "text"
                    }.ToJson();
                    break;

最后我们通过代码进行提交JSON数据,并得到重回结果就能够,如下代码所示。

            string url = string.Format("https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token={0}", accessToken);

            MassMessageResult result = JsonHelper<MassMessageResult>.ConvertJson(url, postData);
            return result;

那般,整合各类新闻类型的拍卖,大家就可以获得三个完全的信息群发操作了。

九五至尊老品牌值信赖 2

群发给openid的操作也是类似上面包车型地铁处理形式,也是通过二个switch的规范语句,举办不相同内容的创设,然后统一发送就可以。

请注意:在回来成功时,意味着群发任务交给成功,并不代表此时群发已经截至,所以,仍有希望在承袭的发送进程中出现极度意况导致用户未抽出消息,如音讯有时会进展查处、服务器不牢固等。别的,群发义务一般须要较长的时刻手艺整个发送完成,请耐心等待

是因为群发职务交给后,群发职分也许在肯定期间后才马到成功,由此,群发接口调用时,仅会交到群发任务是不是交付成功的唤起,若群发职务交给成功,则在群发任务达成时,会向开辟者在民众平台填写的开采者U凯雷德L(callback
U奥德赛L)推送事件。

推送的XML结构如下(发送成功时):

<xml>
<ToUserName><![CDATA[gh_3e8adccde292]]></ToUserName>
<FromUserName><![CDATA[oR5Gjjl_eiZoUpGozMo7dbBJ362A]]></FromUserName>
<CreateTime>1394524295</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[MASSSENDJOBFINISH]]></Event>
<MsgID>1988</MsgID>
<Status><![CDATA[sendsuccess]]></Status>
<TotalCount>100</TotalCount>
<FilterCount>80</FilterCount>
<SentCount>75</SentCount>
<ErrorCount>5</ErrorCount>
</xml>

相应的字段表明如下所示。

参数 说明
ToUserName 公众号的微信号
FromUserName 公众号群发助手的微信号,为mphelper
CreateTime 创建时间的时间戳
MsgType 消息类型,此处为event
Event 事件信息,此处为MASSSENDJOBFINISH
MsgID 群发的消息ID
Status 群发的结构,为“send success”或“send fail”或“err(num)”。但send success时,也有可能因用户拒收公众号的消息、系统错误等原因造成少量用户接收失败。err(num)是审核失败的具体原因
TotalCount group_id下粉丝数;或者openid_list中的粉丝数
FilterCount 过滤(过滤是指特定地区、性别的过滤、用户设置拒收的过滤,用户接收已超4条的过滤)后,准备发送的粉丝数,原则上,FilterCount = SentCount + ErrorCount
SentCount 发送成功的粉丝数
ErrorCount 发送失败的粉丝数

由此大家须要通过拍卖音信群发的出殡完结操作,定义三个实体类来承载这一个消息。

    public class RequestMassSendJobFinish : BaseEvent
    {
        public RequestMassSendJobFinish()
        {
            this.MsgType = RequestMsgType.Event.ToString().ToLower();
            this.Event = RequestEvent.MASSSENDJOBFINISH.ToString();
        }

        /// <summary>
        /// 群发的消息ID
        /// </summary>
        public int MsgID { get; set; }

        /// <summary>
        /// 返回状态。
        /// </summary>
        public string Status { get; set; }

        /// <summary>
        /// group_id下粉丝数;或者openid_list中的粉丝数
        /// </summary>
        public int TotalCount { get; set; }

        /// <summary>
        /// 过滤(过滤是指,有些用户在微信设置不接收该公众号的消息)后,准备发送的粉丝数,原则上,FilterCount = SentCount + ErrorCount
        /// </summary>
        public int FilterCount { get; set; }

        /// <summary>
        /// 发送成功的粉丝数
        /// </summary>
        public int SendCount { get; set; }

        /// <summary>
        /// 发送失败的粉丝数
        /// </summary>
        public int ErrorCount { get; set; }
    }

在大家须要记录可能更新处理那种群发新闻的情状的时候,大家得以在任何微信的音信链里面对如此的伏乞事件举办处理,如下代码是处理那种群发音讯的打招呼的。

                            case RequestEvent.MASSSENDJOBFINISH:
                                {
                                    //由于群发任务彻底完成需要较长时间,将会在群发任务即将完成的时候,就推送群发结果,此时的推送人数数据将会与实际情形存在一定误差
                                    RequestMassSendJobFinish info = XmlConvertor.XmlToObject(postStr, typeof(RequestMassSendJobFinish)) as RequestMassSendJobFinish;
                                    if(info != null)
                                    {
                                        //在此记录群发完成的处理
                                    }
                                    LogTextHelper.Info(eventName + ((info == null) ? "info is null" : info.ToJson()));
                                }
                                break;

 

3、公司号消息和事件的处理

市肆号和大众号同样,能够分成新闻处理和事件处理,上边是她们三种档次的处理操作,也就发送的新闻有文件信息、图片音讯、文件音讯、摄像新闻、语新闻息、地理文字新闻、图像和文字和多媒体信息等。

事件处理首要就是关怀、撤废关切事件,以及菜单click类型和view类型三种操作,还有就是地理地方反馈事件等。

二种档次的拍卖图如下所示。

九五至尊老品牌值信赖 3 

三、待群发音信的预览

在成千上万时候,大家群发新闻此前,大家期待通过自身的微非功率信号来探望现实的群发新闻效果,假设没极度我们在联合群发,也就是三个真实的稽核进程,这样对于大家发送高素质的新闻是3个很好的习惯。

对此普通的音信预览,大家定义的接口如下所示。

        /// <summary>
        /// 预览接口【订阅号与服务号认证后均可用】。
        /// 开发者可通过该接口发送消息给指定用户,在手机端查看消息的样式和排版。
        /// 为了满足第三方平台开发者的需求,在保留对openID预览能力的同时,增加了对指定微信号发送预览的能力,但该能力每日调用次数有限制(100次),请勿滥用。
        /// </summary>
        /// <param name="accessToken">访问凭证</param>
        /// <param name="messageType">消息类型</param>
        /// <param name="media_id">用于群发的消息的media_id</param>
        /// <param name="touserOpenId">接收消息用户对应该公众号的openid</param>
        /// <param name="towxname">可以针对微信号进行预览(而非openID),towxname和touser同时赋值时,以towxname优先</param>
        /// <returns></returns>
        MassMessageResult PreviewMessage(string accessToken, MassMessageType messageType, string media_id, string touserOpenId, string towxname = null);

现实的实现也等于本着分歧的新闻类型,创设2个不1的拍卖体制,把它们差别性的JSON构造出来,然后统1调用就足以了,具体代码如下所示。

        public MassMessageResult PreviewMessage(string accessToken, MassMessageType messageType, string media_id, string touserOpenId, string towxname = null)
        {
            string postData = "";
            switch (messageType)
            {
                case MassMessageType.mpnews://图文消息
                    postData = new
                    {
                        touser = touserOpenId,
                        towxname = towxname,
                        mpnews = new
                        {
                            media_id = media_id
                        },
                        msgtype = "mpnews"
                    }.ToJson();
                    break;

                case MassMessageType.text://文本消息
                    postData = new
                    {
                        touser = touserOpenId,
                        towxname = towxname,
                        text = new
                        {
                            content = media_id
                        },
                        msgtype = "text"
                    }.ToJson();
                    break;

                case MassMessageType.voice://语音
                    postData = new
                    {
                        touser = touserOpenId,
                        towxname = towxname,
                        voice = new
                        {
                            media_id = media_id
                        },
                        msgtype = "voice"
                    }.ToJson();
                    break;

                case MassMessageType.image://图片
                    postData = new
                    {
                        touser = touserOpenId,
                        towxname = towxname,
                        image = new
                        {
                            media_id = media_id
                        },
                        msgtype = "image"
                    }.ToJson();
                    break;

                case MassMessageType.video://视频
                    postData = new
                    {
                        touser = touserOpenId,
                        towxname = towxname,
                        mpvideo = new
                        {
                            media_id = media_id
                        },
                        msgtype = "mpvideo"
                    }.ToJson();
                    break;

                case MassMessageType.wxcard: //卡劵
                    throw new WeixinException("发送卡券息请使用PreviewCardMessage方法。");
                    break;
            }

            var url = string.Format("https://api.weixin.qq.com/cgi-bin/message/mass/preview?access_token={0}", accessToken);
            return JsonHelper<MassMessageResult>.ConvertJson(url, postData);
        }

音讯的预览在我们正式群发音信前的查处是相比较实用的,我们能够透过接口举行三个消息的预览,能够在微信公众号上看看的坚守与行业内部群发后的音讯是1律的。

譬如大家通过下边包车型客车代码举办2个简易的预览新闻操作。

        /// <summary>
        /// 群发消息的预览
        /// </summary>
        private void btnPreviewMass_Click(object sender, EventArgs e)
        {
            //上传图片
            btnUpload_Click(null, null);

            //上传图文消息
            btnUploadNews_Click(null, null);

            //消息群发前的预览操作
            List<string> list = new List<string>() { openId };
            IMassSendApi api = new MassSendApi();
            var mediaId = this.news_mediaId;
            MassMessageResult result = api.PreviewMessage(token, MassMessageType.mpnews, mediaId, openId);
            if (result != null)
            {
                Console.WriteLine(result.msg_id);
            }
        }

末段能够观望例子代码的预览效果如下所示。

九五至尊老品牌值信赖 4

 

只要对那些《C#支出微信门户及应用》类别感兴趣,能够关注本身的别的小说,类别小说如下所示:

C#支出微信门户及应用(2九)–微信天性化菜单的贯彻

C#支出微信门户及采用(2八)–微信“摇一摇·周边”成效的行使和接口的贯彻

C#支付微信门户及运用(贰7)-公众号模板新闻管理 

C#开垦微信门户及应用(二6)-公众号微信托投资料管理

C#开辟微信门户及选拔(2伍)-微信企业号的客户端管住作用

C#付出微信门户及利用(二四)-微信小店货架消息保管

C#支出微信门户及使用(贰三)-微信小店商品质量管理理理接口的包裹和测试

C#支出微信门户及接纳(22)-微信小店的开垦和利用

C#支付微信门户及利用(2一)-微信企业号的音信和事件的接受处理及解密 

C#支付微信门户及应用(20)-微信集团号的美食做法管理

C#开辟微信门户及使用(1九)-微信集团号的音讯发送(文本、图片、文件、语音、录像、图像和文字音信等)

C#支出微信门户及使用(1捌)-微信集团号的通信录管理支付之成员管理

C#支付微信门户及采纳(1七)-微信集团号的通信录管理支付之部门管理

C#支付微信门户及利用(1六)-微信公司号的配置和应用

C#支付微信门户及应用(一5)-微信菜单扩大扫一扫、发图片、发地理位置功效

 C#支付微信门户及使用(1四)-在微信菜单中应用重定向获取用户数据

C#支付微信门户及选取(一3)-使用地理地点扩充相关应用

C#开垦微信门户及利用(1二)-使用语音处理

C#支付微信门户及运用(11)–微信菜单的各个表现情势介绍

C#开拓微信门户及应用(10)–在保管种类中同步微信用户分组消息

C#支付微信门户及使用(九)-微信门户菜单管理及提交到微信服务器

C#支付微信门户及采纳(八)-微信门户应用管理体系机能介绍

C#九五至尊老品牌值信赖,开辟微信门户及运用(7)-微信多客服作用及支出集成

C#开荒微信门户及应用(6)–微信门户菜单的治本操作

C#付出微信门户及选择(五)–用户分组消息保管

C#支出微信门户及运用(肆)–关怀用户列表及详细消息管理

C#支付微信门户及应用(三)–文本音讯和图文音信的对答

C#支付微信门户及选拔(2)–微信音信的处理和回答

C#开辟微信门户及运用(一)–发轫运用微信接口

 

 

肆、公司号音讯管理

在小卖部的保管后台,和民众号一样,能够见到相应消息沟通记录,包含文字、图片、地理地方等等,如下所示。

 九五至尊老品牌值信赖 5

出于新闻分为几体系型,包涵文件(Text)、图片(Image)、文件(File)、语音(Voice)、录制(Video)、图像和文字音信等(News)、MpNews等。

据此我们须要各自对它们举办自然的定义和包裹处理,如下是它们的音讯目标设计图。

 九五至尊老品牌值信赖 6

 

商家号发送新闻的法定概念如下:

市肆得以主动发消息给职员和工人,新闻量不受限制

调用接口时,使用Https协议、JSON数据包格式,数据包不需做加密处理。

现阶段支撑文件、图片、语音、录像、文件、图像和文字等信息类型。除了news类型,其余门类的信息可在发送时抬高保密选项,保密信息会被打上水印,并且只有接收者才能阅读。

 

笔者们以发送的公文音讯为例进行验证,它的定义如下所示。

  • text消息

{
   "touser": "UserID1|UserID2|UserID3",
   "toparty": " PartyID1 | PartyID2 ",
   "totag": " TagID1 | TagID2 ",
   "msgtype": "text",
   "agentid": "1",
   "text": {
       "content": "Holiday Request For Pony(http://xxxxx)"
   },
   "safe":"0"
}

 

参数 必须 说明
touser UserID列表(消息接收者,多个接收者用‘|’分隔)。特殊情况:指定为@all,则向关注该企业应用的全部成员发送
toparty PartyID列表,多个接受者用‘|’分隔。当touser为@all时忽略本参数
totag TagID列表,多个接受者用‘|’分隔。当touser为@all时忽略本参数
msgtype 消息类型,此时固定为:text
agentid 企业应用的id,整型。可在应用的设置页面查看
content 消息内容
safe 表示是否是保密消息,0表示否,1表示是,默认0

 

 

 在那之中每个消息都会蕴藏以下音信所示,也正是它们一同的质量:

    touser": "UserID1|UserID2|UserID3",
   "toparty": " PartyID1 | PartyID2 ",
   "totag": " TagID1 | TagID2 ",
   "msgtype": "text",
   "agentid": "1",

于是大家得以定义2个基类用来便宜承载这一个共同的新闻。

    /// <summary>
    /// 企业号发送消息的基础消息内容
    /// </summary>
    public class CorpSendBase
    {      
        /// <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 string agentid { get; set; }

        /// <summary>
        /// 表示是否是保密消息,0表示否,1表示是,默认0
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
        public string safe { get; set; }

    }

接下来其余信息逐一承袭这一个基类就能够,如下所示。

九五至尊老品牌值信赖 7

最后会构成下边那些再而三关系图。 

 九五至尊老品牌值信赖 8

5、音信接口的定义和落实 

 定义好相关的发送对象后,大家就能够定义它的统一发送接口了,如下所示。

    /// <summary>
    /// 企业号消息管理接口定义
    /// </summary>
    public interface ICorpMessageApi
    {        
        /// <summary>
        /// 发送消息。
        /// 需要管理员对应用有使用权限,对收件人touser、toparty、totag有查看权限,否则本次调用失败。
        /// </summary>
        /// <param name="accessToken"></param>
        /// <returns></returns>
        CommonResult SendMessage(string accessToken, CorpSendBase data);
    }

最终,文本等品种的音信会基于接口定义举办落到实处,落成代码如下所示。注意,发送进程不需要调用加密类进行加密。

    /// <summary>
    /// 企业号消息管理实现类
    /// </summary>
    public class CorpMessageApi : ICorpMessageApi
    {
        /// <summary>
        /// 发送消息。
        /// 需要管理员对应用有使用权限,对收件人touser、toparty、totag有查看权限,否则本次调用失败。
        /// </summary>
        /// <param name="accessToken"></param>
        /// <returns></returns>
        public CommonResult SendMessage(string accessToken, CorpSendBase data)
        {        
            CommonResult result = new CommonResult();

            string urlFormat = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={0}";
            var url = string.Format(urlFormat, accessToken);
            var postData = data.ToJson();

            //数据不用加密发送
            CorpSendResult sendResult = CorpJsonHelper<CorpSendResult>.ConvertJson(url, postData);
            if (sendResult != null)
            {
                result.Success = (sendResult.errcode == CorpReturnCode.请求成功);
                result.ErrorMessage = string.Format("invaliduser:{0},invalidparty:{1},invalidtag:{2}",
                    sendResult.invaliduser, sendResult.invalidparty, sendResult.invalidtag);
            }

            return result;
        }
    }

6、新闻的发送操作和实效

 定义好相应的出殡对象后,大家就足以展开统一的新闻发送操作,包含文件、图片、文件、语音等等类型的音讯,注意有个别消息是索要上传出服务器上,然后在依照mediaId进行发送出去的。

发送文书和图纸的操作代码如下所示。

        private void btnSendText_Click(object sender, EventArgs e)
        {
            //发送文本内容
            ICorpMessageApi bll = new CorpMessageApi();

            CorpSendText text = new CorpSendText("API 中文测试(http://www.iqidi.com)");
            text.touser = "wuhuacong";
            text.toparty = "4";//部门ID
            text.totag = "0";

            text.safe = "0";
            text.agentid = "0";

            CommonResult result = bll.SendMessage(token, text);
            if (result != null)
            {
                Console.WriteLine("发送消息:{0} {1} {2}", text.text.content, (result.Success ? "成功" : "失败"), result.ErrorMessage);
            }
        }
        private void btnSendImage_Click(object sender, EventArgs e)
        {
            btnUpload_Click(sender, e);

            if (!string.IsNullOrEmpty(image_mediaId))
            {
                //发送图片内容
                ICorpMessageApi bll = new CorpMessageApi();

                CorpSendImage image = new CorpSendImage(image_mediaId);
                CommonResult result = bll.SendMessage(token, image);
                if (result != null)
                {
                    Console.WriteLine("发送图片消息:{0} {1} {2}", image_mediaId, (result.Success ? "成功" : "失败"), result.ErrorMessage);
                }
            }
        }

最后在微信公司号上截图效果如下所示,包蕴了文本测试、文件测试、图像和文字测试、语音测试均正常。

九五至尊老品牌值信赖 9 九五至尊老品牌值信赖 10

 

如果对那一个《C#开荒微信门户及利用》连串感兴趣,能够关切自小编的其余文章,体系小说如下所示:

C#支付微信门户及利用(贰5)-微信集团号的客户端管住功能

C#开采微信门户及应用(2四)-微信小店货架信息保管

C#付出微信门户及利用(二三)-微信小店商品质量管理理理接口的包裹和测试

C#付出微信门户及应用(2二)-微信小店的支出和选取

C#开辟微信门户及应用(二一)-微信集团号的新闻和事件的吸收接纳处理及解密 

C#开荒微信门户及使用(20)-微信集团号的美食做法管理

C#支付微信门户及使用(1九)-微信集团号的新闻发送(文本、图片、文件、语音、录制、图像和文字新闻等)

C#支出微信门户及使用(1八)-微信公司号的通信录管理支付之成员管理

C#支出微信门户及使用(1七)-微信集团号的通信录管理支付之部门管理

C#支出微信门户及运用(1陆)-微信公司号的配备和利用

C#支出微信门户及利用(壹五)-微信菜单扩展扫一扫、发图片、发地理地点成效

 C#支出微信门户及应用(1四)-在微信菜单中利用重定向获取用户数据

C#支出微信门户及使用(一3)-使用地理地点扩张相关应用

C#付出微信门户及应用(1二)-使用语音处理

C#付出微信门户及选取(1一)–微信菜单的八种表现方式介绍

C#付出微信门户及运用(10)–在管制种类中联手微信用户分组消息

C#付出微信门户及利用(玖)-微信门户菜单管理及提交到微信服务器

C#支出微信门户及使用(八)-微信门户应用管理种类功用介绍

C#支出微信门户及选择(七)-微信多客服作用及开拓集成

C#支付微信门户及利用(6)–微信门户菜单的管理操作

C#开垦微信门户及使用(5)–用户分组音信保管

C#付出微信门户及运用(四)–关心用户列表及详细音讯管理

C#支出微信门户及应用(3)–文本新闻和图像和文字消息的对答

C#支出微信门户及使用(贰)–微信音讯的处理和回复

C#支付微信门户及运用(一)–起先运用微信接口

相关文章

Your Comments

近期评论

    功能


    网站地图xml地图