0

Python 3.4 コインベース ウォレット API V2


この購入呼び出し (および get_payment_methods() や get_accounts() などの他の API 呼び出し) で認証エラーが発生している間、私はしばらくの間把握しようとして立ち往生していました。これらの 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)

アカウント、キー、シークレットを 3 回チェックし、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 クラスです。個別のファイル、さらには api_call.py 内のクラスのインデントの外側。


なぜこれが認証エラーを発生させるのか、誰にも分かりますか? 私はerror.pyを見回しましたが、なぜこれが起こっているのかについての手がかりをまだ見つけていません。

いつものように、この問題に関する助けや考えは大歓迎です!


編集

同じファイルで動作するコードと動作しないコードを実行した後、両方の購入に成功しました。他のいくつかのことを試した後、グローバルに変更された変数、コマンド ライン引数、および更新されたオブジェクト メンバー変数を使用して API に POST を実行すると、この認証エラーが発生することが明らかになりました。これは起こるはずですか?

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

1 に答える 1

0

広範な静的分析の結果、これはおそらくあなたの問題であると結論付けました。

buy = api.buy('COIN-BS', 1) -> buy = api.buy_c('COIN-BS', 1)

client.buy_cまた、スタックトレースが代わりにある理由を理解してくださいclient.buy

于 2016-06-23T00:50:54.430 に答える