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("\r\n--" + boundary + "\r\n");
byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n"); //请求头部信息
StringBuilder sbHeader =
new StringBuilder(
string.Format(
"Content-Disposition:form-data;name=\"media\";filename=\"{0}\"\r\nContent-Type:application/octet-stream\r\n\r\n",
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();
}
}
}

  

C# 调用微信接口上传素材和发送图文消息的更多相关文章

  1. java 调用Spring接口上传文件及其他参数填充

    第一步:在Spring配置中添加以下内容 <!-- 配置MultipartResolver 用于文件上传 使用spring的CommosMultipartResolver --> < ...

  2. 调用微信JS上传照片接口上传图片

    public ActionResult UploadImge(string serverId) { var headPath = "/UploadImage/" + DateTim ...

  3. java微信接口之四—上传素材

    一.微信上传素材接口简介 1.请求:该请求是使用post提交地址为: https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=A ...

  4. 微信上传素材 {"errcode":41005,"errmsg":"media data missing"} 解决方法和思路

    哎lol 连跪两把  就来写写博客    今天遇到一个问题 ,微信公众号开发上传素材是提示报错   41005    errcode":41005,"errmsg":&q ...

  5. Android仿微信图片上传,可以选择多张图片,缩放预览,拍照上传等

    仿照微信,朋友圈分享图片功能 .可以进行图片的多张选择,拍照添加图片,以及进行图片的预览,预览时可以进行缩放,并且可以删除选中状态的图片 .很不错的源码,大家有需要可以下载看看 . 微信 微信 微信 ...

  6. android之使用GridView+仿微信图片上传功能

    由于工作要求最近在使用GridView完成图片的批量上传功能,我的例子当中包含仿微信图片上传.拍照.本地选择.相片裁剪等功能,如果有需要的朋友可以看一下,希望我的实际经验能对您有所帮助. 直接上图,下 ...

  7. C# 调用微信接口的代码

    调用微信接口前需要准备的内容. 1.微信公众平台的appid 2.微信公众平台的secret 3..获取tokenid 4.获取ticket 5.生成签名的随机串 6.生成签名的时间戳 7.生成签名 ...

  8. C# 关于调用微信接口的代码

    调用微信接口前需要准备的内容. 1.微信公众平台的appid 2.微信公众平台的secret 3..获取tokenid 4.获取ticket 5.生成签名的随机串 6.生成签名的时间戳 7.生成签名 ...

  9. 微信图片上传,遇到一个神奇的jgp

    微信图片上传,获取图片base64遇到一个神奇的   jgp var imgFn = function (event) { event.preventDefault(); var id = '#'+$ ...

随机推荐

  1. Cordova/Ionic开发的Android APP启用Chrome Inspect调试的方法

    Cordova/Ionic开发的Android APP,需要启用WebView的调试模式,才可以在Chrome浏览器中输入chrome://Inspect,然后使用大家熟悉的开发者工具进行调试.不启用 ...

  2. (后台)There is already 'jy.controller.jyadmin.JyDealerPackingReturnController' bean method

    项目报了一个错误,百度翻译了一下: “我已经有jy.controller.jyadmin.jydealerpackingreturncontroller豆方法公共org.springframework ...

  3. JAVA学习笔记:注释、变量的声明和定义、

    本文内容: 注释 变量的声明和定义 成员变量和局部变量 首发时间:2018-03-16 15:59 注释: 单行注释:// 多行注释:/* - */ 变量: 变量是内存中的一个存储区域,变量的定义就是 ...

  4. DirectX SDK (June 2010)安装错误S1023,解决方法

    转自:http://hi.baidu.com/rootcat/item/6730f15f85e2c1958c12ed81 DirectX SDK (June 2010)安装错误S1023,解决方法 导 ...

  5. maven(七),本地仓库

    运行机制: 在pom.xml文件中添加依赖jar包时,首先会从本地仓库查找,如果本地仓库不存在,就从中央仓库下载到本地仓库,中央仓库是maven默认的远程仓库 仓库坐标 eclipse默认会在wind ...

  6. 3.5Python数据处理篇之Numpy系列(五)---numpy文件的存取

    目录 目录: (一)以文本形式存取 1.说明: 2.语法解释: 3.实例(以.csv文件为例) 4.效果展示 (二)以任意的形式存取 1.说明: 2.语法解释: 3.实例(以.bat二进制文件为例) ...

  7. January 09th, 2018 Week 02nd Tuesday

    Use the smile to change the world. Don't let the world change your smile. 用你的笑容去改变这个世界,别让这个世界改变了你的笑容 ...

  8. Eclipse 报错The method xxx of type must override a superclass method、Description Resource Path Location Type Java compiler level does not match the version of the installed Java project facet

    问题: 如上图, 没改钱@Override会报错The method run() of type must override a superclass method 原因: java1.5中继承接口是 ...

  9. 简单使用Vuex步骤及注意事项

    使用Vuex的步骤: (1)安装: 1.使用npm安装: npm install vuex --save 2.使用script标签引入 <script src="/path/to/vu ...

  10. 计算器和Menu

    MainActivity.java import android.app.Activity; import android.content.Intent; import android.os.Bund ...