Example #1
0
        /// <summary>
        /// 刷新接口凭据
        /// </summary>
        /// <returns></returns>
        public static async Task <string> RefreshTokenAsync(AppData appData, string appid, string refreshToken)
        {
            var token = await GetOpenTokenAsync(appData);

            var url     = $"https://api.weixin.qq.com/cgi-bin/component/api_authorizer_token?component_access_token={token}";
            var content = new
            {
                component_appid          = appData.OpenAppId,
                authorizer_appid         = appid,
                authorizer_refresh_token = refreshToken
            };
            var sendData = JsonConvert.SerializeObject(content);
            var result   = await PostAsync(url, sendData);

            var jObj    = JObject.Parse(result);
            var wxToken = new WxToken
            {
                access_token = jObj["authorizer_access_token"].Value <string>(),
                expires_in   = jObj["expires_in"].Value <int>(),
                GetTime      = DateTime.Now
            };

            SetAuthorizerAccessToken(appid, wxToken);
            return(wxToken.access_token);
        }
Example #2
0
        private void button18_Click(object sender, EventArgs e)
        {
            string  str     = weChatThread.Wx_GetLoginToken();
            WxToken wxToken = JsonConvert.DeserializeObject <WxToken>(str);

            txt_loginToken.Text = wxToken.token;
        }
Example #3
0
        /// <summary>
        /// 根据授权码获取接口凭据和授权信息
        /// </summary>
        /// <param name="appId"></param>
        /// <param name="code"></param>
        /// <returns></returns>
        public static async Task <WxAuthInfo> GetAuthTokenAsync(AppData appData, string code)
        {
            var token = await GetOpenTokenAsync(appData);

            var url     = $"https://api.weixin.qq.com/cgi-bin/component/api_query_auth?component_access_token={token}";
            var content = new
            {
                component_appid    = appData.OpenAppId,
                authorization_code = code
            };

            using (var client = new HttpClient())
                using (var body = new StringContent(JsonConvert.SerializeObject(content)))
                {
                    var res = await client.PostAsync(url, body);

                    var result = await res.Content.ReadAsStringAsync();

                    var entity  = JsonConvert.DeserializeObject <WxAuthInfo>(result);
                    var wxToken = new WxToken
                    {
                        access_token = entity.authorization_info.authorizer_access_token,
                        expires_in   = entity.authorization_info.expires_in,
                        GetTime      = DateTime.Now
                    };
                    SetAuthorizerAccessToken(entity.authorization_info.authorizer_appid, wxToken);
                    return(entity);
                }
        }
Example #4
0
 /// <summary>
 /// 设置接口凭据
 /// </summary>
 /// <param name="appId"></param>
 /// <param name="token"></param>
 private static void SetAuthorizerAccessToken(string appId, WxToken token)
 {
     if (_authAccessTokenDic.ContainsKey(appId))
     {
         _authAccessTokenDic[appId] = token;
     }
     else
     {
         _authAccessTokenDic.Add(appId, token);
     }
 }
Example #5
0
        /// <summary>
        /// 获取token,现在已经放入session中,后期放入数据库中
        /// </summary>
        /// <returns></returns>
        public async Task <WxToken> GetAccessToken()
        {
            var old = new WxToken()
            {
                access_token = "23_HV3iR9AEgaIBO2d2K7-r7lDXwfIzY5akCSNB8vXpTFETLtCjg8QpxN90_jhqg4VGPfNdOYHAxDcZjLIoKVw4UmnDw-IsBN9YrB33es0Ydh6CWojs5kkn6etbL1Y-sN1Q3YTfll1dNRg4ddMlEKDjAHAWCV",
                expires_in   = 7200
            };

            return(old);
            // var url = _Url +
            // $"cgi-bin/token?grant_type=client_credential&appid={_AppID}&secret={_AppSecret}";
            // return await HttpUtil.GetAsync<WxToken>(url);
        }
Example #6
0
        /// <summary>
        /// 根据授权码获取接口凭据和授权信息
        /// </summary>
        /// <param name="code">授权码</param>
        /// <param name="token">开放平台访问token</param>
        /// <returns></returns>
        public static async Task <WxAuthInfo> GetAuthTokenAsync(string code, string token)
        {
            var url     = $"https://api.weixin.qq.com/cgi-bin/component/api_query_auth?component_access_token={token}";
            var content = new
            {
                component_appid    = OpenAppId,
                authorization_code = code
            };
            var result = await RequestAsync(url, content);

            var entity  = JsonConvert.DeserializeObject <WxAuthInfo>(result);
            var wxToken = new WxToken
            {
                access_token = entity.authorization_info.authorizer_access_token,
                expires_in   = entity.authorization_info.expires_in,
                GetTime      = DateTime.Now
            };

            return(entity);
        }
