2013-08-03 34 views
0

我正在爲ASP.NET中的Google集成開發我的產品。我打算使用訪問令牌和刷新令牌創建服務。但我無法獲取刷新令牌,因爲我只是獲取訪問令牌,令牌類型和過期時間。請檢查以下代碼。無法在Google日曆版本3中獲取刷新令牌

private String ExchangeCodeWithAccessAndRefreshToken() 
{ 
    string Url = "https://accounts.google.com/o/oauth2/token"; 
    string grant_type = "authorization_code"; 
    string redirect_uri_encode = UrlEncodeForGoogle(Convert.ToString(Session["URL"])); 
    string data = "code={0}&client_id={1}&client_secret={2}&redirect_uri={3}&grant_type={4}"; 
    string Code = Request.QueryString["Code"]; 
    HttpWebRequest request = HttpWebRequest.Create(Url) as HttpWebRequest; 
    string result = null; 
    request.Method = "POST"; 
    request.KeepAlive = true; 
    request.ContentType = "application/x-www-form-urlencoded"; 
    String ClientID = ConfigurationManager.AppSettings["clientID"].ToString(); 
    String ClientSecret = ConfigurationManager.AppSettings["clientSecret"].ToString(); 
    string param = string.Format(data, Code, ClientID, ClientSecret, redirect_uri_encode, grant_type); 
    var bs = Encoding.UTF8.GetBytes(param); 
    using (Stream reqStream = request.GetRequestStream()) 
    { 
     reqStream.Write(bs, 0, bs.Length); 
    } 

    using (WebResponse response = request.GetResponse()) 
    { 
     var sr = new StreamReader(response.GetResponseStream()); 
     result = sr.ReadToEnd(); 
     sr.Close(); 
    } 
    var jsonSerializer = new JavaScriptSerializer(); 
    var tokenData = jsonSerializer.Deserialize<GoogleTokenModel>(result); 
    return tokenData.Access_Token; 
} 

回答

0

嘗試在你的URL設置access_type=offline

string data = "code={0}&client_id={1}&client_secret={2}&redirect_uri={3}&grant_type={4}&access_type=offline"; 
+0

感謝您的回覆,但我通過指定ACCESS_TYPE =離線&approval_prompt =力和以前我是用ACCESS_TYPE =離線&approval_prompt =自動 –

+0

我想解決這個問題要知道更多的事情,因爲我正在從版本2遷移到版本3,所以我無法通過使用版本2的刷新標記進行任何操作,所以還有其他任何替代方案,以便我可以使用已經存在的刷新標記。 –

+0

這應該是一個新問題,因爲它是一個不同的話題。 –