获取Ebay OAuth令牌

时间:2017-05-18 11:45:00

标签: python django oauth ebay-api

本周大部分时间我一直在研究ebaySDK。我已经设法将交易和购物API集成到我的项目中。对于交易API,我使用的是Auth n Auth令牌,其有效期长达18个月。我销售API所需的OAuth令牌仅在一天内有效,因此我需要在它到期之前定期获取它。 我按照网站上的文档,甚至尝试在github上查看python repos,但我还没有能够继续前进。这是我的请求代码的快速片段,我做错了什么?

import requests, json, base64, xmltodict

AppSettings = {
    'app_id' : 'my_app_id',
    'app_secret' : 'my_app_secret',
    'dev_id': 'my_dev_id',
    'ruName': 'the_ruName_for_my_app'
}
authHeaderData =  AppSettings['app_id']+':'+AppSettings['app_secret']
encodedAuthHeader = base64.b64encode(authHeaderData)

session = requests.Session()

print encodedAuthHeader 
url = 'https://api.ebay.com/identity/v1/oauth2/token'

session.headers.update({
    'Content-Type':'application/x-www-form-urlencoded',
    'Authorization':'Basic '+encodedAuthHeader
    })

data = {
    'grant_type':'client_credentials',
    'redirect_uri': AppSettings['ruName'],
    'scope':'https://api.ebay.com/oauth/api_scope'
}

response = session.post(url, data=data).json()
print response

我得到的回应是:

{u'error_description': u'client authentication failed', u'error': u'invalid_client'}

我检查了所有钥匙。我甚至试图通过ebay提供的生产登录获得令牌,但无济于事。我从ebay提供的网址得到的回复是html和js代码(没有JSON或任何数据)。

有人遇到类似的问题吗?我该如何解决这个问题?我提出错误的要求吗?非常感谢任何见解

2 个答案:

答案 0 :(得分:6)

因为这是遍历eBays文档以找到答案的噩梦,所以我想我会发布解决该问题的函数。

def getAuthToken():

      authHeaderData =  AppSettings['client_id']+':'+AppSettings['client_secret']
      encodedAuthHeader = base64.b64encode(authHeaderData)

      headers = {
          "Content-Type" : "application/x-www-form-urlencoded", 
          "Authorization" : "Basic " + encodedAuthHeader
          }

      body= {
          "grant_type" : "client_credentials",
          "redirect_uri" : RUNAME,
          "scope" : "https://api.ebay.com/oauth/api_scope"
      }

      data = urllib.urlencode(body)

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

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

  return authDict['access_token']

答案 1 :(得分:0)

@sunny babau 我和你有同样的问题。确实是由b'和结尾的'引起的。在上面的代码中添加以下行以删除这些字符后,它对我有用:

encodedAuthHeader = str(encodedAuthHeader)[2:len(str(encodedAuthHeader))-1]