示例#1
0
        private async Task <WechatAccessToken> GetOrRefreshToken()
        {
            if (_accessToken != null)
            {
                var age = DateTime.UtcNow - _accessToken.IssueTime;
                if (age.TotalSeconds < _accessToken.ExpiresIn)
                {
                    return(_accessToken);
                }
            }

            using (var client = new HttpClient())
            {
                var uriBuilder = new UriBuilder(_options.TokenURI);
                uriBuilder.Query = $"grant_type=client_credential&appid={_options.AppId}&secret={_options.AppSecret}";

                var response = await client.GetAsync(uriBuilder.Uri);

                response.EnsureSuccessStatusCode();

                var json = await response.Content.ReadAsStringAsync();

                _accessToken           = JsonConvert.DeserializeObject <WechatAccessToken>(json);
                _accessToken.IssueTime = DateTime.UtcNow;

                return(_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    = HttpWebResponseUtility.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;
                LogHelper.Error(access_token);
            }
            else
            {
                AccessTokenService.WriteToken(token.access_token, System.DateTime.Now.AddMinutes(115).ToString("yyyy-MM-dd HH:mm:ss"));
            }
            return(access_token);
        }