Пример #1
0
 public DoubanAppInfo()
 {
     if (!settings.TryGetValue<DoubanTokenInfo>(tokenInfoKey, out tokenInfo))
     {
         tokenInfo = new DoubanTokenInfo();
     }
 }
Пример #2
0
 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();
 }
Пример #3
0
        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);
                }
            });
        }