首页 > 解决方案 > 对 VALR 的经过身份验证的 api 调用 - Python 3.8

问题描述

我正在尝试对 VALR 加密交换进行经过身份验证的 api 调用,作为实现自动交易的第一步。他们提供了大部分代码,所以我认为即使是非编码技术人员也很容易。下面的代码确实使用为测试提供的 API Secret 创建了正确的 HMAC SHA512 签名,但我在将这个结果传递给下一部分代码以请求余额时遇到了问题(从第 17 行开始)。如果我将结果/显示的“签名”和“时间戳”(在运行代码之后)剪切并粘贴回代码中,它实际上可以工作。那么我需要进行哪些更改才能使代码自动获取签名和时间戳。用户定义的函数似乎使所有参数对代码的其余部分“保密”,尤其是在使用 return 之后。

import time
import hashlib
import hmac


def sign_request( api_key_secret,timestamp, verb,path,body=""):
   payload = "{}{}{}{}".format(timestamp, verb.upper(), path, body)
   message = bytearray(payload, 'utf-8')
   signature = hmac.new(bytearray(api_key_secret, 'utf-8'), message, digestmod=hashlib.sha512).hexdigest()
   print("Signature=",signature)
   print ("Timestamp",timestamp)
   return signature

sign_request( verb = "GET", timestamp = int(time.time()*1000),path="/v1/account/balances",api_key_secret="4961b74efac86b25cce8fbe4c9811c4c7a787b7a5996660afcc2e287ad864363" )


import requests

url = "https://api.valr.com/v1/account/balances"

payload = {}
headers = {
  'X-VALR-API-KEY': '2589fb273e86aeee10bac1445232aa302feb37e27d32c1c599abc3757599139e',
  'X-VALR-SIGNATURE': 'signature',
  'X-VALR-TIMESTAMP': 'timestamp'
}

response = requests.request("GET", url, headers=headers, data = payload)

print(response.text.encode('utf8'))

标签: apiauthentication

解决方案


好吧,经过一番深思熟虑,我决定改用全局变量。hmac 仍然运行良好,并给了我一个签名。然后我删除了签名和时间戳周围的引号,并意识到它们都是整数。然后我能够将该签名和时间戳转换为字符串,并且一切都开始正常工作。也许其他人会利用这一点。如果要发出 POST 请求,请记住在 {body} 语句中的任何内容周围加上单引号以使其成为字符串。


推荐阅读