Python3 - coinbase API身份验证

时间:2018-02-10 03:13:35

标签: python-3.6 coinbase-api

我正在尝试使用他们的API访问我的coinbase帐户。

我使用以下代码:(来自网站https://developers.coinbase.com/docs/wallet/api-key-authentication

import json, hmac, hashlib, time, requests
from requests.auth import AuthBase

# Before implementation, set environmental variables with the names API_KEY and API_SECRET
API_KEY = 'API_KEY'
API_SECRET = 'API_SECRET'

# Create custom authentication for Coinbase API
class CoinbaseWalletAuth(AuthBase):
    def __init__(self, api_key, secret_key):
        self.api_key = api_key
        self.secret_key = secret_key

    def __call__(self, request):
        timestamp = str(int(time.time()))
        message = timestamp + request.method + request.path_url + (request.body or '')
        signature = hmac.new(self.secret_key, message, hashlib.sha256).hexdigest()

        request.headers.update({
            'CB-ACCESS-SIGN': signature,
            'CB-ACCESS-TIMESTAMP': timestamp,
            'CB-ACCESS-KEY': self.api_key,
        })
        return request

api_url = 'https://api.coinbase.com/v2/'
auth = CoinbaseWalletAuth(API_KEY, API_SECRET)

# Get current user
r = requests.get(api_url + 'user', auth=auth)
print r.json()
# {u'data': {u'username': None, u'resource': u'user', u'name': u'User'...

但是我收到以下错误:

Traceback (most recent call last):
  File "test1.py", line 44, in <module>
    r = requests.get(api_url + 'user', auth=auth)
  File "C:\Users\lclar\virtualenv-env\lib\site-packages\requests\api.py", line 72, in get
    return request('get', url, params=params, **kwargs)
  File "C:\Users\lclar\virtualenv-env\lib\site-packages\requests\api.py", line 58, in request
    return session.request(method=method, url=url, **kwargs)
  File "C:\Users\lclar\virtualenv-env\lib\site-packages\requests\sessions.py", line 494, in request
    prep = self.prepare_request(req)
  File "C:\Users\lclar\virtualenv-env\lib\site-packages\requests\sessions.py", line 437, in prepare_request
    hooks=merge_hooks(request.hooks, self.hooks),
  File "C:\Users\lclar\virtualenv-env\lib\site-packages\requests\models.py", line 309, in prepare
    self.prepare_auth(auth, url)
  File "C:\Users\lclar\virtualenv-env\lib\site-packages\requests\models.py", line 540, in prepare_auth
    r = auth(self)
  File "test1.py", line 29, in __call__
    signature = hmac.new(self.secret_key, message, hashlib.sha256).encode("utf-8").digest()
  File "C:\Users\lclar\AppData\Local\Programs\Python\Python36-32\lib\hmac.py", line 144, in new
    return HMAC(key, msg, digestmod)
  File "C:\Users\lclar\AppData\Local\Programs\Python\Python36-32\lib\hmac.py", line 42, in __init__
    raise TypeError("key: expected bytes or bytearray, but got %r" % type(key).__name__)
TypeError: key: expected bytes or bytearray, but got 'str'

有人可以帮帮我吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我假设数据类型Private Sub CommandButton1_Click() Dim sh As Worksheet Dim i As Long Dim vSerialNum As Variant Set sh = ThisWorkbook.Sheets("Sheet1") If Me.TextBox1.Value <> "" Then vSerialNum = Me.TextBox1.Value 'If the value from the input box is numeric, convert it to a decimal subtype If IsNumeric(vSerialNum) Then vSerialNum = (CDec(vSerialNum)) i = Application.Match(vSerialNum, sh.Range("A:A"), 0) Me.TextBox2.Value = sh.Range("B" & i).Value End If End Sub 是一个字符串。对于Python> = 3.4,self.secret_key = secret_key,{docs}的hmac.new(key, msg=None, digestmod='')类型必须为keybyteshttps://docs.python.org/3/library/hmac.html

为避免出现bytearray错误,请对TypeError: Unicode-objects must be encoded before hashing变量执行相同的操作,如下所示:

message