public async Task <int> ExecSendMsgAsync(string accessToken, string data, int s) { LogHelper.Info("WeChatAppAuthorizeController->ExecSendMsgAsync"); try { var a = await ThreadSleepAsync(s); accessToken = WeChatAppDecrypt.GetToken(); //反序列化结果 WechatToken tokenModel = JsonConvert.DeserializeObject <WechatToken>(accessToken); string url = string.Format("https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token={0}", tokenModel.access_token); HttpWebRequest hwr = WebRequest.Create(url) as HttpWebRequest; hwr.Method = "POST"; hwr.ContentType = "application/x-www-form-urlencoded"; byte[] payload; payload = System.Text.Encoding.UTF8.GetBytes(data); //通过UTF-8编码 hwr.ContentLength = payload.Length; Stream writer = hwr.GetRequestStream(); writer.Write(payload, 0, payload.Length); writer.Close(); var result = hwr.GetResponse() as HttpWebResponse; //此句是获得上面URl返回的数据 string strMsg = WebResponseGet(result); LogHelper.Debug("strMsgAsync:" + strMsg); } catch (Exception e) { LogHelper.Debug("strMsgAsyncError:" + e.Message); }; return(1); }
/// <inheritdoc /> public async Task <WechatToken> GetWechatToken(string wechatCode) { if (wechatCode == null) { throw new ArgumentNullException(nameof(wechatCode)); } var url = string.Format( "https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type={3}", _options.AppId, _options.AppSecret, wechatCode, "authorization_code"); HttpResponseMessage response; try { response = await GetApiResponse(url); } catch (Exception ex) { _logger.LogError(ex, "尝试访问微信 API 时发生异常:{0}: {1}", ex.GetType(), ex.Message); throw; } if (!response.IsSuccessStatusCode) { _logger.LogError("微信 API 返回非 2XX 的 HTTP 状态码:{0}", response.StatusCode); // TODO: 更改下面的异常类型 throw new Exception($"微信 API 返回了非 2XX 的 HTTP 状态码:{response.StatusCode}"); } string responseBody; try { responseBody = await response.Content.ReadAsStringAsync(); } catch (Exception ex) { _logger.LogError(ex, "尝试读取微信 API 响应时发生异常:{0}: {1}", ex.GetType(), ex.Message); throw; } var responseJson = JObject.Parse(responseBody); var errorCode = responseJson["errcode"]?.Value <int>(); if (errorCode != null && errorCode != 0) { var errorMessage = (string)responseJson["errmsg"]; throw new WechatApiException(errorCode.Value, errorMessage); } return(WechatToken.FromWechatJson(responseJson)); }
private WechatToken CreateMockToken() { var mockJsonObject = new JObject(); mockJsonObject["access_token"] = MockAccessToken; mockJsonObject["expires_in"] = MockExpireTime; mockJsonObject["refresh_token"] = MockRefreshToken; mockJsonObject["openid"] = GenerateMockOpenId(); mockJsonObject["scope"] = MockScopes; return(WechatToken.FromWechatJson(mockJsonObject)); }
/// <inheritdoc /> public Task <WechatToken> GetWechatToken(string wechatCode) { if (wechatCode == null) { throw new ArgumentNullException(nameof(wechatCode)); } var mockJsonObject = new JObject(); mockJsonObject["access_token"] = string.Empty; mockJsonObject["expires_in"] = 30 * 24 * 60 * 60; mockJsonObject["refresh_token"] = string.Empty; mockJsonObject["openid"] = wechatCode; mockJsonObject["scope"] = string.Empty; return(Task.FromResult(WechatToken.FromWechatJson(mockJsonObject))); }
public void ReadFromValidWechatJsonStringInvalidNoUnionId() { var json = "{" + "\"access_token\": \"ACCESS_TOKEN\"," + "\"expires_in\": 7200, " + "\"refresh_token\": \"REFRESH_TOKEN\", " + "\"openid\": \"OPENID\", " + "\"scope\": \"SCOPE1,SCOPE2\"," + "}"; var token = WechatToken.FromWechatJson(json); Assert.Equal("ACCESS_TOKEN", token.AccessToken); Assert.True(Math.Abs((token.ExpireTime - DateTime.Now).TotalSeconds - 7200) < 10); Assert.Equal("REFRESH_TOKEN", token.RefreshToken); Assert.Equal("OPENID", token.OpenId); Assert.Equal(new string[] { "SCOPE1", "SCOPE2" }, token.Scopes); Assert.Null(token.UnionId); }
public void ReadFromInvalidWechatJsonString() { var json = "{ \"errcode\": 40029, \"errmsg\": \"invalid code\" }"; Assert.ThrowsAny <Exception>(() => WechatToken.FromWechatJson(json)); }
public void ReadFromWechatJsonNull() { Assert.Throws <ArgumentNullException>(() => WechatToken.FromWechatJson((string)null)); Assert.Throws <ArgumentNullException>(() => WechatToken.FromWechatJson((JObject)null)); }
/// <summary> /// 初始化 <see cref="AuthenticationToken"/> 类的新实例。 /// </summary> /// <param name="userId">用户ID。</param> /// <param name="isAdmin">用户是否拥有管理员权限。</param> /// <param name="wechatToken">用于与微信 API 交互的 Token。</param> public AuthenticationToken(int userId, bool isAdmin, WechatToken wechatToken) { UserId = userId; IsAdmin = isAdmin; WechatToken = wechatToken; }