当前微信接口类已实现以下接口,代码上如果不够简洁的,请自行处理。
1.获取access_token
2.获取用户基本信息
3.生成带参数二维码
4.新增永久素材
5.新增临时素材
6.发送微信模版
7.网页授权获取用户基本信息
8.分享朋友圈
关于需要使用poststr字符串可以在asp.net 页面进行poststr配置

//获取素材列表
var jsonitem = new
{
type = "image",
offset = 0,
count = 999
};
JavaScriptSerializer js = new JavaScriptSerializer();
string poststr = js.Serialize(jsonitem);

using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Web;namespace DomainModel.Model
{public class WeChatSMS{//该类有用到数据库表WeChatAccessTokens保存和Log日志,这两个表可以根据自己喜好自行创建/// <summary>/// AppID(应用ID)/// </summary>public static string APPID = "APPID";/// <summary>/// AppSecret(应用密钥)/// </summary>private static string SECRET = "SECRET";#region 微信模板ID/// <summary>/// 兑换码领取成功通知/// </summary>public static string Template = "zjXZufqN-9RguRy5T9QQ9N1ueSEkkcbPiRlzWe0XUmI";/// <summary>/// 校验码通知/// </summary>public static string ConcertTemplate = "tIuE4GJIKO3wAoyt-GawmTi03tdOqlg9CHw0IwcZVsk";/// <summary>/// 领取成功通知/// </summary>public static string GetTemplate = "mpADikrfOojgF7S-_zhTxgqB7F4hy_6qwAYd8f-g_sU";#endregion/// <summary>  /// 获取时间戳  /// </summary>  /// <returns></returns>  public static string GetTimeStamp(){TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);return Convert.ToInt64(ts.TotalSeconds).ToString();}#region access_token/// <summary>/// 获取access_token/// </summary>/// <returns></returns>public static string GetAccess_Token(){using (DB db = DBFactory.CreateDB()){var list = db.WeChatAccessTokens.Where(s => s.APPID == WeChatSMS.APPID && s.ParamName == "access_token").ToList();if (list.Count == 1){if (list[0].UpdateDate.AddHours(2) > DateTime.Now){return list[0].AccessToken;}}}return SetAccess_Token();}/// <summary>/// 获取access_token/// </summary>private static string TOKENURL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}";/// <summary>/// 更新access_token/// </summary>/// <returns></returns>public static string SetAccess_Token(){string url = string.Format(WeChatSMS.TOKENURL,WeChatSMS.APPID, WeChatSMS.SECRET);string json = HttpPost(url, "GET", "");string pattern = "^{\"access_token\":\"(?<access_token>.+?)\"";Regex regex = new Regex(pattern);var match = regex.Match(json);string AccessToken = "";if (match.Success){AccessToken = match.Result("${access_token}");using (DB db = DBFactory.CreateDB()){var list = db.WeChatAccessTokens.Where(s => s.APPID == WeChatSMS.APPID && s.ParamName == "access_token").ToList();if (list.Count == 1){list[0].AccessToken = AccessToken;list[0].UpdateDate = DateTime.Now;}else{WeChatAccessToken item = new WeChatAccessToken();item.APPID = WeChatSMS.APPID;item.ParamName = "access_token";item.AccessToken = AccessToken;item.UpdateDate = DateTime.Now;db.WeChatAccessTokens.InsertOnSubmit(item);}db.SubmitChanges();}}return AccessToken;}#endregion#region jsapi_ticket/// <summary>/// 获取jsapi_ticket/// </summary>private static string JSAPI_TICKET = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi";/// <summary>/// 获取jsapi_ticket/// </summary>/// <returns></returns>public static string GetJsapi_Ticket(){using (DB db = DBFactory.CreateDB()){var list = db.WeChatAccessTokens.Where(s => s.APPID == WeChatSMS.APPID && s.ParamName == "jsapi_ticket").ToList();if (list.Count == 1){if (list[0].UpdateDate.AddHours(2) > DateTime.Now){return list[0].AccessToken;}}}return SetJsapi_Ticket();}/// <summary>/// 更新jsapi_ticket/// </summary>/// <returns></returns>public static string SetJsapi_Ticket(){string JsapiTicket = "";string json = GetJson(JSAPI_TICKET, "GET", "", "分享微信信息异常记录");string pattern = "\"ticket\":\"(?<ticket>.+?)\",";Regex regex = new Regex(pattern);var match = regex.Match(json);if (match.Success){JsapiTicket = match.Result("${ticket}");using (DB db = DBFactory.CreateDB()){var list = db.WeChatAccessTokens.Where(s => s.APPID == WeChatSMS.APPID && s.ParamName == "jsapi_ticket").ToList();if (list.Count == 1){list[0].AccessToken = JsapiTicket;list[0].UpdateDate = DateTime.Now;}else{WeChatAccessToken item = new WeChatAccessToken();item.APPID = WeChatSMS.APPID;item.ParamName = "jsapi_ticket";item.AccessToken = JsapiTicket;item.UpdateDate = DateTime.Now;db.WeChatAccessTokens.InsertOnSubmit(item);}db.SubmitChanges();}}return JsapiTicket;}#endregion#region 素材管理public static string uploadTemporaryUrl = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token={0}&type={1}";/// <summary>/// 新增临时素材/// </summary>/// <param name="type">上传文件类型</param>/// <param name="filePath">文件的绝对路径</param>/// <returns></returns>public static string UploadTemporaryFile(string type, string filePath){return UploadData(uploadTemporaryUrl, "POST", type, filePath, "新增临时素材");                    }public static string uploadPerpetualUrl = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token={0}&type={1}";/// <summary>/// 新增永久素材/// </summary>/// <param name="type">上传文件类型</param>/// <param name="filePath">文件的绝对路径</param>/// <returns></returns>public static string UploadPerpetualFile(string type, string filePath){return UploadData(uploadPerpetualUrl, "POST", type, filePath, "新增永久素材");            }/// <summary>/// 上传永久通用 /// </summary>/// <param name="url"></param>/// <param name="method"></param>/// <param name="type"></param>/// <param name="filePath"></param>/// <param name="category"></param>/// <returns></returns>public static string UploadData(string url, string method, string type, string localPath, string category){string resultJson = "";while (true){string json = UploadVideo.GetUploadVideoResult(url, GetAccess_Token(), type, localPath, "", "");string pattern = "^{\"errcode\":(?<errcode>.+?),";Regex regex = new Regex(pattern);var match = regex.Match(json);if (match.Success){string errcode = match.Result("${errcode}");if (errcode == "-1"){//-1系统繁忙,此时请开发者稍候再试\break;}else if (errcode == "42001"){//42001access_token超时,请检查access_token的有效期,请参考基础支持-获取access_token中,对access_token的详细机制说明
                        SetAccess_Token();}else if (errcode == "40001"){//40001获取access_token时AppSecret错误,或者access_token无效。请开发者认真比对AppSecret的正确性,或查看是否正在为恰当的公众号调用接口
                        SetAccess_Token();}else{LogControls.InsertLogs(json, category);break;}}else{pattern = "\"media_id\":\"(?<media_id>.+?)\",";regex = new Regex(pattern);match = regex.Match(json);if (match.Success){resultJson = json;break;}}}return resultJson;}public static string uploadImageUrl = "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token={0}";/// <summary>/// 新增图文中的图片素材/// </summary>/// <param name="url"></param>/// <param name="filePath"></param>/// <param name="category"></param>/// <returns></returns>public static string UploadImage(string filePath){string resultJson = "";using (WebClient client = new WebClient()){while (true){byte[] b = client.UploadFile(string.Format(uploadImageUrl, GetAccess_Token()), filePath);//调用接口上传文件string json = Encoding.Default.GetString(b);//获取返回值string pattern = "^{\"errcode\":(?<errcode>.+?),";Regex regex = new Regex(pattern);var match = regex.Match(json);if (match.Success){string errcode = match.Result("${errcode}");if (errcode == "-1"){//-1系统繁忙,此时请开发者稍候再试\break;}else if (errcode == "42001"){//42001access_token超时,请检查access_token的有效期,请参考基础支持-获取access_token中,对access_token的详细机制说明
                            SetAccess_Token();}else if (errcode == "40001"){//40001获取access_token时AppSecret错误,或者access_token无效。请开发者认真比对AppSecret的正确性,或查看是否正在为恰当的公众号调用接口
                            SetAccess_Token();}else{LogControls.InsertLogs(json, "新增图文中的图片素材");break;}}else{if (json.Contains("url")){resultJson = json.Replace("\\","");break;}}}}return resultJson;  }/// <summary>/// 获取素材列表/// </summary>public static string BatchgetMaterialUrl = "https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token={0}";/// <summary>/// 获取素材列表/// </summary>/// <returns></returns>public static string GetBatchget_Material(string postDataStr){return GetJson(BatchgetMaterialUrl, "POST", postDataStr, "获取素材列表信息异常");            }#endregion#region 带参数二维码public const string CreateTicketUrl = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={0}";/// <summary>/// 创建二维码ticket/// </summary>public static string GetCreateTicket(string postDataStr){return GetJson(CreateTicketUrl, "POST", postDataStr, "创建二维码ticket异常");}public const string GetTicketUrl = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket={0}";/// <summary>/// 通过ticket换取二维码图片路径/// </summary>/// <param name="ticket"></param>/// <returns></returns>public static string GetTicketImage(string ticket,string path,string filename){try{string uriStr = string.Format(GetTicketUrl, ticket.Replace("\\", ""));HttpWebRequest requestScore = (HttpWebRequest)WebRequest.Create(uriStr);requestScore.Method = "GET";requestScore.ContentType = "image/jpg;charset=UTF-8";HttpWebResponse response = (HttpWebResponse)requestScore.GetResponse();Stream myResponseStream = response.GetResponseStream();Image img = Image.FromStream(myResponseStream);string imagePath = HttpContext.Current.Server.MapPath(path + filename);string dpath = HttpContext.Current.Server.MapPath(path);if (!Directory.Exists(dpath)){Directory.CreateDirectory(dpath);}img.Save(imagePath);myResponseStream.Close();return path + filename;}catch (Exception ex){LogControls.InsertLogs(ex.ToString() + "\r\n" + ticket, "微信二维码图片异常");return "";}}#endregion#region 发送模板通用/// <summary>/// 接口调用请求说明/// </summary>private static string TEMPLATESEND = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=";/// <summary>/// 微信发送模板信息/// </summary>/// <param name="postDataStr"></param>/// <returns></returns>public static void SendTemplate(string postDataStr){string Url = TEMPLATESEND + GetAccess_Token();SendIteration(Url, "POST", postDataStr);          }/// <summary>/// 迭代发送/// 42001:access_token超时,请检查access_token的有效期,请参考基础支持-获取access_token中,对access_token的详细机制说明/// </summary>/// <param name="Url"></param>/// <param name="Method"></param>/// <param name="postDataStr"></param>/// <returns></returns>private static void SendIteration(string Url, string Method, string postDataStr){var json = HttpPost(Url, Method, postDataStr);string pattern = "^{\"errcode\":(?<errcode>.+?),\"";Regex regex = new Regex(pattern);var match = regex.Match(json);string errcode = "";if (match.Success){errcode = match.Result("${errcode}");if (errcode == "42001"){//42001access_token超时,请检查access_token的有效期,请参考基础支持-获取access_token中,对access_token的详细机制说明Url = TEMPLATESEND + SetAccess_Token();SendIteration(Url, Method, postDataStr);}                else if (errcode == "40001"){//40001获取access_token时AppSecret错误,或者access_token无效。请开发者认真比对AppSecret的正确性,或查看是否正在为恰当的公众号调用接口Url = TEMPLATESEND + SetAccess_Token();SendIteration(Url, Method, postDataStr);}else if (errcode == "43004"){//43004需要接收者关注
                }else if (errcode != "0"){LogControls.InsertLogs(json, "体彩微信信息异常记录");}}}#endregion#region 获取用户基本信息/// <summary>/// 获取用户基本资料/// </summary>public static string UserinfoUrl = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=";/// <summary>/// 获取用户基本信息/// </summary>/// <param name="postDataStr"></param>public static string GetUserInfo(string OPENID){string Url = UserinfoUrl + GetAccess_Token() + "&openid=" + OPENID + "&lang=zh_CN";string json = HttpPost(Url, "GET", "");Regex rg = new Regex( "^{\"errcode\":(?<errcode>.+?),\"");Match match = rg.Match(json);if (match.Success){while (true){string errcode = match.Result("${errcode}");if (errcode == "42001"){//42001access_token超时,请检查access_token的有效期,请参考基础支持-获取access_token中,对access_token的详细机制说明
                        WeChatSMS.SetAccess_Token();GetUserInfo(OPENID);}else if (errcode == "40001"){//40001获取access_token时AppSecret错误,或者access_token无效。请开发者认真比对AppSecret的正确性,或查看是否正在为恰当的公众号调用接口
                        WeChatSMS.SetAccess_Token();GetUserInfo(OPENID);}else{LogControls.InsertLogs(json, "分享获取用户信息异常");json = "";break;}LogControls.InsertLogs(json, "分享获取用户信息异常--循环");}}return json;}#endregion#region 网页授权获取用户基本信息public static string WebAccreditUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope={2}&state={3}#wechat_redirect";/// <summary>/// 网页授权获取用户基本信息链接(redirect_uri/?code=CODE&state=STATE)/// </summary>/// <param name="url">授权后重定向的回调链接地址,请使用urlencode对链接进行处理</param>/// <param name="scope">应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息)</param>/// <param name="state">重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节</param>/// <returns></returns>public static string GetWebAccreditUrl(string redirect_uri, string scope, string state){return string.Format(WebAccreditUrl, APPID, redirect_uri, scope, state);}/// <summary>/// 通过code换取网页授权access_token/// </summary>public static string WebAccess_tokenUrl = " https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code";/// <summary>/// 通过code换取网页授权access_token/// </summary>/// <param name="code"></param>/// <returns></returns>public static string GetWebAccess_token(string code){string url = string.Format(WebAccess_tokenUrl, APPID, SECRET, code);return GetJsonByCode(url, "GET", "", "通过code换取网页授权access_token异常");}/// <summary>/// 刷新access_token/// </summary>public static string WebRefreshTokenUrl = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid={0}&grant_type=refresh_token&refresh_token={1}";/// <summary>/// 刷新access_token,refresh_token有效期为30天,当refresh_token失效之后,需要用户重新授权。/// </summary>public static string RefreshToken(string refresh_token){string url = string.Format(WebRefreshTokenUrl, APPID, refresh_token);return GetJsonByCode(url, "GET", "", "刷新access_token异常");}/// <summary>/// 拉取用户信息(需scope为 snsapi_userinfo)/// </summary>public static string WebUserinfo = "https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}&lang=zh_CN";/// <summary>/// 拉取用户信息(需scope为 snsapi_userinfo)/// </summary>/// <param name="access_token"></param>/// <returns></returns>public static string GetWebUserInfo(string access_token){string url = string.Format(WebUserinfo, access_token, APPID);return GetJsonByCode(url, "GET", "", "拉取用户信息(需scope为 snsapi_userinfo)异常");}/// <summary>/// 检验授权凭证(access_token)是否有效/// </summary>public static string WebAccess_TokenIsValidUrl = "https://api.weixin.qq.com/sns/auth?access_token={0}&openid={1}";/// <summary>/// 检验授权凭证(access_token)是否有效/// </summary>/// <param name="access_token"></param>/// <param name="openID"></param>/// <returns></returns>public static string ValidAccess_Token(string access_token, string openID){string url = string.Format(WebAccess_TokenIsValidUrl, access_token, openID);return GetJsonByCode(url, "GET", "", "检验授权凭证(access_token)是否有效异常");}#endregion/// <summary>/// 通用接口请求/// </summary>/// <param name="Url"></param>/// <param name="Method">POST或者GET</param>/// <param name="postDataStr"></param>/// <returns></returns>public static string HttpPost(string Url, string Method, string postDataStr){HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);request.Method = Method;request.ContentType = "application/x-www-form-urlencoded";if (string.IsNullOrWhiteSpace(postDataStr) == false){byte[] dataArray = Encoding.UTF8.GetBytes(postDataStr);request.ContentLength = dataArray.Length;Stream dataStream = request.GetRequestStream();dataStream.Write(dataArray, 0, dataArray.Length);dataStream.Close();}try{HttpWebResponse response = (HttpWebResponse)request.GetResponse();StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);String res = reader.ReadToEnd();reader.Close();return res;}catch (Exception e){return e.Message + e.ToString();}}/// <summary>/// 获取微信返回json语句/// </summary>/// <param name="objUrl"></param>/// <param name="Method"></param>/// <param name="postDataStr"></param>/// <param name="category"></param>/// <returns></returns>public static string GetJson(string objUrl, string Method, string postDataStr, string category){string resultJson = "";while (true){string url = string.Format(objUrl, GetAccess_Token());string json = HttpPost(url, Method, postDataStr);string pattern = "^{\"errcode\":(?<errcode>.+?),";Regex regex = new Regex(pattern);var match = regex.Match(json);if (match.Success){string errcode = match.Result("${errcode}");if (errcode == "-1"){//-1系统繁忙,此时请开发者稍候再试\break;}else if (errcode == "42001"){//42001access_token超时,请检查access_token的有效期,请参考基础支持-获取access_token中,对access_token的详细机制说明
                        SetAccess_Token();}else if (errcode == "40001"){//40001获取access_token时AppSecret错误,或者access_token无效。请开发者认真比对AppSecret的正确性,或查看是否正在为恰当的公众号调用接口
                        SetAccess_Token();}else if (errcode == "0"){resultJson = json;break;}else{LogControls.InsertLogs(json, category);break;}}else{resultJson = json;break;}}return resultJson;}/// <summary>/// 获取微信返回json语句/// </summary>/// <param name="url"></param>/// <param name="Method"></param>/// <param name="postDataStr"></param>/// <param name="category"></param>/// <returns></returns>public static string GetJsonByCode(string url, string Method, string postDataStr, string category){string resultJson = "";while (true){string json = HttpPost(url, Method, postDataStr);string pattern = "^{\"errcode\":(?<errcode>.+?),";Regex regex = new Regex(pattern);var match = regex.Match(json);if (match.Success){string errcode = match.Result("${errcode}");if (errcode == "-1"){//-1系统繁忙,此时请开发者稍候再试\break;}else if (errcode == "0"){resultJson = json;break;}else if (errcode == "40029"){//40029不合法的oauth_code  Code无效错误resultJson = json;break;}else if (errcode == "40003"){//40003不合法的OpenID,请开发者确认OpenID(该用户)是否已关注公众号,或是否是其他公众号的OpenIDresultJson = json;break;}else{LogControls.InsertLogs(json, category);break;}}else{resultJson = json;break;}}return resultJson;}}/// <summary>/// 微信文件上传通用类/// </summary>public static class UploadVideo{/// <summary>  /// 填充表单信息的Stream  /// </summary>  /// <param name="formData"></param>  /// <param name="stream"></param>  public static void FillFormDataStream(this Dictionary<string, string> formData, Stream stream){string dataString = GetQueryString(formData);var formDataBytes = formData == null ? new byte[0] : Encoding.UTF8.GetBytes(dataString);stream.Write(formDataBytes, 0, formDataBytes.Length);stream.Seek(0, SeekOrigin.Begin);//设置指针读取位置
        }public static string GetUploadVideoResult(string urlTemplate, string accessToken, string type, string filePath, string title, string introduction)  {//"https://api.weixin.qq.com/cgi-bin/material/add_material?access_token={0}&type={1}"var url = string.Format(urlTemplate, accessToken, type);  var fileDictionary = new Dictionary<string, string>();  fileDictionary["media"] = filePath;if (title != ""){fileDictionary["description"] = string.Format("{{\"title\":\"{0}\", \"introduction\":\"{1}\"}}", title, introduction);}string returnText = string.Empty;  Dictionary<string, string> postDataDictionary = null;  using (MemoryStream ms = new MemoryStream())  {  postDataDictionary.FillFormDataStream(ms); //填充formData  returnText = HttpPost(url, null, ms, fileDictionary, null, null, 1200000);  }  return returnText;  }  /// <summary>  /// 组装QueryString的方法  /// 参数之间用&连接,首位没有符号,如:a=1&b=2&c=3  /// </summary>  /// <param name="formData"></param>  /// <returns></returns>  public static string GetQueryString(this Dictionary<string, string> formData)  {  if (formData == null || formData.Count == 0)  {  return "";  }  StringBuilder sb = new StringBuilder();  var i = 0;  foreach (var kv in formData)  {  i++;  sb.AppendFormat("{0}={1}", kv.Key, kv.Value);  if (i < formData.Count)  {  sb.Append("&");  }  }  return sb.ToString();  }  /// <summary>  /// 根据完整文件路径获取FileStream  /// </summary>  /// <param name="fileName"></param>  /// <returns></returns>  public static FileStream GetFileStream(string fileName)  {  FileStream fileStream = null;  if (!string.IsNullOrEmpty(fileName) && File.Exists(fileName))  {  fileStream = new FileStream(fileName, FileMode.Open);  }  return fileStream;  }  /// <summary>  /// 使用Post方法获取字符串结果  /// </summary>  /// <param name="url"></param>  /// <param name="cookieContainer"></param>  /// <param name="postStream"></param>  /// <param name="fileDictionary">需要上传的文件,Key:对应要上传的Name,Value:本地文件名</param>  /// <param name="timeOut">超时</param>  /// <returns></returns>  public static string HttpPost(string url, CookieContainer cookieContainer = null, Stream postStream = null, Dictionary<string, string> fileDictionary = null, string refererUrl = null, Encoding encoding = null, int timeOut = 1200000)  {  HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);  request.Method = "POST";  request.Timeout = timeOut;  #region 处理Form表单文件上传  var formUploadFile = fileDictionary != null && fileDictionary.Count > 0;//是否用Form上传文件  if (formUploadFile)  {  //通过表单上传文件  postStream = postStream ?? new MemoryStream();  string boundary = "----" + DateTime.Now.Ticks.ToString("x");  //byte[] boundarybytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");  string fileFormdataTemplate = "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: application/octet-stream\r\n\r\n";  string dataFormdataTemplate = "\r\n--" + boundary +  "\r\nContent-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";  foreach (var file in fileDictionary)  {  try  {  var fileName = file.Value;  //准备文件流  using (var fileStream = GetFileStream(fileName))  {  string formdata = null;  if (fileStream != null)  {  //存在文件  formdata = string.Format(fileFormdataTemplate, file.Key, /*fileName*/ Path.GetFileName(fileName));  }  else  {  //不存在文件或只是注释  formdata = string.Format(dataFormdataTemplate, file.Key, file.Value);  }  //统一处理  var formdataBytes = Encoding.UTF8.GetBytes(postStream.Length == 0 ? formdata.Substring(2, formdata.Length - 2) : formdata);//第一行不需要换行  postStream.Write(formdataBytes, 0, formdataBytes.Length);  //写入文件  if (fileStream != null)  {  byte[] buffer = new byte[1024];  int bytesRead = 0;  while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)  {  postStream.Write(buffer, 0, bytesRead);  }  }  }  }  catch (Exception ex)  {  throw ex;  }  }  //结尾  var footer = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");  postStream.Write(footer, 0, footer.Length);  request.ContentType = string.Format("multipart/form-data; boundary={0}", boundary);  }  else  {  request.ContentType = "application/x-www-form-urlencoded";  }  #endregion  request.ContentLength = postStream != null ? postStream.Length : 0;  request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";  request.KeepAlive = true;  if (!string.IsNullOrEmpty(refererUrl))  {  request.Referer = refererUrl;  }  request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36";  if (cookieContainer != null)  {  request.CookieContainer = cookieContainer;  }  #region 输入二进制流  if (postStream != null)  {  postStream.Position = 0;  //直接写入流  Stream requestStream = request.GetRequestStream();  byte[] buffer = new byte[1024];  int bytesRead = 0;  while ((bytesRead = postStream.Read(buffer, 0, buffer.Length)) != 0)  {  requestStream.Write(buffer, 0, bytesRead);  }  //debug  postStream.Seek(0, SeekOrigin.Begin);  StreamReader sr = new StreamReader(postStream);  var postStr = sr.ReadToEnd();  postStream.Close();//关闭文件访问              }  #endregion  HttpWebResponse response = (HttpWebResponse)request.GetResponse();  if (cookieContainer != null)  {  response.Cookies = cookieContainer.GetCookies(response.ResponseUri);  }  using (Stream responseStream = response.GetResponseStream())  {  using (StreamReader myStreamReader = new StreamReader(responseStream, encoding ?? Encoding.GetEncoding("utf-8")))  {  string retString = myStreamReader.ReadToEnd();  return retString;  }  }  } }
}

