zoukankan      html  css  js  c++  java
  • C# 调用微信接口上传素材和发送图文消息

    using Common;
    using Newtonsoft.Json.Linq;
    using System;
    using System.IO;
    using System.Net;
    using System.Text;

         /// <summary>
            /// 调用微信接口凭证access_token
            /// </summary>
            private static string test_access_token
            {
                get
                {
                    return "XXXXXXXXXXXX";
                }
            }
    
            /// <summary>
            /// 新增其他类型永久素材,返回值{"media_id":"eZh1QTjGGSyE-i9k8uHZqrd5LpHfYBsKtUrSfnjf8k0",
            /// "url":"http://mmbiz.qpic.cn/mmbiz_png/gHnmqhvpvh5HoibMEcGEAK4eAKvIR18kuKoXbjCiaRa1p1WTBgicYMDvqkjTadib21KUWYpibzfuXj6ibRw8ibw/0?wx_fmt=png"}
            /// </summary>
            /// <param name="url">目标地址</param>
            /// <param name="path">图片物理文件路径</param>
            /// <returns></returns>
            public string add_material()
            {
                //图片(image): 2M,支持bmp/png/jpeg/jpg/gif格式
                //语音(voice):2M,播放长度不超过60s,mp3/wma/wav/amr格式
                //视频(video):10MB,支持MP4格式
                //缩略图(thumb):64KB,支持JPG格式
                            
                var file = Request.Files[0];
                string fileName = file.FileName;
                string url = string.Format("https://api.weixin.qq.com/cgi-bin/material/add_material?access_token={0}&type={1}", test_access_token, "image");
                
                //读取上载文件流
                System.IO.Stream fileStream = file.InputStream;
                byte[] fileByte = new byte[fileStream.Length];
                fileStream.Read(fileByte, 0, fileByte.Length);
    
                // 设置参数
                HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
                CookieContainer cookieContainer = new CookieContainer();
                request.CookieContainer = cookieContainer;
                request.AllowAutoRedirect = true;
                request.Method = "POST";
                string boundary = DateTime.Now.Ticks.ToString("X"); // 随机分隔线
                request.ContentType = "multipart/form-data;charset=utf-8;boundary=" + boundary;
                byte[] itemBoundaryBytes = Encoding.UTF8.GetBytes("
    --" + boundary + "
    ");
                byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("
    --" + boundary + "--
    ");
    
                //请求头部信息
                StringBuilder sbHeader =
                    new StringBuilder(
                        string.Format(
                            "Content-Disposition:form-data;name="media";filename="{0}"
    Content-Type:application/octet-stream
    
    ",
                            fileName));
                byte[] postHeaderBytes = Encoding.UTF8.GetBytes(sbHeader.ToString());
    
                Stream postStream = request.GetRequestStream();
                postStream.Write(itemBoundaryBytes, 0, itemBoundaryBytes.Length);
                postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
                postStream.Write(fileByte, 0, fileByte.Length);
                postStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);
                postStream.Close();
    
                //发送请求并获取相应回应数据
                HttpWebResponse response = request.GetResponse() as HttpWebResponse;
                Stream instream = response.GetResponseStream();
                StreamReader sr = new StreamReader(instream, Encoding.UTF8);
                string content = sr.ReadToEnd();
                return content;
            }
    

      

      

         /// <summary>
            /// 上传图文消息素材,返回格式:{"type":"news","media_id":"mF1J9boYDAQlYew4wbvbxQKMBkLPa1WzhGbDW7FVak","created_at":1391857799}
            /// </summary>
            /// <returns></returns>
            public string add_news()
            {
                var news = "{"articles":[{"thumb_media_id":"mF1J9boYDAQlYew4wbvbxTgoKle16WjhsxuwhV9ZtQ","author":"PDF","title":"车行易.违章查询","content_source_url":"www.qq.com","content":"","digest":"为车主朋友们提供优质让人满意的服务","show_cover_pic":1}]}";
                var newsUrl = "https://api.weixin.qq.com/cgi-bin/material/add_news?access_token={0}";
                newsUrl = string.Format(newsUrl, test_access_token);
                var result = HttpHelper.Post(newsUrl, news, null, "applicaion/json");
                WriteLog.WriteLogToFile("add_news RESULT:" + result);
                return result;
            }
    

      

         /// <summary>
            /// 预览接口(发送给指定的openId)
            /// </summary>
            /// <returns></returns>
            public string preview()
            {
                //说明:media_id值来自add_news接口返回值中的media_id值
                var news = "{"touser":"oTD55jj52uIhOObiwrxCjjrCl9g","mpnews":{"media_id":"mF1J9boYDAQlYew4wbbxQKMBkLPa1WzwhGbDW7FVak"},"msgtype":"mpnews"}";
                var newsUrl = "https://api.weixin.qq.com/cgi-bin/message/mass/preview?access_token={0}";
                newsUrl = string.Format(newsUrl, test_access_token);
                var result = HttpHelper.Post(newsUrl, news, null, "applicaion/json");
                WriteLog.WriteLogToFile("preview RESULT:" + result);
                return result;
            }
    

      

         /// <summary>
            /// 根据标签进行群发【警告,谨慎调用】
            /// </summary>
            /// <returns></returns>
            public string sendall()
            {
                //说明:media_id值来自add_news接口返回值中的media_id值
                var news = "{"filter":{"is_to_all":false,"tag_id":215},"mpnews":{"media_id":"mF1J9boYDAQlYew4wbbxQKMBkLPa1WzwhGbDW7FVak"},"msgtype":"mpnews","send_ignore_reprint":1,"clientmsgid":"20171107"}";
                var newsUrl = "https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token={0}";
                newsUrl = string.Format(newsUrl, test_access_token);
                var result = HttpHelper.Post(newsUrl, news, null, "applicaion/json");
                WriteLog.WriteLogToFile("sendall RESULT:" + result);
                return result;
            }
    

      

         /// <summary>
            /// 获取永久素材的列表   
            /// </summary>
            /// <returns></returns>
            public string batchget_material()
            {
                var news = "{"type":"news","offset":0,"count":3}";
                var newsUrl = "https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token={0}";
                newsUrl = string.Format(newsUrl, test_access_token);
                var result = HttpHelper.Post(newsUrl, news, null, "applicaion/json");
                WriteLog.WriteLogToFile("batchget_material RESULT:" + result);
                return result;
            }
    

      

         /// <summary>
            /// 获取永久素材详细
            /// </summary>
            /// <returns></returns>
            public string get_material()
            {
                var news = "{"media_id":"mF1J9boYDAQlYew4wbvbxQKMBkLa1WzwhGbDW7FVak"}";
                var newsUrl = "https://api.weixin.qq.com/cgi-bin/material/get_material?access_token={0}";
                newsUrl = string.Format(newsUrl, test_access_token);
                var result = HttpHelper.Post(newsUrl, news, null, "applicaion/json");
                WriteLog.WriteLogToFile("get_material RESULT:" + result);
                return result;
            }
    

      

         /// <summary>
            /// 获取微信用户分组(用户标记)
            /// </summary>
            /// <returns></returns>
            public string gettags()
            {
                var newsUrl = "https://api.weixin.qq.com/cgi-bin/tags/get?access_token={0}";
                newsUrl = string.Format(newsUrl, test_access_token);
                var result = HttpHelper.Get(newsUrl);
                WriteLog.WriteLogToFile("tags RESULT:" + result);
                return result;
            }
    

      

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Text;
    using System.Web;
    
    namespace Common
    {
        public class HttpHelper
        {
            /// <summary>
            /// 发起GET请求
            /// </summary>
            /// <param name="url"></param>
            /// <returns></returns>
            public static string Get(string url)
            {
                var webReq = (HttpWebRequest)WebRequest.Create(new Uri(url));
    
                webReq.KeepAlive = false;
                webReq.Method = "GET";
                webReq.Timeout = 20000;
                webReq.ProtocolVersion = HttpVersion.Version11;
                webReq.ContentType = "application/x-www-form-urlencoded";
    
                var response = (HttpWebResponse)webReq.GetResponse();
                var readStream = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                Char[] read = new Char[256];
                var count = readStream.Read(read, 0, 256);
                var result = string.Empty;
                while (count > 0)
                {
                    result += new String(read, 0, count);
                    count = readStream.Read(read, 0, 256);
                }
                response.Close();
                readStream.Close();
                return result;
            }
    
    
            /// <summary>
            ///  发起POST请求
            /// </summary>
            /// <param name="url"></param>
            /// <param name="postData"></param>
            /// <param name="headers"></param>
            /// <returns></returns>
            public static string Post(string url, string postData, Dictionary<string, string> headers = null, string contentType = null)
            {
                var webReq = (HttpWebRequest)WebRequest.Create(new Uri(url));
    
                Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
                byte[] bytes = encode.GetBytes(postData);
    
                webReq.KeepAlive = false;
                webReq.Method = "POST";
                webReq.Timeout = 20000;
                webReq.ProtocolVersion = HttpVersion.Version11;
                if (contentType == null)
                    webReq.ContentType = "application/x-www-form-urlencoded";
                else
                    webReq.ContentType = contentType;
    
                webReq.ContentLength = bytes.Length;
                webReq.UserAgent = "Mozilla/5.0";
                if (headers != null)
                {
                    foreach (var header in headers)
                        webReq.Headers.Add(header.Key, header.Value);
                }
    
                Stream outStream = webReq.GetRequestStream();
                outStream.Write(bytes, 0, bytes.Length);
                outStream.Close();
    
                var response = (HttpWebResponse)webReq.GetResponse();
                var readStream = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                Char[] read = new Char[256];
                var count = readStream.Read(read, 0, 256);
                var result = string.Empty;
                while (count > 0)
                {
                    result += new String(read, 0, count);
                    count = readStream.Read(read, 0, 256);
                }
                response.Close();
                readStream.Close();
                return result;
            }
    
    
            /// <summary>
            /// 获取Post值
            /// </summary>
            /// <param name="context"></param>
            /// <returns></returns>
            public static string GetPostValue(HttpContext context)
            {
                System.IO.Stream s = context.Request.InputStream;
                int count = 0;
                byte[] buffer = new byte[s.Length];
                StringBuilder builder = new StringBuilder();
                while ((count = s.Read(buffer, 0, buffer.Length)) > 0)
                {
                    builder.Append(Encoding.UTF8.GetString(buffer, 0, count));
                }
                s.Flush();
                s.Close();
                return builder.ToString();
            }
        }
    }
    

      

  • 相关阅读:
    第一篇博文
    重拾javascript系列-JS声明详解之var
    重拾Javascript系列
    AtCoder DP Contest 26题
    DP题
    一众数论
    字符编码
    C# DateTime类型和sqlserver DateTime精度不同
    vs2015中的数据库架构对比工具(New Schema Comparison)
    SqlServer常用语句
  • 原文地址:https://www.cnblogs.com/pudefu/p/7799419.html
Copyright © 2011-2022 走看看