public DoubanAppInfo() { if (!settings.TryGetValue<DoubanTokenInfo>(tokenInfoKey, out tokenInfo)) { tokenInfo = new DoubanTokenInfo(); } }
public void SetTokenInfo(DoubanTokenInfo info) { if (info == null) return; tokenInfo = info; if (!settings.Contains(tokenInfoKey)) { settings.Add(tokenInfoKey, tokenInfo); } else { settings[tokenInfoKey] = tokenInfo; } settings.Save(); }
private void GetOAuth2AccessToken(string uri) { String requestVerifier = ""; foreach (string item in uri.Split('&')) { string[] parts = item.Split('='); if (parts[0] == "code") { requestVerifier = parts[1]; break; } } if (string.IsNullOrEmpty(requestVerifier)) { m_Error.errCode = DoubanSdkErrCode.NET_UNUSUAL; if (null != OAuth2VerifyCompleted) OAuth2VerifyCompleted(false, m_Error, null); return; } RestClient client = new RestClient(); client.Authority = ConstDefine.ServerUrl2_0; client.HasElevatedPermissions = true; RestRequest request = new RestRequest(); request.Path = "/auth2/token"; request.Method = WebMethod.Post; request.DecompressionMethods = DecompressionMethods.GZip; request.Encoding = Encoding.UTF8; request.AddParameter("client_id", DoubanSdkData.AppKey); request.AddParameter("client_secret", DoubanSdkData.AppSecret); request.AddParameter("grant_type", "authorization_code"); request.AddParameter("redirect_uri", DoubanSdkData.RedirectUri); request.AddParameter("code", requestVerifier); client.BeginRequest(request, (e1, e2, e3) => { if ( null != e2.InnerException) { m_Error.errCode = DoubanSdkErrCode.NET_UNUSUAL; if (null != OAuth2VerifyCompleted) OAuth2VerifyCompleted(false, m_Error, null); } else if (e2.StatusCode != HttpStatusCode.OK) { if (null == e2.ContentStream || e2.ContentStream.Length == 0) { m_Error.errCode = DoubanSdkErrCode.NET_UNUSUAL; if (null != OAuth2VerifyCompleted) OAuth2VerifyCompleted(false, m_Error, null); return; } DataContractJsonSerializer ser = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(DoubanOAuthErrRes)); DoubanOAuthErrRes errRes = ser.ReadObject(e2.ContentStream) as DoubanOAuthErrRes; m_Error.errCode = DoubanSdkErrCode.SERVER_ERR; m_Error.specificCode = errRes.ErrorCode; m_Error.errMessage = errRes.errDes; if (null != OAuth2VerifyCompleted) OAuth2VerifyCompleted(true, m_Error, null); } else { m_Error.errCode = DoubanSdkErrCode.SUCCESS; //isCompleted = true; //解析 DataContractJsonSerializer ser = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(DoubanSdkAuth2Res)); var oauthRes = ser.ReadObject(e2.ContentStream) as DoubanSdkAuth2Res; // 存到本地 DoubanTokenInfo tokenInfo = new DoubanTokenInfo(); tokenInfo.access_token = oauthRes.accesssToken; tokenInfo.refresh_token = oauthRes.refleshToken; tokenInfo.expires_in = DateTime.Now.AddSeconds(Int32.Parse(oauthRes.expriesIn)); DoubanAPI.DoubanInfo.SetTokenInfo(tokenInfo); if (null != OAuth2VerifyCompleted) OAuth2VerifyCompleted(true, m_Error, oauthRes); } }); }