получить токены конечного пользователя для eBay restful в Python - PullRequest
4 голосов
/ 07 марта 2019

В настоящее время я использую eBay Trading API с Python. Благодаря: https://github.com/timotheus/ebaysdk-python

Я использовал https://github.com/luke-dixon/django-ebay-accounts, чтобы получить токены для пользователя.

Теперь я хотел бы использовать Restful API (https://developer.ebay.com/docs#Acc). Я не думаю, что смогу использовать токены, которые у меня уже есть. Итак, мне удалось благодаря Получение Ebay OAuth Token get 1. Но я думаю, что что-то упустил, потому что во время процесса я не могу включить информацию для пользователя (имя / пароль), например, https://api.ebay.com/sell/fulfillment/v1/order?limit=10 возвращает:

{
  "errors": [{
    "errorId": 1100,
    "domain": "ACCESS",
    "category": "REQUEST",
    "message": "Access denied",
    "longMessage": "Insufficient permissions to fulfill the request."
  }]
}

Есть идеи, как получить токен для пользователя?

Просто фрагмент кода, чтобы прояснить ситуацию:

AppSettings = {
            'app_id': EBAY_PRODUCTION_APPID,
            'app_secret': EBAY_PRODUCTION_CERTID,
            'dev_id': EBAY_PRODUCTION_DEVID, 
            'ruName': EBAY_PRODUCTION_RU_NAME 
        }
authHeaderData = AppSettings['app_id'] + ':' + AppSettings['app_secret']
        encodedAuthHeader = base64.b64encode(authHeaderData.encode())

        headers = {
            "Content-Type": "application/x-www-form-urlencoded",
            "Authorization": "Basic ".encode() + encodedAuthHeader
        }
body = {
            "grant_type": "client_credentials",
            "redirect_uri": settings.EBAY_PRODUCTION_RU_NAME,
            "scope": "https://api.ebay.com/oauth/api_scope"
        }

        data = urllib.parse.urlencode(body)

        tokenURL = "https://api.ebay.com/identity/v1/oauth2/token"

        response = requests.post(tokenURL, headers=headers, data=body)
        authDict = response.json()

Итак, запрос на запуск мне нужен:

r = requests.get("https://api.ebay.com/sell/fulfillment/v1/order?limit=10",
                         headers={"Authorization": "{}".format(authDict['access_token']),
                                  "Content-Type": "application/json",
                                  "X-EBAY-C-MARKETPLACE-ID": "EBAY_UK",
                                  "Accept": "application/json"
                                  })

1 Ответ

1 голос
/ 08 марта 2019

Согласно this , я полагаю, вы должны использовать следующий заголовок авторизации:

headers['Authorization'] = "Bearer " + USER_ACCESS_TOKEN

Где USER_ACCESS_TOKEN - это массивный токен, сгенерированный на this стр.

Это выглядит примерно так:

'v^1.1#i^1#p^3#f^0#I^3#r^0#t^ ...
...
...
...
... bfxr8BJtphi2M/oo2xpYo2hiMWxmZt4fVzS7qe2tMXUSAAA='

Authorization, который вы используете, предназначен для запросов, которые не связаны с конкретной учетной записью пользователя (результаты поиска, метаданные для элементов,так далее.).Чтобы делать запросы для определенных пользователей (например, заказы или обновления инвентаря), вы должны получить их разрешение через USER_ACCESS_TOKEN.

Если вам нужна помощь в получении USER_ACCESS_TOKEN, дайте мне знать, и я 'Обновлюсь.

Обратите внимание , что я пытался сделать то же самое, что вы делаете в течение 6 часов, и до сих пор не понял, поэтому я не уверенв этом ответе.

Надеюсь, это поможет.Если вы поймете это, вы должны опубликовать ответ, чтобы другие тоже (например, я xD).

eBay определенно выиграл золотой металл за худший API-документ в историиapi docs ...

...