python 3.4 Coinbase Wallet API V2
我被困了一段时间,试图在此购买电话时弄清楚(以及其他API调用,例如get_payment_methods()和get_accounts())遇到了身份验证错误。我已经成功地在单独的文件中单独运行了其中一些API调用。
什么不起作用:
class api_call(object):
def __init__(self):
self.CB_key = xxxxxxxx
self.CB_secret = yyyyyyyy
self.CB_account = zzzzzzzzz
self.CB_payment_method = aaaaaaaaaa
def buy_c(self, exchange, b_amount):
client = Client(self.CB_key, self.CB_secret)
buy = client.buy(self.CB_account, amount=str(b_amount), currency="USD", payment_method=self.CB_payment_method)
api = api_call()
buy = api.buy('COIN-BS', 1)
我已经检查了我的帐户,密钥和秘密,还尝试了在类定义中进行硬编码,而不是使用 init 成员。
什么有效:
from coinbase.wallet.client import Client
client = Client(<api_key>, <api_secret>)
buy = client.buy('zzzzzzzz', amount='1', currency="USD", payment_method='aaaaaaaaaa')
错误如下:
Traceback (most recent call last):
File "api_call.py", line 126, in <module>
buy = api.buy('COIN-BS', 1)
File "api_call.py", line 110, in buy
buy = client.buy_c( self.CB_account, amount=str(amount), currency="USD", payment_method="XXXXXXXXXXXX")
File "/home/LA/.local/lib/python3.4/site-packages/coinbase/wallet/client.py", line 381, in buy
response = self._post('v2', 'accounts', account_id, 'buys', data=params)
File "/home/LA/.local/lib/python3.4/site-packages/coinbase/wallet/client.py", line 132, in _post
return self._request('post', *args, **kwargs)
File "/home/LA/.local/lib/python3.4/site-packages/coinbase/wallet/client.py", line 116, in _request
return self._handle_response(response)
File "/home/LA/.local/lib/python3.4/site-packages/coinbase/wallet/client.py", line 125, in _handle_response
raise build_api_error(response)
coinbase.wallet.error.AuthenticationError: APIError(id=authentication_error): invalid signature
我认为问题可能是由于使用API购买方法在类文件的定义中使用,这是我的api_call.py class.py class.i我认为这是因为我可以称呼购买方法(和其他)从单独的文件,甚至在api_call.py内部的类缩进的外部都可以。
有人知道为什么这会引起身份验证错误?我已经四处张望。
一如既往,对此事的任何帮助或想法都非常感谢!
编辑
在同一文件上运行工作和非工作代码后,我成功地进行了两个购买。在尝试了其他几件事之后,我发现使用这些全球修改的变量,命令行参数和更新的对象成员变量,显然会出现API的任何帖子,都会产生此身份验证错误。这应该发生吗?
from coinbase.wallet.client import Client
#Globals
key = 'xxxxxx'
secret = 'yyyyyy'
account = 'zzzzzzz'
payment = 'aaaaaaa'
class api_call(object):
def __init__(self):
self.CB_key = None
self.CB_secret = None
self.CB_account = None
self.CB_payment_method = None
def buy_c(self, exchange, b_amount):
client = Client(key, secret)
buy = client.buy(account, amount=str(b_amount), currency="USD", payment_method=payment)
client = Client(key, secret)
buy = client.buy(account, amount='1', currency="USD", payment_method=payment)
api = api_call()
buy = api.buy_c('COIN-BS', 1)
经过广泛的静态分析,我得出结论,这可能是您的问题。
buy = api.buy('COIN-BS', 1) -> buy = api.buy_c('COIN-BS', 1)
还弄清楚为什么您的堆栈跟踪具有client.buy_c
而不是client.buy