Значок eBay oauth и токены обновления

боролся за пару дней с аутентификацией токена eBay. Мне трудно понять, как получить новые токены, после регистрации для учетной записи программы разработчика я запросил набор ключей и получил их, после чего я предоставляю доступ к токену Auth'n'Auth, для которого promises для продолжения 18 месяцев, и да, токен работает только на торговле, покупке и поиске api.

Но когда вам нужно выполнить покупку, продажу и торговлю, вы должны получить токены. И вы можете сделать так называемый стиль "Однопользовательского приложения" и вставить его в oauth из User Token Tool, и получить oauth с истечением 2 часов.

Позже истекает токен, и вы потеряете доступ к указанному выше api. Я попытался извлечь токены из "Трейдинг" > "Получить идентификатор сеанса", "Торговля" > "Выполнить", но после предоставления идентификатора сеанса для маркера Fetch он говорит: "Конечный пользователь не выполнил аутентификацию Auth и Auth". в то время как существует допустимый токен 18 месяцев, он продолжает возвращать эту ошибку.

Есть ли какая-нибудь примерная статья об этом, которую любой мог прочитать или написать?

Ответ 1

Здесь подробно описан процесс OAuth API "New Sell", а не auth 'n' auth или устаревший API трейдинга. Это также для песочницы, хотя процедура производства аналогична.

Ваше замешательство не является необоснованным. Мой собственный опыт работы с этим потоком API, а также опыт значительной части официальных форумов разработчиков, был напряженным. Ниже подробно описана процедура создания oauth независимо от того, подключаетесь ли вы к одной, выделенной учетной записи или нескольким учетным записям.

Существует официальное руководство, которое объясняет весь процесс, поэтому я не решаюсь воссоздать все руководство здесь. Хотя я могу предоставить сводку (я советую, следуя приведенным ниже инструкциям, используя Postman, прежде чем пытаться пройти через ваше приложение):

  1. Получите свой идентификатор клиента и Client Secret отсюда (не делитесь ими публично)
  2. Сгенерируйте RuName (URL-адрес перенаправления) отсюда, нажав "Получить токен от eBay через ваше приложение" и заполнив форму. Эта форма предназначена для создания внешнего вида страницы входа, на которую пользователи будут перенаправлены, чтобы разрешить вашему приложению доступ к своей учетной записи. RuName появится сразу под заголовком столбца "RuName (имя URL перенаправления eBay)"
  3. Соберите список областей, которые вам нужны. Для каждой конечной точки API требуется токен OAuth с соответствующими разрешениями области. Например, для конечной точки " Создание или замена элемента инвентаризации" требуется область действия https://api.ebay.com/oauth/api_scope/sell.inventory. Выясните, какие конечные точки вам понадобятся, и перейдите к документации API для каждого и найдите раздел области действия.
  4. Запрос 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.

  5. Этот URL в браузере перенаправит вас на страницу входа, чтобы пользователь разрешил вашему приложению доступ к своей учетной записи, но только для областей в URL. Получив запрос PHP curl, вы получите сам URL перенаправления. Важно: знак от конечного пользователя необходим, даже если в вашем приложении будет только один пользователь. Например, у вас есть сайт электронной коммерции для клиента, и вы хотите отправить свои продукты на их единую учетную запись eBay. Вам все еще нужно будет делать этот процесс, по крайней мере, один раз каждые 18 месяцев (выясните, почему в ближайшее время).
  6. Как только пользователь войдет в систему и подтвердит, в браузере отобразится страница "Вы можете закрыть это окно сейчас". Код авторизации, необходимый для следующего шага, находится в URL этой страницы в виде строки запроса code. Если вы разрабатываете приложение для нескольких пользователей и планируете на самом деле сделать так, чтобы они выполнили вход на этой странице, вам необходимо настроить приложение так, чтобы оно получало ответ с подтверждением, который будет указанным выше URL-адресом, и извлекал из него код. Этот код очень недолговечный. Если вы извлекаете его вручную через браузер, вам нужно быстро выполнить следующие шаги.
  7. Теперь вам нужно выполнить 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, которая обычно должна возвращать новый токен обновления каждый раз, когда используется старый.

  8. Чтобы обновить 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
    

Надеюсь, это поможет!

Ответ 2

Для тех, кто борется с этим - убедитесь, что вы используете кодированный код/​​токен.

Я почти потерял рассудок, пытаясь понять, что не так, потому что ebay возвращает декор обновления reflex

Ответ 3

Для тех, кто борется, обратите внимание, что URL на шаге 4 отличается от URL, указанного на eBay. URL на eBay начинается с https://auth.sandbox.ebay.com/oauth2/authorize, но URL-адрес на шаге 4 начинается с https://signin.sandbox.ebay.com/authorize