在Python中获取eBay的最终用户令牌

时间:2019-03-07 16:45:36

标签: python python-3.x ebay ebay-api

当前,我正在将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)。我认为我无法使用已经拥有的令牌。因此,我非常感谢Getting an Ebay OAuth Token得到一个。但是我想我缺少一些东西,因为在此过程中,我无法包含用户信息(名称/密码),因此,例如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 个答案:

答案 0 :(得分:1)

根据this,我认为您应该使用以下授权标头:

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

USER_ACCESS_TOKENthis页面上生成的大量令牌。

它看起来像这样:

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

您使用的Authorization用于未链接到特定用户帐户的请求(搜索结果,项的元数据等)。要发出针对特定用户的请求(例如订单或库存更新),您必须通过其USER_ACCESS_TOKEN获得他们的许可。

如果您需要帮助,请告诉USER_ACCESS_TOKEN,我将进行更新。

注意,大​​约6个小时以来,我一直在尝试做与您相同的事情,但仍然没有弄清楚,所以我对这个答案没有信心。 / p>

希望这会有所帮助。如果您确定了答案,则应该发布答案,以便其他人也可以(例如,我自己xD)。

eBay肯定是api文档历史上最差的api文档的 ...