//刷新accesstoken public static string RefrenshToken(string appid, string appsecret) { string userAgent = System.Web.HttpContext.Current.Request.UserAgent; string url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appid, appsecret); HttpWebResponse res = WechatHttpWebResponseUtility.CreateGetHttpResponse(url, null, userAgent, null); Stream stream = res.GetResponseStream(); StreamReader sr = new StreamReader(stream); string result = sr.ReadToEnd(); WechatAccessToken token = new WechatAccessToken(); token = JsonConvert.DeserializeObject <WechatAccessToken>(result); string access_token = token.access_token; if (string.IsNullOrEmpty(token.access_token)) { WechatError err = new WechatError(); err = JsonConvert.DeserializeObject <WechatError>(result); access_token = "appid或者appsecret错误,无法获取access_token 微信错误代码:" + err.errcode + "微信错误信息:" + err.errmsg; WechatLogHelper.Error(access_token); } else { ConfigService.WriteKey("WechatAccessToken", access_token); ConfigService.WriteKey("WechatAccessTokenExpiredTime", System.DateTime.Now.AddMinutes(115).ToString("yyyy-MM-dd HH:mm:ss")); } return(access_token); }
/// <summary> /// Get Wechat Access Token. The token expires in 7200 seconds. If the call fails, throw InvalidOperationException. /// </summary> /// <returns>Access Token object</returns> public static WechatAccessToken GetAccessToken() { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(string.Format(GetAccessTokenUrlTemplate, AppId, AppSecret)); request.Method = "GET"; request.ContentType = "content-type: text/html; charset=utf-8"; HttpWebResponse res = (HttpWebResponse)request.GetResponse(); Stream resStream = res.GetResponseStream(); DataContractJsonSerializer serAccessToken = new DataContractJsonSerializer(typeof(WechatAccessToken)); WechatAccessToken token = (WechatAccessToken)serAccessToken.ReadObject(resStream); if (token == null || token.AccessTokenData == null) { DataContractJsonSerializer serError = new DataContractJsonSerializer(typeof(Error)); Error error = (Error)serError.ReadObject(resStream); throw new InvalidOperationException(string.Format("Error: {0}|{1}", error.ErrorCode, error.ErrorMessage)); } else { return(token); } }
/// <summary> /// Cache Access Token to wechat database /// </summary> /// <param name="token">Access Token to be saved</param> internal static void SaveAccessTokenToDatabaseCache(WechatAccessToken token) { using (WechatDBDataContext database = new WechatDBDataContext()) { AccessToken accessTokenEntity = new AccessToken(); accessTokenEntity.AccessTokenData = token.AccessTokenData; accessTokenEntity.ExpireBy = DateTime.UtcNow.AddSeconds(AccessTokenSafeExpire); database.AccessTokens.InsertOnSubmit(accessTokenEntity); database.SubmitChanges(); } }