/// <summary>
/// 生成二维码
/// </summary>
/// <returns></returns>
/// 申请生成二维码的用户 CreatQrCodeUser
public string CreateQrCodeImage(string CreatQrCodeUser)
{
string WeixinQrCodePath = ConfigurationManager.AppSettings["WeixinQrCodePath"].TryToString(); //配置的文件地址
string rootpath = System.AppDomain.CurrentDomain.BaseDirectory;//程序运行地址
string path = rootpath + WeixinQrCodePath; //文件夹绝对路径
string filename = Guid.NewGuid().TryString() + ".jpg";
string absolutelyPath = path + "/" +filename; //生成的二维码绝对路径
string returnPath = "";//文件返回的路径
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
int Sceneid = WeixinDA.GetQrcodeImgMaxSceneid(CreatQrCodeUser);
//保存二维码生成的图片
WeixinQrCode.SaveQrCodeImage(Sceneid.TryString(), absolutelyPath);
//最终生成二维码
string ResultCodeImg = path + "/" + filename; //最终合成图片的绝对路径
returnPath = WeixinQrCodePath + "/" + filename;//最终合成图片的相对路径
WeixinDA.SaveUserQrcodeImg(CreatQrCodeUser, Sceneid, returnPath);
return returnPath;
}
/// <summary>
/// 获取二维码图片Url,需要Format 0.ticket
/// </summary>
public const string WeiXin_QrCode_GetUrl = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket={0}";
/// <summary>
/// 根据Ticket获取二维码图片保存在本地
/// </summary>
/// <param name="scene_id">二维码场景id</param>
/// <param name="imgPath">图片存储路径</param>
public static void SaveQrCodeImage(string scene_id, string imgPath)
{
try
{
string Ticket = WeiXinCommom.CreateTicket(scene_id);
if (Ticket == null)
throw new ArgumentNullException("Ticket");
//ticket需 urlEncode
string stUrl = string.Format(WeiXinCommom.WeiXin_QrCode_GetUrl, HttpUtility.UrlEncode(Ticket));
WeiXinCommom.SaveUrlImage(stUrl, imgPath);
}
catch (Exception ex)
{
LogHelper.WriteFileLog("qrcodeError", ex.Message);
}
}
public const string WeiXin_Ticket_CreateUrl = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={0}";
public const string QrCodeTicket_Create_TempJsonStrin = "{\"expire_seconds\": 604800, \"action_name\": \"QR_SCENE\", \"action_info\": {\"scene\": {\"scene_id\": {0}}}}";
/// <summary>
/// 获取Ticket
/// </summary>
/// <returns></returns>
public static string CreateTicket(string scene_id)
{
string access_token = WeiXinCommom.GetAccsss_token(); ;
if (string.IsNullOrEmpty(access_token))
throw new ArgumentNullException("Access_Token");
string url = string.Format(WeiXin_Ticket_CreateUrl, access_token);
string postData = QrCodeTicket_Create_TempJsonStrin.Replace("{0}", scene_id);
string result = PostData(url, postData);
WeixinQrCode.Ticket ticket = JsonConvert.DeserializeObject<WeixinQrCode.Ticket>(result);
if (ticket == null || string.IsNullOrEmpty(ticket.ticket))
{
FileLog.AddLog("ticket", "获取二维码ticket失败");
return "";
}
return ticket.ticket;
}
/// <summary>
/// Post数据
/// </summary>
/// <param name="posturl"></param>
/// <param name="postData"></param>
/// <returns></returns>
public static string PostData(string posturl, string postData)
{
Stream outstream = null;
Stream instream = null;
StreamReader sr = null;
HttpWebResponse response = null;
HttpWebRequest request = null;
Encoding encoding = Encoding.UTF8;
byte[] data = encoding.GetBytes(postData);
// 准备请求...
try
{
// 设置参数
request = WebRequest.Create(posturl) 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;
outstream = request.GetRequestStream();
outstream.Write(data, 0, data.Length);
outstream.Close();
//发送请求并获取相应回应数据
response = request.GetResponse() as HttpWebResponse;
//直到request.GetResponse()程序才开始向目标网页发送Post请求
instream = response.GetResponseStream();
sr = new StreamReader(instream, encoding);
//返回结果网页(html)代码
string content = sr.ReadToEnd();
string err = string.Empty;
return content;
}
catch (Exception ex)
{
LogHelper.WriteFileLog("PostDataerror", string.Format("{0}", ex.Message));
return string.Empty;
}
}