Search code examples
pythonpython-3.xebay-api

get end user tokens for eBay restful in Python


currently I am using eBay Trading API with Python. Thanks to: https://github.com/timotheus/ebaysdk-python

I used https://github.com/luke-dixon/django-ebay-accounts to get tokens for user.

Now, I would like to use Restful API (https://developer.ebay.com/docs#Acc). I don't think I can use tokens I have already. So, I managed thanks to Getting an Ebay OAuth Token get one. But I think I missing something, because during the process I cannot include info for user (name/password), so, for example https://api.ebay.com/sell/fulfillment/v1/order?limit=10 returns:

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

Any idea how can I get a token for the user?

Just snippet of code to make things more clear:

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()

So the request to run I need is:

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"
                                  })

Solution

  • The API Explore @ developer.ebay.com has description of HTTP Headers for each RestFul API. E.G. Fulfillment API - getOrdres:

    HTTP Headers Authorization:Bearer <OAUTH_token> Accept:application/json Content-Type:application/json

    Sample code:

    import requests,json
    
    headers = {
     
        "Authorization": "Bearer Type_Your_Token_here_or_Paste_IF_too_long",
        'Accept':'application/json',
        'Content-Type':'application/json'
    }
    
    EndPoint = "https://api.ebay.com/sell/fulfillment/v1/order?filter=orderfulfillmentstatus:%7BNOT_STARTED|IN_PROGRESS%7D"
    
    response = requests.get(EndPoint,headers = headers)