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. Android Studio列表用法之一:ListView图文列表显示(实例)

    前言: ListView这个列表控件在Android中是最常用的控件之一,几乎在所有的应用程序中都会使用到它. 目前正在做的一个记账本APP中就用到了它,主要是用它来呈现收支明细,是一个图文列表的呈现 ...

  2. 给你一个全自动的屏幕适配方案(基于SW方案)!—— 解放你和UI的双手

    Calces系列相关文章:Calces自动实现Android组件化模块构建 前言 屏幕适配一直是移动端开发热议的问题,但是适配方案往往在实际开发的时候会和UI提供的设计稿冲突.本文主要是基于官方推荐的 ...

  3. 使用反射修改final属性

    情型1:static final属性,无法修改其值. package m5.d7; import java.lang.reflect.Field; public class FieldTest { p ...

  4. Spring Boot 使用 ServletFileUpload上传文件失败,upload.parseRequest(request)为空

    使用Apache Commons FileUpload组件上传文件时总是返回null,调试发现ServletFileUpload对象为空,在Spring Boot中有默认的文件上传组件,在使用Serv ...

  5. Shell脚本应用(if语句的结构)

    1.测试:检测表达式是否成立,成立则返回值为0,否则为非0 方法: 1)test  表达式 2)[ 表达式 ] 2.文件测试: -d:是否为目录 -f:是否为文件 -e:是否存在 -r:是否有读取权限 ...

  6. C#的深拷贝和浅拷贝

    也许会有人这样解释C# 中浅拷贝与深拷贝区别: 浅拷贝是对引用类型拷贝地址,对值类型直接进行拷贝. 不能说它完全错误,但至少还不够严谨.比如:string 类型咋说? 其实,我们可以通过实践来寻找答案 ...

  7. 阿里巴巴Web前端面试的一道JS题目,求解答!!!

    题目大概是这种: function outer(){ return inner; var inner = "a"; function inner(){}; inner = 9; } ...

  8. 转:// 再说 Oracle RAC services

    应用程序工作负载在Oracle 10g中可以被定为services,也称之为服务,能够在单实例中使用,也能够在RAC中单独使用和管理.因此整个数据库负载能够被分割为多个不同的services,通过管理 ...

  9. 转载 SpringMVC详解(一)------入门实例

    目录 1.什么是 SpringMVC ? 2.创建 web 工程,并导入相应的 jar 包. 3.新建 SpringMVC 全局配置文件 4.在 web.xml 文件中配置前端过滤器 5.编写处理器  ...

  10. strlen的容易tle情况

    for(int i=1;i<=strlen(**);i++ 这很容易tle 因为 strlen很大 int m=strlen(**)