До сих пор боролись с этим в течение многих часов, Документы кажутся ужасными.По сути, я пытаюсь получить доступ для чтения к контактам пользователей, прошедших проверку подлинности OAuth2, используя либо Portable Contacts API , либо полноценный Contacts API .В Google недавно запущено , что позволяет OAuth2 .
Я могу получить доступ к контактам пользователей через API контактов, сначала попросив пользователя пройти аутентификацию с помощью области: "https://www.google.com/m8/feeds". Затем я могу получить их первые 25 контактов с помощью jQuery (показанный код CoffeeScript )
$.ajax
url: "https://www.google.com/m8/feeds/contacts/default/full"
dataType: 'jsonp'
data: { access_token: token, alt: 'json-in-script' }
success: (data, status) ->
console.log "The returned data", data
Это работает, и я получаю данные JSON. Однако, почти невероятно, единственные контактыпорядок, который Google предоставляет (насколько я могу судить): « lastmodified » (серьезно wtf?). Мне нужно что-то более похожее на «лучших друзей» или «самых популярных».
Какиечто-то, что может сделать API переносимых контактов Google , (Да!). Конечно, я не могу получить успешный запрос на работу.
Во-первых, ячтобы пользователь прошел аутентификацию с помощью API переносимых контактов, перейдя по этой ссылке (обратите внимание на область действия: "https://www -opensocial.googleusercontent.com / api / people")
<a href="https://accounts.google.com/o/oauth2/authclient_id=457681297736.apps.googleusercontent.com&response_type=token&redirect_uri=http://localhost:3000/team&scope=https://www-opensocial.googleusercontent.com/api/people">Import Google Contacts</a>
Это прекрасно работает, и яполучить маркер доступа, переданный обратно.
Далее япопробуйте отправить ajax-запрос в API переносимых контактов
$.ajax
url: "https://www-opensocial.googleusercontent.com/api/people/@me/@all"
dataType: 'jsonp'
data: { access_token: token, alt: 'json-in-script' }
success: (data, status) ->
console.log "The returned data", data
Но это возвращает ошибку 403
403 (The currently logged in user and/or the gadget requesting data, does not have access to people data.
Есть идеи, что я делаю неправильно?
Приложение
Я нашел этот отчет об ошибке на форуме Google OAuth2, который советовал нам установить заголовок авторизации при работе с API Portable Contacts.Поэтому я попробовал вот так:
$.ajax
url: "https://www-opensocial.googleusercontent.com/api/people/@me/@all"
dataType: 'jsonp'
data: { access_token: token, alt: 'json-in-script' }
beforeSend: (xhr) ->
xhr.setRequestHeader "Authorization", "OAuth #{token}"
data: { access_token: token }
success: (data, status) ->
console.log "The returned data", data
Но я получаю ту же ошибку 403:
403 (The currently logged in user and/or the gadget requesting data, does not have access to people data