using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web; using System.Web.Script.Serialization; namespace MyCode.Project.Infrastructure.Common { //微信推广支持接口开发 public class QrCodeApi { public static string SessionAccessToken = "";//access_token缓存 其他接口的通行证 JavaScriptSerializer Jss = new JavaScriptSerializer(); #region 申请带参数的临时/永久二维码 /// /// 调用微信接口获取带参数临时二维码的ticket /// 使用方法:https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET /// /// 二维码带的参数 /// json:ticket:换取二维码的凭证,expire_seconds:凭证有效时间,url:二维码解析后的地址。此处返回ticket 否则返回错误码 public string GetQrcode(string appid, string appsecret, Int32 scene_id) { string QrcodeUrl = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={0}";//WxQrcodeAPI接口 string AccessToken = GetAccessToken(appid, appsecret);//拉取AccessToken QrcodeUrl = string.Format(QrcodeUrl, AccessToken); string PostJson = "{\"expire_seconds\": 1800, \"action_name\": \"QR_SCENE\", \"action_info\": {\"scene\": {\"scene_id\": " + scene_id + "}}}"; string ReText = CommonMethod.WebRequestPostOrGet(QrcodeUrl, PostJson);//post提交 Dictionary reDic = (Dictionary)Jss.DeserializeObject(ReText); if (reDic.ContainsKey("ticket")) { return reDic["ticket"].ToString();//成功 } else { return reDic["errcode"].ToString();//返回错误码 } } /// /// 调用微信接口获取带参数永久二维码的ticket /// 使用方法:https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET /// /// 二维码带的参数 /// json:ticket:换取二维码的凭证,expire_seconds:凭证有效时间,url:二维码解析后的地址。此处返回ticket 否则返回错误码 public string GetQrcode(string appid, string appsecret, string scene_str) { string QrcodeUrl = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={0}";//WxQrcodeAPI接口 string AccessToken = GetAccessToken(appid, appsecret);//拉取AccessToken QrcodeUrl = string.Format(QrcodeUrl, AccessToken); string PostJson = "{\"expire_seconds\": 1800, \"action_name\": \"QR_LIMIT_STR_SCENE\", \"action_info\": {\"scene\": {\"scene_str\": " + scene_str + "}}}"; string ReText = CommonMethod.WebRequestPostOrGet(QrcodeUrl, PostJson);//此处省略了 WebRequestPostOrGet即为WebHttpRequest发送Post请求 Dictionary reDic = (Dictionary)Jss.DeserializeObject(ReText); if (reDic.ContainsKey("ticket")) { return reDic["ticket"].ToString();//成功 } else { return reDic["errcode"].ToString();//返回错误码 } } #endregion #region 获取access_token缓存 public static string GetTokenSession(string AppID, string AppSecret) { string TokenSession = ""; if (System.Web.HttpContext.Current.Session[SessionAccessToken] == null) { TokenSession = AddTokenSession(AppID, AppSecret); } else { TokenSession = System.Web.HttpContext.Current.Session[SessionAccessToken].ToString(); } return TokenSession; } /// /// 添加AccessToken缓存 /// /// /// /// public static string AddTokenSession(string AppID, string AppSecret) { //获取AccessToken string AccessToken = GetAccessToken(AppID, AppSecret); HttpContext.Current.Session[SessionAccessToken] = AccessToken; HttpContext.Current.Session.Timeout = 7200; return AccessToken; } /// /// 获取AccessToken /// /// /// /// public static string GetAccessToken(string AppID, string AppSecret) { JavaScriptSerializer Jss = new JavaScriptSerializer(); string respText = CommonMethod.WebRequestPostOrGet(string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", AppID, AppSecret), ""); Dictionary respDic = (Dictionary)Jss.DeserializeObject(respText); string accessToken = respDic["access_token"].ToString(); return accessToken; } #endregion } }