/// <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); }
private void button18_Click(object sender, EventArgs e) { string str = weChatThread.Wx_GetLoginToken(); WxToken wxToken = JsonConvert.DeserializeObject <WxToken>(str); txt_loginToken.Text = wxToken.token; }
/// <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); } }
/// <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); } }
/// <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); }
/// <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); }
/// <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); } }
/// <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); }
/// <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); } }