C#微信群发图文消息

6 篇文章 0 订阅

1.最近新申请的公众号需要用到一个功能:微信群发消息。

2.按照自己的习惯,首先去官网看文档:群发接口

        我截取官网的关键几句话:

这几句话,字面意思应该是:1.上传图文消息内图片接口

                                               2.上传图文素材

                                               3.群发接口

                                               4.预览接口 【根据文档描述,此接口一个月只能调用四次,所以我首先选择预览接口】

3.正常情况下,看完文档后就可以开始着手码字了。

        首先是第一个接口:上传图文消息内的图片获取URL【订阅号与服务号认证后均可用】

        根据此接口说明,请求的时候需要access_token,这个就不介绍了,基本操作。第二个参数是media,字面意思就是接口小括号里面的文字(使用curl命令,用form表单模拟上传图片),参考网站:如何使用multipart/form-data格式上传文件

        代码如下:

        /// <summary>
        /// 
        /// </summary>
        /// <param name="imgPath">文件路径</param>
        /// <param name="imgName">文件名</param>
        /// <param name="url">接口地址</param>
        /// <returns></returns> 
        private string GetImageMediaByCURL(string imgPath, string imgName, string url)
        {
            string Result = string.Empty;
            try
            {
                HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
                request.CookieContainer = new CookieContainer();
                request.AllowAutoRedirect = true;
                request.Method = "POST";
                string splitline = DateTime.Now.Ticks.ToString("X");
                request.ContentType = "multipart/form-data;charset=utf-8;boundary=" + splitline;
                byte[] startSplitBytes = Encoding.UTF8.GetBytes("\r\n--" + splitline + "\r\n");
                byte[] endSplitBytes = Encoding.UTF8.GetBytes("\r\n--" + splitline + "--\r\n");
                string header = "Content-Disposition:form-data;name=\"file\";filename=\"" + imgName + "\"\r\nContent-Type:application/octet-stream\r\n\r\n";
                byte[] headerBytes = Encoding.UTF8.GetBytes(header);
                FileStream fs = new FileStream(imgPath, FileMode.Open, FileAccess.Read);
                byte[] imgArr = new byte[fs.Length];
                fs.Read(imgArr, 0, imgArr.Length);
                fs.Close();
                Stream postStream = request.GetRequestStream();
                //开始发送
                postStream.Write(startSplitBytes, 0, startSplitBytes.Length);
                postStream.Write(headerBytes, 0, headerBytes.Length);
                postStream.Write(imgArr, 0, imgArr.Length);
                postStream.Write(endSplitBytes, 0, endSplitBytes.Length);
                postStream.Close();
                //开始接收
                HttpWebResponse response = request.GetResponse() as HttpWebResponse;
                Stream instream = response.GetResponseStream();
                StreamReader reader = new StreamReader(instream, Encoding.UTF8);
                Result = reader.ReadToEnd();
            }
            catch (Exception ex)
            {
                //记录日志
            }
            return Result;
        }

          经过验证,这一步是可以正确接收到数据

4.正常情况下,按照文档描述的步骤,应该就是上传图文消息素材了,接口为:https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=ACCESS_TOKEN

        如下图所示:按照文档描述,当我拼接JSON字符串的时候,发现其中有一个字段:thumb_media_id。最开始,我用的是素材库里面的永久素材,结果就是凉凉。此时我又去看了一遍文档描述,发现了一种一个关键词:缩略图。然后开始百度查询资料,最后还是在官网文档中不小心翻到了一个接口:新增临时素材。在这个接口中我发现了一个字段描述如下图所示:

        于是我就用这个接口上传了两个图片试试,然后通过上面的代码成功接收到了返回的数据。返回数据日志如下:

于是乎,我把这里获取到的thumb_media_id拿去进行图文素材上传,最后成功收到了正确的返回数据,上传代码如下:

        /// <summary>
        /// POST发送数据
        /// </summary>
        /// <param name="url"></param>
        /// <param name="sendmsg"></param>
        /// <returns></returns>
        public string PostSend(string url, string sendmsg, bool IsResponse)
        {
            string result = string.Empty;
            //处理请求数据
            Encoding myenc = Encoding.GetEncoding("UTF-8");
            byte[] postBytes = Encoding.UTF8.GetBytes(sendmsg);
            HttpWebRequest hwr = (HttpWebRequest)HttpWebRequest.Create(url);
            hwr.Method = "POST";
            hwr.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
            hwr.ContentLength = postBytes.Length;
            try
            {
                using (Stream requestStream = hwr.GetRequestStream())
                {
                    //发送
                    requestStream.Write(postBytes, 0, postBytes.Length);
                }
                if (IsResponse)
                {
                    //接收
                    using (WebResponse webres = hwr.GetResponse())
                    {
                        using (StreamReader sr = new StreamReader(webres.GetResponseStream(), myenc))
                        {
                            result = System.Web.HttpUtility.UrlDecode(sr.ReadToEnd());
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                //记录日志
                //XiaoRanRecord.WriteTextRecordByTime(string.Empty, "XiaoRanHttpHelper", "PostSend:" + ex.Message.ToString());
            }
            return result;
        }

5.群发数据,由于群发每月四次限制,所以我首先用了预览接口:https://api.weixin.qq.com/cgi-bin/message/mass/preview?access_token=ACCESS_TOKEN。拼接好数据后,发送过去,我是给我自己的微信和另一个开发者的微信发送的,均能正常收到图文消息。

6.接下来的图文消息群发亦是如此,能正常使用的

7.总结下我最终正常流程:上传图片素材:https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN

                                          上传缩略图素材:https https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE 注意type=thumb。此接口返回的media_id为图文消息素材的thumb_media_id

                                          上传图文消息素材:https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=ACCESS_TOKEN

                                          群发图文消息/预览图文消息:

微信是一款支持聊天、语音通话、视频通话、群聊等功能的即时通讯软件。其中,微信群消息和收消息是其重要的功能之一。 微信群消息是指用户可以通过微信向自己的好友或者微信群发送一条消息,并且这条消息会被同时发送给所有的收件人。通过群消息,用户可以一次性向多个好友或群发送信息,方便快捷地进行信息传递、分享新鲜事物以及组织活动等。 微信群消息操作简单,只需在微信界面选择群功能,选择群或好友名单,输入要发送的内容,然后点击发送即可。在发送之前,用户还可以对发送的内容进行编辑和预览,确保发送的信息准确、完整。 而收消息则是用户在微信中接收到其他用户来的消息。当用户收到消息时,微信会自动弹出提示,并在消息列表中显示发送人的头像、昵称以及消息内容。用户可以通过点击消息进行阅读、回复或转等操作,与好友进行实时交流。 微信的消息功能支持文字、表情、图片、语音、视频等多种内容格式的发送和接收。用户还可以对消息进行撤回、设为未读、设置消息免打扰等操作,以管理收到的消息微信群消息和收消息的功能使得用户能够更加便捷地与好友和群组进行沟通和交流。在实际使用中,用户可以通过微信群消息和收消息,方便地传递信息、分享生活,同时也能更好地组织活动和维护社交关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值