分享朋友圈用到了一般应用程序public class wxconfig{public string appId { get; set; }public string timestamp { get; set; }public string nonceStr { get; set; }public string jsapiticke { get; set; }public string url { get; set; }public string signature{get{string temp = Cryptography.SHA1_Hash("jsapi_ticket=" + jsapiticke + "&noncestr="+ nonceStr + "&timestamp=" + timestamp + "&url=" + url).ToLower();return temp;} }}/// <summary>/// Getjsapi 的摘要说明/// </summary>public class Getjsapi : IHttpHandler{public void ProcessRequest(HttpContext context){context.Response.ContentType = "text/plain";wxconfig item = new wxconfig();item.jsapiticke = WeChatSMS.GetJsapi_Ticket();item.url = context.Request.Params["urlparam"];item.appId = WeChatSMS.APPID;item.timestamp = WeChatSMS.GetTimeStamp();item.nonceStr = ("GGVi4C3VM0P37wVU");JavaScriptSerializer js = new JavaScriptSerializer();string json = js.Serialize(item);context.Response.Write(json);}public bool IsReusable{get{return false;}}}页面配置代码<script>$.ajax({type: "POST",url: "/ashx/Getjsapi.ashx",data: { urlparam: "http://www.chaoyundong.com/mobile/share/sharetest.aspx" },cache: false,async: false, //是否ajax同步
            success: function (data) {var item = JSON.parse(data);//console.log(item);
                wx.config({debug: false,appId: item.appId,timestamp: item.timestamp,nonceStr: item.nonceStr,signature: item.signature,jsApiList: ['checkJsApi','onMenuShareTimeline','onMenuShareAppMessage']});wx.ready(function () {//分享到朋友圈
                    wx.onMenuShareTimeline({title: '测试哈哈哈', // 分享标题link: 'http://movie.douban.com/subject/25785114/', // 分享链接imgUrl: 'http://demo.open.weixin.qq.com/jssdk/images/p2166127561.jpg', // 分享图标
                        success: function (res) {//console.log(res);alert('112234');},cancel: function () {alert('3333333');// 用户取消分享后执行的回调函数
                        }});//分享到朋友
                    wx.onMenuShareAppMessage({title: '测试哈哈哈', // 分享标题link: 'http://movie.douban.com/subject/25785114/', // 分享链接imgUrl: 'http://demo.open.weixin.qq.com/jssdk/images/p2166127561.jpg', // 分享图标
                        success: function (res) {//console.log(res);alert('112234');},cancel: function () {alert('3333333');// 用户取消分享后执行的回调函数
                        }});});                }});        </script>

