#c# #asp.net #google-plus
#c# #asp.net #google-plus
Вопрос:
Я использую этот URL-адрес для получения доступа
http://www.googleapis.com/plus/v1/people/me?access_token?client_id=*********.ps.googleusercontent.comamp;redirect_uri=http://localhost:49261/Default.aspxamp;client_secret=*******************
Вот шаги, которые я использую
Получение кода при авторизации
string url = string.Format("{0}?client_id={1}amp;redirect_uri={2}", AUTHORIZE, this.ConsumerKey, CALLBACK_URL);
url = "amp;scope=https://www.googleapis.com/auth/plus.meamp;response_type=code";
Приведенный выше URL-адрес возвращает код, и, используя этот код, который я использую
, обмениваю код на accesstoken.
http://www.googleapis.com/plus/v1/people/me?access_token?client_id=*********.ps.googleusercontent.comamp;redirect_uri=http://localhost:49261/Default.aspxamp;client_secret=*******************
Вот мой код для получения доступа
public void AccessTokenGet(string authToken)
{
this.Token = authToken;
string accessTokenUrl = string.Format("{0}?client_id={1}amp;redirect_uri={2}amp;client_secret={3}amp;code={4}",
ACCESS_TOKEN, this.ConsumerKey, CALLBACK_URL, this.ConsumerSecret, authToken);
string response = WebRequest(Method.GET, accessTokenUrl, String.Empty);
if (response.Length > 0)
{
//Store the returned access_token
NameValueCollection qs = HttpUtility.ParseQueryString(response);
if (qs["access_token"] != null)
{
this.Token = qs["access_token"];
}
}
}
public string WebRequest(Method method, string url, string postData)
{
HttpWebRequest webRequest = null;
StreamWriter requestWriter = null;
string responseData = "";
webRequest = System.Net.WebRequest.Create(url) as HttpWebRequest;
webRequest.Method = method.ToString();
webRequest.ServicePoint.Expect100Continue = false;
webRequest.UserAgent = "[You user agent]";
webRequest.Timeout = 20000;
if (method == Method.POST)
{
webRequest.ContentType = "application/x-www-form-urlencoded";
//POST the data.
requestWriter = new StreamWriter(webRequest.GetRequestStream());
try
{
requestWriter.Write(postData);
}
catch
{
throw;
}
finally
{
requestWriter.Close();
requestWriter = null;
}
}
responseData = WebResponseGet(webRequest);
webRequest = null;
return responseData;
}
public string WebResponseGet(HttpWebRequest webRequest)
{
StreamReader responseReader = null;
string responseData = "";
try
{
responseReader = new StreamReader(webRequest.GetResponse().GetResponseStream());
responseData = responseReader.ReadToEnd();
}
catch (Exception ex)
{
throw ex;
}
finally
{
webRequest.GetResponse().GetResponseStream().Close();
responseReader.Close();
responseReader = null;
}
return responseData;
}
Сбой в методе WebResponseGet. Возвращает HTTP 403 запрещено
Редактировать:
возможно, я не был ясен ранее. Чтобы объяснить ошибку, вот что это такое
Код завершается ошибкой при запросе токена доступа
error: {
"error": {
"errors": [
{
"domain": "usageLimits",
"reason": "dailyLimitExceededUnreg",
"message": "Daily Limit Exceeded. Please sign up",
"extendedHelp": "https://code.google.com/apis/console"
}
],
"code": 403,
"message": "Daily Limit Exceeded. Please sign up"
}
}
Ответ №1:
http://www.googleapis.com/plus/v1/people/me является конечной точкой для получения профиля пользователя (см. Документы для people.get). Это можно вызвать только после получения токена доступа.
Конечная точка для фактического получения самого токена доступа https://accounts.google.com/o/oauth2/token . В зависимости от того, какой поток OAuth2 вы хотите использовать, точные параметры, которые вы передаете этой конечной точке, будут немного отличаться, но все они задокументированы на http://code.google.com/apis/accounts/docs/OAuth2.html