您的位置:首页 > 移动开发 > 微信开发

C# 微信开发 微信号接入 (附完整源码)(1)

2016-03-02 14:48 417 查看
1. 首先配置微信服务器设置a) 企业号配置信息 (详见:ConfigurationManager类)b) 企业号服务器配置: ConfigurationManager类c) 验证响应服务器数据配置 (WeiXin类中Auth())企业号 基础API 实现
public class ConfigurationManager
{

//微信企业号iD
//服务器url 验证口令
//微信iD
public static string WaiURL = "http://125.1*******4:100/";
public static string CorpToken = "我的weixin";

public static string CorpId = "wx20dfd******4e6";
public static string Srcret = "UMuGX35QgE1ra*********bPWoUHwM6OYj_vbtN7";

public static string EncodingAESKey = "oBqi7vnYgviR6sCJKqQh6Us******YIA";
ublic static string Agentid = "3";
}
 public class GetAccessToken
{
/// <summary>
/// 获取Access_token的值
/// </summary>
/// <returns></returns>
public static string GetAccess_token()
{
//1.有没有Token值
//if (ExistsToken() != "")
//{
// return ExistsToken();
//}
//2.
string appid = ConfigurationManager.AppSettings["CorpId"];//从配置文件获取Token
string AppSecret = ConfigurationManager.AppSettings["Srcret"];//从配置文件获取Token
string url = String.Format("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={0}&corpsecret={1}", appid, AppSecret);
string access_tokenjson = HttpRequestUtil.RequestUrl(url);
LogUtil.WriteLog("原始access_tokenjson为: " + access_tokenjson);
access_tokenjson = "[" + access_tokenjson + "]";
if (access_tokenjson != "")
{
JArray ja = (JArray)JsonConvert.DeserializeObject(access_tokenjson);
string Error = "";
try
{
if (access_tokenjson.Contains("errcode"))
{
Error = ja[0]["errcode"].ToString();
}
}
catch (Exception ex)
{
LogUtil.WriteLog("获取access_token,未获取到错误信息" + ex.Message.ToString());
}
string access_token = ja[0]["access_token"].ToString();
string expires_in = ja[0]["expires_in"].ToString();
if (expires_in == "7200")
{
LogUtil.WriteLog("access_tokenjson 获取成功!");
}
else {
LogUtil.WriteLog("access_tokenjson 获取失败!");
return "";
}
LogUtil.WriteToken(access_token);
WriteTokenTxt(access_token);
return access_token;
}
LogUtil.WriteLog(DateTime.Now.ToString() + "access_tokenjson为: " + access_tokenjson);
return "";
}/// <summary>
/// 写入Token 和 时间校验 值
/// </summary>
/// <param name="AccessToken"></param>
public static void WriteTokenTxt(string AccessToken)
{
//写入Token
string StartTime = DateTime.Now.ToString();
StreamWriter sw = new StreamWriter("C:\\WeiXinLog\\AccessToken.txt");//无就创建,有则覆盖
sw.WriteLine(AccessToken);
sw.Close();//写入Datetime
StreamWriter sw1 = new StreamWriter("C:\\WeiXinLog\\AccessTokenDT.txt");//无就创建,有则覆盖
sw1.WriteLine(DateTime.Now.ToString());
sw1.Close();
}/// <summary>
/// 是否已存在Token值
/// </summary>
public static string ExistsToken()
{
string AccessToken = ""; //读取
try
{
StreamReader re = new StreamReader("C:\\WeiXinLog\\AccessToken.txt");
AccessToken = re.ReadLine();
re.Close();
if (AccessToken != "")
{
if (Time1() == true)
{
return AccessToken;
}
}}
catch (Exception ex)
{
return "";
}return "";
}/// <summary>
/// 是否已存在时间差值
/// </summary>
public static string ExistsTokenDT()
{
string AccessTokenDT = ""; //读取
try
{
StreamReader re = new StreamReader("C:\\WeiXinLog\\AccessTokenDT.txt");
AccessTokenDT = re.ReadLine();
re.Close();if (AccessTokenDT != "")
{
return AccessTokenDT;
}
}
catch (Exception ex)
{
return "";
}
return "";
}//计算时间差
public static bool Time1()
{
//计算时间差
//DateTime startTime = Convert.ToDateTime("2015-10-19 15:43:08");string strTime = ExistsTokenDT();
DateTime startTime = Convert.ToDateTime(strTime);
DateTime endTime = Convert.ToDateTime(DateTime.Now.ToString());
TimeSpan ts = endTime - startTime;
LogUtil.WriteLog("相差的总时间 用秒数表示" + ts.TotalSeconds);
if (ts.TotalSeconds > 7200)
{
LogUtil.WriteLog(DateTime.Now.ToString() + " 时时间过期,原始时间为:" + strTime);
return false;
}
else
{
return true;
}
}#region
/// <summary>
/// 验证Token是否过期
/// </summary>
public static bool TokenExpired(string access_token)
{
string jsonStr = HttpRequestUtil.RequestUrl(string.Format("https://api.weixin.qq.com/cgi-bin/menu/get?access_token={0}", access_token));if (jsonStr == "42001")
{
return true;
}
return false;
}/// <summary>
/// 创建文件夹
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
private static bool CreateFolder(string path)
{
if (Directory.Exists(path) == false)
{
//判断文件夹是否存在
Directory.CreateDirectory(path);
return true;
}
else
{
return false;
}
}/// <summary>
/// 读取文本Token的值
/// </summary>
/// <returns></returns>
public static string ReaderToken()
{
string myStr = "";
using (FileStream fsRead = new FileStream(@"C:\\WeiXinLog\\AccessToken.txt", FileMode.Open))
{
int fsLen = (int)fsRead.Length;
byte[] heByte = new byte[fsLen];
int r = fsRead.Read(heByte, 0, heByte.Length);
myStr = System.Text.Encoding.UTF8.GetString(heByte);
Console.WriteLine(myStr);
Console.ReadKey();
}
return myStr;
}
#endregion
}
  
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Web;namespace WeiXinProject.Como
{
/// <summary>
/// HTTP请求工具类
/// </summary>
public class HttpRequestUtil
{
#region 请求Url
#region 请求Url,不发送数据
/// <summary>
/// 请求Url,不发送数据
/// </summary>
public static string RequestUrl(string url)
{
return RequestUrl(url, "POST");
}
#endregion#region 请求Url,不发送数据
/// <summary>
/// 请求Url,不发送数据
/// </summary>
public static string RequestUrl(string url, string method)
{
// 设置参数
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
CookieContainer cookieContainer = new CookieContainer();
request.CookieContainer = cookieContainer;
request.AllowAutoRedirect = true;
request.Method = method;
request.ContentType = "text/html";
request.Headers.Add("charset", "utf-8");//发送请求并获取相应回应数据
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
//直到request.GetResponse()程序才开始向目标网页发送Post请求
Stream responseStream = response.GetResponseStream();
StreamReader sr = new StreamReader(responseStream, Encoding.UTF8);
//返回结果网页(html)代码
string content = sr.ReadToEnd();
return content;
}
#endregion#region 请求Url,发送数据
/// <summary>
/// 请求Url,发送数据
/// </summary>
public static string PostUrl(string url, string postData)
{
byte[] data = Encoding.UTF8.GetBytes(postData);// 设置参数
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
CookieContainer cookieContainer = new CookieContainer();
request.CookieContainer = cookieContainer;
request.AllowAutoRedirect = true;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
Stream outstream = request.GetRequestStream();
outstream.Write(data, 0, data.Length);
outstream.Close();//发送请求并获取相应回应数据
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
//直到request.GetResponse()程序才开始向目标网页发送Post请求
Stream instream = response.GetResponseStream();
StreamReader sr = new StreamReader(instream, Encoding.UTF8);
//返回结果网页(html)代码
string content = sr.ReadToEnd();
return content;
}
#endregion
#endregion#region Http下载文件
/// <summary>
/// Http下载文件
/// </summary>
public static string HttpDownloadFile(string url, string path)
{
// 设置参数
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;//发送请求并获取相应回应数据
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
//直到request.GetResponse()程序才开始向目标网页发送Post请求
Stream responseStream = response.GetResponseStream();//创建本地文件写入流
Stream stream = new FileStream(path, FileMode.Create);byte[] bArr = new byte[1024];
int size = responseStream.Read(bArr, 0, (int)bArr.Length);
while (size > 0)
{
stream.Write(bArr, 0, size);
size = responseStream.Read(bArr, 0, (int)bArr.Length);
}
stream.Close();
responseStream.Close();
return path;
}
#endregion#region Http上传文件
/// <summary>
/// Http上传文件
/// </summary>
public static string HttpUploadFile(string url, string path)
{
// 设置参数
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");int pos = path.LastIndexOf("\\");
string fileName = path.Substring(pos + 1);//请求头部信息
StringBuilder sbHeader = new StringBuilder(string.Format("Content-Disposition:form-data;name=\"file\";filename=\"{0}\"\r\nContent-Type:application/octet-stream\r\n\r\n", fileName));
byte[] postHeaderBytes = Encoding.UTF8.GetBytes(sbHeader.ToString());FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
byte[] bArr = new byte[fs.Length];
fs.Read(bArr, 0, bArr.Length);
fs.Close();Stream postStream = request.GetRequestStream();
postStream.Write(itemBoundaryBytes, 0, itemBoundaryBytes.Length);
postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
postStream.Write(bArr, 0, bArr.Length);
postStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);
postStream.Close();//发送请求并获取相应回应数据
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
//直到request.GetResponse()程序才开始向目标网页发送Post请求
Stream instream = response.GetResponseStream();
StreamReader sr = new StreamReader(instream, Encoding.UTF8);
//返回结果网页(html)代码
string content = sr.ReadToEnd();
return content;
}
#endregion#region 请求图灵聊天机器人
/// <summary>
/// 请求图灵聊天机器人
/// </summary>
public static string RequestTuling(string info)
{
info = HttpContext.Current.Server.UrlEncode(info);
string url = "http://www.tuling123.com/openapi/api?key=8174df6702e9e5ab4c1396a20f5833ac&info=" + info;
return RequestUrl(url, "get");
}
#endregion}
}
public class SHA1UtilHelper
{
/// <summary>
/// 签名算法
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string GetSha1(string str)
{
//建立SHA1对象
SHA1 sha = new SHA1CryptoServiceProvider();
//将mystr转换成byte[]
ASCIIEncoding enc = new ASCIIEncoding();
byte[] dataToHash = enc.GetBytes(str);
//Hash运算
byte[] dataHashed = sha.ComputeHash(dataToHash);
//将运算结果转换成string
string hash = BitConverter.ToString(dataHashed).Replace("-", "");
return hash;
}
}
View Code  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: