/// <summary> /// 获取Access Token /// </summary> /// <param name="code"></param> private void GetAccessToken(string code) { MarketSendLogBLL sendServer = new MarketSendLogBLL(loggingSessionInfo); MarketSendLogEntity sendInfo = new MarketSendLogEntity(); Random rad = new Random(); int iRad = rad.Next(1000, 100000); try { sendInfo.LogId = BaseService.NewGuidPub(); sendInfo.IsSuccess = 1; sendInfo.MarketEventId = "GetAccessToken"; sendInfo.SendTypeId = "220"; sendInfo.Phone = iRad.ToString(); sendInfo.TemplateContent = "GetAccessToken:code:" + code + ",strAppId:" + strAppId + ",strAppSecret:" + strAppSecret; sendInfo.VipId = code; sendInfo.WeiXinUserId = "1111"; sendInfo.CreateTime = System.DateTime.Now; sendServer.Create(sendInfo); var sendObjList = sendServer.QueryByEntity(new MarketSendLogEntity { VipId = code , WeiXinUserId = "AccessToken" , IsDelete = 0 }, null); string data = string.Empty; if (sendObjList == null || sendObjList.Length == 0 || sendObjList[0] == null) { ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Ssl3; string url = "https://api.weixin.qq.com/sns/oauth2/access_token"; WebClient myWebClient = new WebClient(); // 注意这种拼字符串的ContentType myWebClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); // 转化成二进制数组 var postData = "appid=" + strAppId + "&secret=" + strAppSecret + "&code=" + code + "&grant_type=authorization_code"; sendInfo.LogId = BaseService.NewGuidPub(); sendInfo.IsSuccess = 1; sendInfo.MarketEventId = "GetAccessToken转化成二进制数组"; sendInfo.SendTypeId = "220"; sendInfo.Phone = iRad.ToString(); sendInfo.TemplateContent = string.Format("{0}", postData); sendInfo.VipId = code; sendInfo.WeiXinUserId = "AccessToken-Para"; sendInfo.CreateTime = System.DateTime.Now; sendServer.Create(sendInfo); byte[] byteArray = Encoding.UTF8.GetBytes(postData); // 上传数据,并获取返回的二进制数据. byte[] responseArray = myWebClient.UploadData(url, "POST", byteArray); data = System.Text.Encoding.UTF8.GetString(responseArray); if (data.IndexOf("errcode") > 1) { var sendObjList1 = sendServer.QueryByEntity(new MarketSendLogEntity { VipId = code , WeiXinUserId = "AccessToken" , IsDelete = 0 , IsSuccess = 1 }, null); if (sendObjList1 == null || sendObjList1.Length == 0 || sendObjList1[0] == null) { } else { data = sendObjList1[0].TemplateContent.ToString().Trim(); } } sendInfo.LogId = BaseService.NewGuidPub(); if (data.IndexOf("errcode") > 1) { sendInfo.IsSuccess = 0; } else { sendInfo.IsSuccess = 1; } sendInfo.MarketEventId = "GetAccessToken-3"; sendInfo.SendTypeId = "220"; sendInfo.Phone = iRad.ToString(); sendInfo.TemplateContent = string.Format("{0}", data); sendInfo.VipId = code; sendInfo.WeiXinUserId = "AccessToken"; sendInfo.CreateTime = System.DateTime.Now; sendServer.Create(sendInfo); } else { data = sendObjList[0].TemplateContent.ToString().Trim(); sendInfo.LogId = BaseService.NewGuidPub(); sendInfo.IsSuccess = 1; sendInfo.MarketEventId = "GetAccessToken-3-2"; sendInfo.SendTypeId = "220"; sendInfo.Phone = iRad.ToString(); sendInfo.TemplateContent = string.Format("{0}", data); sendInfo.VipId = code; sendInfo.WeiXinUserId = "AccessToken--重复2"; sendInfo.CreateTime = System.DateTime.Now; sendServer.Create(sendInfo); } var tokenInfo = data.DeserializeJSONTo <cAccessTokenReturn>(); //Response.Write("<br/>"); //Response.Write("获取Access Token"); if (tokenInfo != null) { //Response.Write("<br/>"); //Response.Write("获取Access Token不为空"); GetUserIdByOpenId(tokenInfo.openid); } Loggers.Debug(new DebugLogInfo() { Message = string.Format("GetAccessToken: {0}", data) }); } catch (Exception ex) { Loggers.Exception(new ExceptionLogInfo() { ErrorMessage = string.Format("GetAccessToken错误: {0}", ex.ToString()) }); Response.Write("向微信请求认证Access Token出错,请联系管理员尽快处理."); sendInfo.LogId = BaseService.NewGuidPub(); sendInfo.IsSuccess = 0; sendInfo.MarketEventId = "向微信请求认证Access Token出错"; sendInfo.SendTypeId = "200"; sendInfo.Phone = iRad.ToString(); sendInfo.TemplateContent = string.Format("GetAccessToken错误: {0}", ex.ToString()); sendInfo.VipId = code; sendInfo.WeiXinUserId = "1111"; sendInfo.CreateTime = System.DateTime.Now; sendServer.Create(sendInfo); Response.End(); } }
/// <summary> /// 第二步:通过code换取网页授权access_token /// </summary> /// <param name="code">填写第一步获取的code参数</param> /// <param name="strAppId">公众号的唯一标识</param> /// <param name="strAppSecret">公众号的appsecret</param> /// <param name="loggingSessionInfo"></param> /// <param name="iRad"></param> /// <returns></returns> public string GetAccessToken(string code, string strAppId, string strAppSecret, LoggingSessionInfo loggingSessionInfo, int iRad, out string token, string openOAuthAppid = null) { MarketSendLogBLL sendServer = new MarketSendLogBLL(loggingSessionInfo); MarketSendLogEntity sendInfo = new MarketSendLogEntity(); //Random rad = new Random(); //int iRad = rad.Next(1000, 100000); try { sendInfo.LogId = BaseService.NewGuidPub(); sendInfo.IsSuccess = 1; sendInfo.MarketEventId = "GetAccessToken-1"; sendInfo.SendTypeId = "200"; sendInfo.Phone = iRad.ToString(); sendInfo.TemplateContent = "GetAccessToken:code:" + code + ",strAppId:" + strAppId + ",strAppSecret:" + strAppSecret; sendInfo.VipId = code; sendInfo.WeiXinUserId = "1111"; sendInfo.CreateTime = System.DateTime.Now; sendServer.Create(sendInfo); var sendObjList = sendServer.QueryByEntity(new MarketSendLogEntity { VipId = code , WeiXinUserId = "AccessToken" , IsDelete = 0 }, null); string data = string.Empty; if (sendObjList == null || sendObjList.Length == 0 || sendObjList[0] == null) { ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Ssl3; string url = "https://api.weixin.qq.com/sns/oauth2/access_token"; WebClient myWebClient = new WebClient(); // 注意这种拼字符串的ContentType myWebClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); // 转化成二进制数组 var postData = string.Empty; if (string.IsNullOrEmpty(strAppSecret))//已登录授权了 { if (string.IsNullOrEmpty(openOAuthAppid)) { var wailist = new WApplicationInterfaceBLL(loggingSessionInfo).QueryByEntity(new WApplicationInterfaceEntity { AppID = strAppId, CustomerId = loggingSessionInfo.ClientID }, null).FirstOrDefault(); openOAuthAppid = wailist != null ? wailist.OpenOAuthAppid : string.Empty; } //openOAuthAppid = !string.IsNullOrEmpty(openOAuthAppid) ? openOAuthAppid : "wx691c2f2bbac04b4b"; var openOAuthUrl = ConfigurationManager.AppSettings["openOAuthUrl"]; var openuri = openOAuthUrl + "/OpenOAuth/GetComponentAccessToken"; var opendata = CommonBLL.GetRemoteData(openuri, "GET", string.Empty).Replace("\"", "");//先获取第三方平台的component_access_token var url2 = "https://api.weixin.qq.com/sns/oauth2/component/access_token?appid=" + strAppId + "&code=" + code + "&grant_type=authorization_code&component_appid=" + openOAuthAppid + "&component_access_token=" + opendata + ""; opendata = CommonBLL.GetRemoteData(url2, "GET", string.Empty); data = opendata; } else//未授权的情况下 { postData = "appid=" + strAppId + "&secret=" + strAppSecret + "&code=" + code + "&grant_type=authorization_code"; sendInfo.LogId = BaseService.NewGuidPub(); sendInfo.IsSuccess = 1; sendInfo.MarketEventId = "GetAccessToken-2"; sendInfo.SendTypeId = "200"; sendInfo.Phone = iRad.ToString(); sendInfo.TemplateContent = string.Format("{0}", postData); sendInfo.VipId = code; sendInfo.WeiXinUserId = "GetAccessToken-Para"; sendInfo.CreateTime = System.DateTime.Now; sendServer.Create(sendInfo); byte[] byteArray = Encoding.UTF8.GetBytes(postData); // 上传数据,并获取返回的二进制数据. byte[] responseArray = myWebClient.UploadData(url, "POST", byteArray); data = System.Text.Encoding.UTF8.GetString(responseArray); } if (data.IndexOf("errcode") > 1) { var sendObjList1 = sendServer.QueryByEntity(new MarketSendLogEntity { VipId = code , WeiXinUserId = "AccessToken" , IsDelete = 0 , IsSuccess = 1 }, null); if (sendObjList1 == null || sendObjList1.Length == 0 || sendObjList1[0] == null) { } else { data = sendObjList1[0].TemplateContent.ToString().Trim(); } } sendInfo.LogId = BaseService.NewGuidPub(); if (data.IndexOf("errcode") > 1) { sendInfo.IsSuccess = 0; } else { sendInfo.IsSuccess = 1; } sendInfo.MarketEventId = "GetAccessToken-3"; sendInfo.SendTypeId = "200"; sendInfo.Phone = iRad.ToString(); sendInfo.TemplateContent = string.Format("{0}", data); sendInfo.VipId = code; sendInfo.WeiXinUserId = "AccessToken"; sendInfo.CreateTime = System.DateTime.Now; sendServer.Create(sendInfo); } else { data = sendObjList[0].TemplateContent.ToString().Trim(); sendInfo.LogId = BaseService.NewGuidPub(); sendInfo.IsSuccess = 1; sendInfo.MarketEventId = "GetAccessToken-3-2"; sendInfo.SendTypeId = "200"; sendInfo.Phone = iRad.ToString(); sendInfo.TemplateContent = string.Format("{0}", data); sendInfo.VipId = code; sendInfo.WeiXinUserId = "AccessToken--重复2"; sendInfo.CreateTime = System.DateTime.Now; sendServer.Create(sendInfo); } var tokenInfo = data.DeserializeJSONTo <cAccessTokenReturn>(); //Response.Write("<br/>"); //Response.Write("获取Access Token"); token = ""; if (tokenInfo != null) { //Response.Write("<br/>"); //Response.Write("获取Access Token不为空"); token = tokenInfo.access_token; return(tokenInfo.openid); } else { return(""); } Loggers.Debug(new DebugLogInfo() { Message = string.Format("GetAccessToken: {0}", data) }); //Response.Write(data); } catch (Exception ex) { Loggers.Debug(new DebugLogInfo() { Message = string.Format("GetAccessToken错误: {0}", ex.ToString()) }); sendInfo.LogId = BaseService.NewGuidPub(); sendInfo.IsSuccess = 0; sendInfo.MarketEventId = "GetAccessToken-4"; sendInfo.SendTypeId = "200"; sendInfo.Phone = iRad.ToString(); sendInfo.TemplateContent = string.Format("GetAccessToken错误: {0}", ex.ToString()); sendInfo.VipId = code; sendInfo.WeiXinUserId = "1111"; sendInfo.CreateTime = System.DateTime.Now; sendServer.Create(sendInfo); token = ""; return(""); } }