Example #7
0
        /// <summary>
        /// 获取第三方平台component_access_token
        /// </summary>
        /// <returns></returns>
        public static async Task <string> GetOpenTokenAsync(AppData appData)
        {
            if (_openToken != null)
            {
                var second = (DateTime.Now - _openToken.GetTime.Value).TotalSeconds;
                // 如果Token没有过期,则直接返回
                if (second < _openToken.expires_in - 360)
                {
                    return(_openToken.access_token);
                }
            }

            var url     = "https://api.weixin.qq.com/cgi-bin/component/api_component_token";
            var content = new
            {
                component_appid         = appData.OpenAppId,
                component_appsecret     = appData.OpenSecret,
                component_verify_ticket = OpenTicket
            };

            using (var client = new HttpClient())
                using (var body = new StringContent(JsonConvert.SerializeObject(content)))
                {
                    var res = await client.PostAsync(url, body);

                    var result = await res.Content.ReadAsStringAsync();

                    var jObj   = JObject.Parse(result);
                    var jToken = jObj["component_access_token"];
                    if (jToken == null)
                    {
                        return(null);
                    }
                    var token      = jObj["component_access_token"].Value <string>();
                    var expires_in = jObj["expires_in"].Value <int>();
                    _openToken = new WxToken {
                        access_token = token, GetTime = DateTime.Now, expires_in = expires_in
                    };
                    return(token);
                }
        }
Example #8
0
        /// <summary>
        /// 刷新开放平台授权访问令牌
        /// </summary>
        /// <param name="token"></param>
        /// <param name="appId"></param>
        /// <param name="refreshToken"></param>
        /// <returns></returns>
        private async Task <string> RefreshTokenAsync(string appId)
        {
            var token = await GetOpenTokenAsync();

            var authInfo = await Context.OpenAuthInfos.FirstOrDefaultAsync(a => a.AppId == appId);

            if (authInfo == null)
            {
                throw new Exception($"公众号未授权");
            }
            var url     = $"https://api.weixin.qq.com/cgi-bin/component/api_authorizer_token?component_access_token={token}";
            var content = new
            {
                component_appid          = WxHelper.OpenAppId,
                authorizer_appid         = appId,
                authorizer_refresh_token = authInfo.RefreshToken
            };
            var result = await UtilHelper.RequestAsync(url, content);

            var jObj    = JObject.Parse(result);
            var wxToken = new WxToken
            {
                access_token = jObj["authorizer_access_token"].Value <string>(),
                expires_in   = jObj["expires_in"].Value <int>(),
                GetTime      = DateTime.Now
            };

            if (AuthAccessTokenDic.ContainsKey(appId))
            {
                AuthAccessTokenDic[appId] = wxToken;
            }
            else
            {
                AuthAccessTokenDic.Add(appId, wxToken);
            }
            return(wxToken.access_token);
        }
Example #9
0
        /// <summary>
        /// 设置开放平台访问Token
        /// </summary>
        /// <returns></returns>
        private async Task <string> SetOpenTokenAsync()
        {
            var url    = "https://api.weixin.qq.com/cgi-bin/component/api_component_token";
            var ticket = await GetOpenTicketAsync();

            if (string.IsNullOrEmpty(ticket))
            {
                throw new ArgumentNullException("component_verify_ticket", "开放平台ticket不能为空,该值每10分钟推送一次");
            }
            var content = new
            {
                component_appid         = WxHelper.OpenAppId,
                component_appsecret     = WxHelper.OpenSecret,
                component_verify_ticket = await GetOpenTicketAsync()
            };

            using (var client = new HttpClient())
                using (var body = new StringContent(JsonConvert.SerializeObject(content)))
                {
                    var res = await client.PostAsync(url, body);

                    var result = await res.Content.ReadAsStringAsync();

                    var jObj   = JObject.Parse(result);
                    var jToken = jObj["component_access_token"];
                    if (jToken == null)
                    {
                        return(null);
                    }
                    var token      = jObj["component_access_token"].Value <string>();
                    var expires_in = jObj["expires_in"].Value <int>();
                    OpenToken = new WxToken {
                        access_token = token, GetTime = DateTime.Now, expires_in = expires_in
                    };
                    return(token);
                }
        }