转载于:https://www.cnblogs.com/caiyt/p/5855741.html

asp.net C# 实现微信接口权限开发类相关推荐

  1. 【JEECG技术文档】JEECG 接口权限开发及配置使用说明

    1.功能介绍 通过接口配置实现,对接口的访问权限控制和数据权限控制,接口时REST接口,接口权限认证机制使用Json web token (JWT) 接口权限调用流程: (1)通过接口用户的用户名密码 ...

  2. php微信公众平台开发类,php微信公众平台开发类实例

    本文实例讲述了php微信公众平台开发类.分享给大家供大家参考.具体分析如下: ThinkWechat.php类文件如下: class Wechat { /** * 微信推送过来的数据或响应数据 * @ ...

  3. php微信接口怎么开发,php微信公众平台配置接口开发程序的方法实例详解

    这篇文章主要为大家详细介绍了php微信公众平台配置接口开发程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 在阅读这篇文章之前你要做以下的准备: 1.注册一个订阅号(通过微信公众平台https: ...

  4. 视频教程-微信公众平台开发实战PHP版-微信开发

    微信公众平台开发实战PHP版 互联商通创始人/架构师, 在IT领域摸爬滚打20年的全栈老程序员(架构师.培训讲师).熟悉iOS.Android及LNMP的架构下快速开发互联网相关项目.精通微信和支付宝 ...

  5. 微信接入探秘(一)——从零认识微信接口

    本文出处:http://blog.csdn.net/chaijunkun/article/details/53385088,转载请注明.由于本人不定期会整理相关博文,会对相应内容作出完善.因此强烈建议 ...

  6. 微信公众平台开发书籍推荐

    关键字:微信开发图书 微信公众平台开发书籍 微信图书 微信开发书籍 微信图书推荐 微信开发图书推荐 本文介绍了当前图书市场上最主要的微信公众平台开发类书籍,并对每本书的特色做了简要点评,供有需要购买的 ...

  7. 微信小程序开发代理展示销售网站源码织梦模板(手机同步)

    本套织梦模板采用织梦最新内核开发的模板,这款模板使用范围极广,不仅仅局限于一类型的企业,小程序网站.微信小程序开发类的网站都可以用该模板. 你只需要把图片和文章内容换成你的即可,颜色都可以修改,改完让 ...

  8. ASP.NET MVC4 微信公众号开发之网页授权(一):搭建基础环境

    首先你得注册并认证一个个人或企业的微信公众号===服务号从而确保获得以下接口权限: 然后打开公众号设置里的功能设置里找到业务域名和网页授权域名分别填上你的域名(注:已备案的域名),如下图所示: 到这里 ...

  9. [转]微信公众平台(测试接口)开发前的准备工作(转载自walkingmanc的专栏)

    本文转自:http://blog.csdn.net/jiangweicpu/article/details/21228949 http://blog.csdn.net/walkingmanc/arti ...

最新文章

  1. CSS中浮动布局float(小米布局案例、导航栏案例、overflow)
  2. ASP.NET Core Web Razor Pages系列教程一:使用ASP.NET Core 创建一个Razor Pages网络应用程序
  3. 轻快的VIM(五):复制
  4. Codeforces Beta Round #17 D. Notepad (数论 + 广义欧拉定理降幂)
  5. Deepin15.7 Android8.1 编译 以及问题解决
  6. Another Rejection from University of Oxford MRes in Engineering
  7. 孕妇可以在计算机教室待吗,电脑对孕妇有辐射吗?孕妇使用电脑的注意事项
  8. 【堆内存】动态图+代码五分钟轻松理解学会
  9. GDAL库读取Envisat ASAR数据
  10. 家用无线路由器的相关设置
  11. eclipse启动时间很慢的调优解决
  12. 一线城市的繁荣vs年轻人的梦想?
  13. TI C6000 数据存储处理与性能优化
  14. 【转】使用并口控制笔记本软驱中的电机
  15. 大学计算机信息技术教程电子书资源,教与学中用好教材《大学计算机信息技术教程》.pdf...
  16. 【原创】无线LED条屏信息报警项目---2012.05
  17. 微信小程序开发之视频上传
  18. 随手写了一个鸡肋的二叉树
  19. 小程序入门第二课 — 组件与WXML语法
  20. 百度地图有了这么有趣的功能

热门文章

  1. Eclipse 官宣,干掉 VS Code !
  2. 排名前 16 的 Java 工具类,哪个你没用过?
  3. 为什么SpringBoot的 jar 可以直接运行?
  4. 高效开发:IntelliJ IDEA天天用,这些Debug技巧你都知道?
  5. Mybatis:颠覆你心中对事务的理解
  6. 终于有人把中台说清楚了
  7. 我用2年时间从财务到数据分析师!
  8. 【廖雪峰python进阶笔记】函数式编程
  9. 53位作者只有1个华人?NeurIPS 2021大奖揭晓,Google、DeepMind、斯坦福百花齐放
  10. 清华硕士眼中的2021届算法岗秋招