Ответ 1
Здесь подробно описан процесс OAuth API "New Sell", а не auth 'n' auth или устаревший API трейдинга. Это также для песочницы, хотя процедура производства аналогична.
Ваше замешательство не является необоснованным. Мой собственный опыт работы с этим потоком API, а также опыт значительной части официальных форумов разработчиков, был напряженным. Ниже подробно описана процедура создания oauth независимо от того, подключаетесь ли вы к одной, выделенной учетной записи или нескольким учетным записям.
Существует официальное руководство, которое объясняет весь процесс, поэтому я не решаюсь воссоздать все руководство здесь. Хотя я могу предоставить сводку (я советую, следуя приведенным ниже инструкциям, используя Postman, прежде чем пытаться пройти через ваше приложение):
- Получите свой идентификатор клиента и Client Secret отсюда (не делитесь ими публично)
- Сгенерируйте RuName (URL-адрес перенаправления) отсюда, нажав "Получить токен от eBay через ваше приложение" и заполнив форму. Эта форма предназначена для создания внешнего вида страницы входа, на которую пользователи будут перенаправлены, чтобы разрешить вашему приложению доступ к своей учетной записи. RuName появится сразу под заголовком столбца "RuName (имя URL перенаправления eBay)"
- Соберите список областей, которые вам нужны. Для каждой конечной точки API требуется токен OAuth с соответствующими разрешениями области. Например, для конечной точки " Создание или замена элемента инвентаризации" требуется область действия
https://api.ebay.com/oauth/api_scope/sell.inventory
. Выясните, какие конечные точки вам понадобятся, и перейдите к документации API для каждого и найдите раздел области действия. -
Запрос get теперь выглядит так:
'https://signin.sandbox.ebay.com/authorize? client_id=<your-client-id-value>& redirect_uri=<your-RuName-value>& response_type=code& scope=https%3A%2F%2Fapi.ebay.com%2Foauth%2Fapi_scope%2Fsell.account%20 https%3A%2F%2Fapi.ebay.com%2Foauth%2Fapi_scope%2Fsell.inventory'
Также рекомендуется добавить строку запроса
state
, которую я пропустил для простоты использования, но вы должны выяснить, что это такое и почему они рекомендуются для OAuth. - Этот URL в браузере перенаправит вас на страницу входа, чтобы пользователь разрешил вашему приложению доступ к своей учетной записи, но только для областей в URL. Получив запрос PHP curl, вы получите сам URL перенаправления. Важно: знак от конечного пользователя необходим, даже если в вашем приложении будет только один пользователь. Например, у вас есть сайт электронной коммерции для клиента, и вы хотите отправить свои продукты на их единую учетную запись eBay. Вам все еще нужно будет делать этот процесс, по крайней мере, один раз каждые 18 месяцев (выясните, почему в ближайшее время).
- Как только пользователь войдет в систему и подтвердит, в браузере отобразится страница "Вы можете закрыть это окно сейчас". Код авторизации, необходимый для следующего шага, находится в URL этой страницы в виде строки запроса
code
. Если вы разрабатываете приложение для нескольких пользователей и планируете на самом деле сделать так, чтобы они выполнили вход на этой странице, вам необходимо настроить приложение так, чтобы оно получало ответ с подтверждением, который будет указанным выше URL-адресом, и извлекал из него код. Этот код очень недолговечный. Если вы извлекаете его вручную через браузер, вам нужно быстро выполнить следующие шаги. -
Теперь вам нужно выполнить POST-запрос к https://api.sandbox.ebay.com/identity/v1/oauth2/token. Смотрите структуру ниже:
HTTP method: POST URL (Sandbox): https://api.sandbox.ebay.com/identity/v1/oauth2/token HTTP headers: Content-Type = application/x-www-form-urlencoded Authorization = Basic <B64-encoded-oauth-credentials> (A base64-encoded value made from your client ID and client secret, separated by colon. For example, in PHP you could generate it with: 'base64_encode ("fakeclientid123:fakeclientsecret123")') Request body (wrapped for readability): grant_type=authorization_code& (literally the string "authorization_code") code=<authorization-code-value>& (code retreived in previous step) redirect_uri=<RuName-value> (same RuName as earlier)
В случае успеха этот запрос вернет что-то вроде ниже:
{ "access_token": "v^1.1#i^1#p^3#r^1...XzMjRV4xMjg0", "token_type": "User token", "expires_in": 7200, "refresh_token": "v^1.1#i^1#p^3#r^1...zYjRV4xMjg0", "refresh_token_expires_in": 47304000 }
Вот жетон oauth, который мы ищем, который продлится 2 часа. Второй токен - это токен обновления, который продлится ~ 18 месяцев. Храните этот токен в безопасности, не передавайте его и не кодируйте его жестко в своем приложении. С этого момента ваше приложение должно выполнять вызовы обновления, используя этот токен, чтобы получить новый oauth, когда это необходимо. По истечении 18 месяцев или в случае повторного прохождения процедуры "Разрешить доступ" пользователю необходимо будет выполнить все вышеперечисленное, чтобы сгенерировать новый токен обновления. Предполагая, что API не изменился к этому моменту.
Стоит отметить, что 18-месячный срок службы не является обычной процедурой обновления OAuth, которая обычно должна возвращать новый токен обновления каждый раз, когда используется старый.
-
Чтобы обновить oauth:
HTTP method: POST URL (Sandbox): https://api.sandbox.ebay.com/identity/v1/oauth2/token HTTP headers: Content-Type = application/x-www-form-urlencoded Authorization = Basic <B64-encoded-oauth-credentials> Request body (wrapped for readability): grant_type=refresh_token& refresh_token=<your-refresh-token-value>& scope=https%3A%2F%2Fapi.ebay.com%2Foauth%2Fapi_scope%2Fsell.account%20 https%3A%2F%2Fapi.ebay.com%2Foauth%2Fapi_scope%2Fsell.inventory
Надеюсь, это поможет!