热门文章
学堂
币圈生存指南:如何在欧易交易所挑选潜力交易对?
本文分享了在欧易交易所选择交易对的实用技巧,包括流动性、风险评估、交易策略等多方面考量,助您在币圈稳健投资。
学堂
欧易(OKX)市场深度全攻略:掌握交易命脉,掘金币圈!
本文深入解析欧易(OKX)平台市场深度图和订单簿,教你如何利用这些工具分析市场流动性,识别支撑阻力位,并结合其他指标做出明智的交易决策。掌握市场深度,提升交易胜率!
文档
欧意OKX杠杆交易:精选币种,放大收益,避开爆仓风险!
欧意OKX杠杆交易,币种选择至关重要。本文从流动性、波动性、市场趋势、项目基本面等多维度分析,助您做出明智决策,提高交易胜率,并提供风险管理技巧,避免爆仓风险。
学堂
火币子账户终极指南:多账户交易,风险隔离?高手都在用!
火币子账户功能强大,可实现风险隔离、策略分离和权限管理。本文详细介绍了创建步骤、权限设置、资金划转及安全管理,助你高效管理数字资产。
文档
Upbit注册指南:常见问题解答,助您轻松上手!
本文汇总Upbit注册、身份验证、安全设置、充值提现及客服支持等常见问题,提供详细解答,助您快速上手Upbit,安全交易!
指南
MKR购买终极指南:5种方法助你轻松获取!
本文详细介绍了购买Maker (MKR) 的多种方法,包括中心化交易所、去中心化交易所、场外交易以及参与MakerDAO治理。无论你选择哪种方法,都请务必进行充分的研究,并采取必要的安全措施来保护你的资产。
指南
区块链数据真的“不可篡改”吗?真相远比你想的复杂!
区块链的不可篡改性并非绝对,而是基于密码学、共识机制和分布式存储的多重保障。51%攻击、女巫攻击等威胁依然存在。本文详细分析了区块链的安全性,并提出了防御措施。
课程
火币提现存款指南:数字资产转移攻略,新手必看!
本文详细介绍了如何在火币进行提现和存款操作,包括提现前的准备、提现步骤、注意事项,以及存款前的准备、存款步骤、注意事项。帮助用户安全便捷地在火币转移数字资产。

Changelly API开发指南:快速集成加密货币兑换功能?

Changelly API 接口使用指南

Changelly API 为开发者提供了一种程序化接入其加密货币兑换服务的方式。通过 API,开发者可以将 Changelly 的兑换功能集成到自己的平台、钱包、交易所或其他应用程序中,实现自动化加密货币兑换。以下是 Changelly API 的详细使用指南,涵盖主要功能、认证方式以及代码示例。

1. API 概览

Changelly API 采用 RESTful 架构,这意味着你可以使用标准的 HTTP 方法(如 GET、POST、PUT、DELETE 等)来与 API 进行交互。这种架构风格简化了客户端与服务器之间的通信,易于理解和使用。API 提供了广泛的功能集,允许开发者集成 Changelly 的加密货币兑换服务到各种应用中,具体功能包括:

  • 获取汇率: 查询指定两种加密货币之间的实时汇率。该功能允许你获取精确的兑换比例,基于当前市场价格。API 会返回买入价和卖出价,并可能包括手续费和网络费用等详细信息,确保用户了解最终的兑换成本。
  • 创建兑换交易: 发起一个加密货币兑换请求。你需要指定要兑换的加密货币种类、兑换数量和接收地址。API 会验证请求的有效性,并在成功后返回一个交易 ID,用于后续追踪。该接口支持固定汇率和浮动汇率两种模式,具体取决于你的需求。
  • 查询交易状态: 追踪已发起的兑换交易的进度。通过提供交易 ID,你可以获取交易的当前状态,例如:等待付款、处理中、已完成或已取消。API 返回的状态信息可以帮助用户了解交易的执行情况,并及时处理可能出现的问题。
  • 获取最小/最大兑换金额: 确定对于特定加密货币对,可以进行兑换的最小和最大金额。这些限制由 Changelly 动态设置,取决于市场流动性、网络费用和风险管理策略。API 允许开发者在提交交易前,验证兑换金额是否在允许范围内。
  • 获取支持的加密货币: 列出 Changelly 支持的所有加密货币。API 返回一个加密货币列表,包括它们的名称、代币符号、精度以及其他相关信息。开发者可以使用该列表来构建用户界面,显示可供兑换的加密货币选项,并且可以动态更新支持的币种。

2. 认证

要使用 Changelly API,必须进行身份验证以确保安全通信。 Changelly 采用 API 密钥机制进行身份验证,从而保护用户数据并防止未经授权的访问。 您需要在 Changelly 合作伙伴平台上创建一个帐户。注册成功后,您可以生成唯一的 API 密钥,该密钥将用于所有后续 API 请求。

身份验证通过在每个 API 请求的头部中包含以下信息来实现:

  • X-API-Key : 您的 API 密钥。该密钥是您身份的证明,请妥善保管。
  • X-Nonce : 一个唯一的随机数,用于防止重放攻击。 重放攻击是指攻击者截获并重新发送有效的 API 请求。 为了抵御此类攻击,建议使用 Unix 时间戳(自 Unix 纪元以来的秒数)作为随机数。 每次请求都使用不同的时间戳,确保唯一性。
  • X-Sign : 请求体的 HMAC-SHA512 签名,使用您的 API 密钥作为密钥。 此签名用于验证请求的完整性,确保请求在传输过程中未被篡改。 HMAC-SHA512 是一种加密哈希算法,可生成消息的唯一指纹。 通过使用 API 密钥对请求体进行签名,Changelly 可以验证请求是否来自授权来源。

更具体地说, X-Sign 的生成过程如下:您需要使用您的 API 密钥作为密钥,对整个请求体(JSON 格式的字符串)进行 HMAC-SHA512 哈希运算。 生成的哈希值(通常是十六进制字符串)将作为 X-Sign 头部的值发送。 服务端会使用相同的算法和密钥重新计算签名,并与您提供的签名进行比较。 如果两个签名匹配,则请求被认为是有效的。

签名生成过程:

  1. 将请求体(JSON 格式)进行规范化字符串化,确保键值对的顺序一致,并移除不必要的空格或换行符。这一步至关重要,因为任何细微的差异都将导致签名验证失败。
  2. 使用你的 API 密钥作为密钥,并采用 HMAC-SHA512(Hash-based Message Authentication Code with SHA-512)算法对规范化后的字符串化的请求体进行签名。HMAC-SHA512 是一种广泛应用于消息认证的安全哈希算法,能够有效防止篡改和重放攻击。 确保API密钥的安全,避免泄露,因为密钥的泄露会导致安全风险。
  3. 将生成的签名转换为十六进制字符串,以便在 HTTP 请求头中进行传输。 十六进制编码是一种常用的表示二进制数据的方式,它将每个字节转换为两个十六进制字符。 请确保转换过程正确无误,避免引入错误。

3. 主要 API 端点和功能

3.1 获取汇率 (getExchangeAmount)

此端点用于查询两种指定加密货币之间的实时汇率,为用户提供即时兑换比例参考。

  • Endpoint: /api/v1/exchangeAmount
  • Method: POST
  • Request Body:
  • JSON格式的请求体,用于指定兑换的货币类型、数量和方向。

    {
    "from": "btc",
    "to": "eth",
    "amount": "1",
    "type": "direct" // 'direct' 表示从 'from' 兑换到 'to', 'reverse' 表示从 'to' 兑换到 'from'
    }

    • from : 要兑换的源加密货币代码,例如 "btc" 代表比特币。
    • to : 要接收的目标加密货币代码,例如 "eth" 代表以太坊。
    • amount : 要兑换的源加密货币数量,类型为字符串,应能解析为数值。
    • type : 交易类型,决定了汇率计算的方向。 direct (直接)表示计算将 from 兑换为 to 的汇率, reverse (反向)表示计算将 to 兑换为 from 的汇率。
  • Response:
  • JSON格式的响应体,包含兑换结果和相关货币信息。

    {
    "result": "12.345",
    "currencyFrom": "btc",
    "currencyTo": "eth"
    }

    • result : 兑换后的目标加密货币数量,类型为字符串,精确到小数点后多位,具体精度取决于系统设置和市场波动。
    • currencyFrom : 兑换的源加密货币代码,与请求体中的 from 字段对应。
    • currencyTo : 接收的目标加密货币代码,与请求体中的 to 字段对应。

示例代码 (Python):

此示例代码演示了如何使用 Python 调用加密货币交易所的 API 接口,以获取不同加密货币之间的兑换汇率。它利用了 hashlib , hmac , , time requests 库。

import hashlib
import hmac
import
import time
import requests

为了安全地调用 API,您需要替换以下占位符,务必妥善保管您的 API 密钥和私钥。 API 密钥用于标识您的身份,私钥用于生成消息签名,防止数据篡改。 请注意,实际环境中应从安全的环境变量或配置文件中读取这些密钥,避免硬编码在代码中。

api_key = "YOUR_API_KEY"
secret_key = "YOUR_SECRET_KEY"
api_url = "https://api.changelly.com/api/v1/exchangeAmount"

generate_sign 函数用于生成 API 请求的数字签名。它使用 HMAC-SHA512 算法,将请求消息和您的私钥进行哈希运算。签名确保请求的完整性和真实性,防止中间人攻击。

def generate_sign(message, secret):
message = message.encode('utf-8')
secret = secret.encode('utf-8')
signature = hmac.new(secret, message, digestmod=hashlib.sha512).hexdigest()
return signature

get_exchange_amount 函数封装了 API 调用逻辑。它接收要兑换的币种、目标币种和数量作为参数,构建请求 payload,生成签名,并发送 POST 请求到 API 接口。返回结果为 JSON 格式的响应。

def get_exchange_amount(from_currency, to_currency, amount):
payload = {
"from": from_currency,
"to": to_currency,
"amount": str(amount),
"type": "direct"
}

nonce = str(int(time.time()))
message = .dumps(payload, separators=(',', ':'))
sign = generate_sign(message, secret_key)

headers = {
    "X-API-Key": api_key,
    "X-Nonce": nonce,
    "X-Sign": sign,
    "Content-Type": "application/"
}

response = requests.post(api_url, headers=headers, data=message)
return response.()

示例用法:

使用 get_exchange_amount 函数可以方便地获取加密货币兑换的预估数量。该函数接受三个参数:要兑换的加密货币的代币符号(例如 "btc"),目标加密货币的代币符号(例如 "eth"),以及要兑换的数量。

以下是一个使用示例,展示了如何使用该函数将 1 个比特币(BTC)兑换为以太坊(ETH):

result = get_exchange_amount("btc", "eth", 1)
print(result)

函数 get_exchange_amount 将返回一个表示预估兑换数量的数值。请注意,实际的兑换数量可能会因市场波动、交易费用和滑点等因素而略有不同。建议在进行实际交易前,仔细核对兑换平台的实时报价。确保您已正确安装并配置了必要的加密货币交易所 API 密钥,以便函数能够正常访问市场数据。参数中的代币符号应使用小写,以便和交易所API保持一致。

3.2 创建兑换交易 (createTransaction)

此端点允许你创建一个新的加密货币兑换交易,从而启动将一种加密货币转换为另一种加密货币的过程。通过提供必要的参数,API将生成一个唯一的交易ID以及详细的支付说明。

  • Endpoint: /api/v1/transactions
  • Method: POST
  • Request Body:
  • 发送到此端点的请求体应包含以下JSON结构,其中包含有关兑换的详细信息:

    { "from": "btc", "to": "eth", "address": "0x1234567890123456789012345678901234567890", "amountExpectedFrom": "1", "amountExpectedTo": "12.345", "extraId": null // Required for coins like XRP, XMR, EOS. }

    • from : 要进行兑换的源加密货币的代码 (例如: btc 代表比特币)。此代码必须是系统中支持的有效加密货币代码。
    • to : 你希望收到的目标加密货币的代码 (例如: eth 代表以太坊)。此代码也必须是系统中支持的有效加密货币代码。
    • address : 接收目标加密货币的钱包地址。确保此地址与目标加密货币 ( to 字段) 兼容,否则可能会导致资金损失。 请务必验证地址的正确性。
    • amountExpectedFrom : 用户期望用于兑换的源加密货币数量。该值应为字符串格式的数值,代表实际的加密货币数量。
    • amountExpectedTo : 用户期望收到的目标加密货币数量。该值应为字符串格式的数值,代表实际的加密货币数量,基于当前的汇率和可能的交易费用。
    • extraId : 对于某些加密货币,如瑞波币 (XRP)、门罗币 (XMR) 或 EOS,需要额外的标识符 (memo 或 tag) 来正确识别交易并将其分配给正确的账户。 如果目标加密货币需要 extraId ,则必须在此处提供。如果不需要,则设置为 null 。请注意,不正确的 extraId 可能会导致资金损失。
  • Response:
  • 成功创建兑换交易后,API将返回一个JSON响应,其中包含以下字段:

    { "id": "transaction_id", "payinAddress": "payin_address", "payoutAddress": "payout_address", "amountExpectedFrom": "1", "amountExpectedTo": "12.345", "currencyFrom": "btc", "currencyTo": "eth", "status": "new", "createdAt": "2023-10-27T10:00:00.000Z" }

    • id : 由系统生成的唯一交易标识符。使用此ID跟踪交易状态。
    • payinAddress : 用于将 from 加密货币发送到兑换服务的地址。用户需要将指定数量的 amountExpectedFrom 发送到此地址,以启动兑换过程。 请注意,如果发送的金额与 amountExpectedFrom 不符,交易可能会失败或延迟。
    • payoutAddress : 用户指定的接收 to 加密货币的地址。兑换完成后,兑换后的加密货币将发送到此地址。 这通常与请求正文中的 address 字段相同。
    • amountExpectedFrom : 用户期望兑换的源加密货币的数量。 该值与请求正文中的值相同。
    • amountExpectedTo : 用户期望收到的目标加密货币的数量。 该值与请求正文中的值相同,并基于创建交易时的汇率计算。
    • currencyFrom : 被兑换的源加密货币的代码。 该值与请求正文中的 from 字段相同。
    • currencyTo : 收到的目标加密货币的代码。 该值与请求正文中的 to 字段相同。
    • status : 交易的当前状态。 可能的状态包括:
      • new : 交易已创建,等待用户发送源加密货币。
      • waiting : 系统正在等待接收源加密货币。
      • confirming : 源加密货币的交易正在区块链上确认。
      • exchanging : 兑换过程正在进行中。
      • sending : 兑换后的加密货币正在发送到目标地址。
      • finished : 兑换已成功完成。
      • failed : 兑换失败。 这可能是由于多种原因造成的,例如发送的金额不正确或区块链确认失败。
      • refunded : 源加密货币已退还给用户。
    • createdAt : 交易创建的日期和时间,采用 ISO 8601 格式 (例如: 2023-10-27T10:00:00.000Z )。

示例代码 (Python):

本示例演示了如何使用 Python 与 Changelly API 交互,创建一个加密货币交易。它涵盖了必要的导入、API 密钥设置、签名生成以及构造和发送 API 请求的关键步骤。

import hashlib
import hmac
import
import time
import requests

这些导入语句引入了执行加密货币交易所需的 Python 库:

  • hashlib :提供各种哈希算法,用于生成安全消息摘要。
  • hmac :用于创建消息认证码,通过使用密钥将哈希函数应用于消息,来验证消息的完整性和真实性。
  • :允许在 Python 对象和 JSON 数据之间进行序列化和反序列化。
  • time :提供与时间相关的功能,例如获取当前时间戳,用于生成 nonce 值。
  • requests :一个流行的 HTTP 库,简化了发送 HTTP 请求的过程。

api_key = "YOUR_API_KEY"
secret_key = "YOUR_SECRET_KEY"
api_url = "https://api.changelly.com/api/v1/transactions"

这些变量存储了与 Changelly API 交互所需的凭据和端点:

  • api_key :您的 Changelly API 密钥,用于验证您的请求。请务必替换 "YOUR_API_KEY" 为您的实际 API 密钥。
  • secret_key :您的 Changelly API 密钥,用于生成请求签名。请务必替换 "YOUR_SECRET_KEY" 为您的实际密钥。
  • api_url :Changelly API 的交易端点 URL。

def generate_sign(message, secret):
message = message.encode('utf-8')
secret = secret.encode('utf-8')
signature = hmac.new(secret, message, digestmod=hashlib.sha512).hexdigest()
return signature

此函数用于生成请求的数字签名,确保数据的完整性和真实性:

  • 它接受消息 ( message ) 和密钥 ( secret ) 作为输入。
  • 将消息和密钥编码为 UTF-8 字节串。
  • 然后,使用 hmac.new() 函数创建一个 HMAC 对象,使用 SHA512 哈希算法对消息进行哈希处理。
  • 将哈希结果转换为十六进制字符串,并返回该字符串作为签名。

def create_transaction(from_currency, to_currency, address, amount_expected_from, amount_expected_to, extra_id=None):
payload = {
"from": from_currency,
"to": to_currency,
"address": address,
"amountExpectedFrom": str(amount_expected_from),
"amountExpectedTo": str(amount_expected_to),
"extraId": extra_id
}

此函数构造用于创建交易的有效负载 (payload):

  • from_currency :要兑换的币种代码。
  • to_currency :要收到的币种代码。
  • address :接收币种的地址。
  • amount_expected_from : 期望发送的数量。
  • amount_expected_to : 期望收到的数量。
  • extra_id :可选参数,某些币种(例如 XRP)需要此参数来标识交易。
payload 是一个 Python 字典,包含所有必要的交易信息, amountExpectedFrom amountExpectedTo 被转换为字符串类型。

nonce = str(int(time.time()))
message = .dumps(payload, separators=(',', ':'))
sign = generate_sign(message, secret_key)

headers = {
    "X-API-Key": api_key,
    "X-Nonce": nonce,
    "X-Sign": sign,
    "Content-Type": "application/"
}

response = requests.post(api_url, headers=headers, data=message)
return response.text

这部分代码执行以下操作:

  • nonce = str(int(time.time())) :生成一个 nonce 值,这是一个单次使用的随机数,用于防止重放攻击。这里使用当前时间戳的整数部分作为 nonce,并将其转换为字符串。
  • message = .dumps(payload, separators=(',', ':')) :将 payload 字典转换为 JSON 字符串。 separators=(',', ':') 参数用于去除 JSON 字符串中的空格,使其更紧凑。
  • sign = generate_sign(message, secret_key) :使用之前定义的 generate_sign() 函数,使用 JSON 消息和您的 secret_key 生成签名。
  • 构造 HTTP 头部:
    • "X-API-Key": api_key :包含您的 API 密钥。
    • "X-Nonce": nonce :包含生成的 nonce 值。
    • "X-Sign": sign :包含生成的签名。
    • "Content-Type": "application/" :指定请求正文的内容类型为 JSON。
  • response = requests.post(api_url, headers=headers, data=message) :使用 requests.post() 函数发送 POST 请求到 Changelly API。请求包含 API URL、HTTP 头部和 JSON 消息。
  • return response.text :返回 API 响应的文本内容。

示例用法:

以下展示了如何使用 create_transaction 函数创建一个从比特币 (BTC) 到以太坊 (ETH) 的跨链交易。函数接受多个参数,包括源链和目标链的标识符、接收者的地址、发送的金额以及手续费等信息。

result = create_transaction("btc", "eth", "0x1234567890123456789012345678901234567890", 1, 12.345)

上述代码调用 create_transaction 函数,参数解释如下:

  • "btc" : 表示源链为比特币区块链。
  • "eth" : 表示目标链为以太坊区块链。
  • "0x1234567890123456789012345678901234567890" : 表示目标链上接收者的以太坊地址。这是一个示例地址,实际使用时应替换为有效的以太坊地址。
  • 1 : 表示手续费 (fee),单位通常为对应链的原生代币,这里假设是 1 个 BTC 单位的费用,用于激励矿工或验证者处理交易。
  • 12.345 : 表示发送的金额,即从 BTC 转移到 ETH 的数量。单位通常为对应链的原生代币,这里表示 12.345 个 BTC。

print(result)

这行代码用于打印 create_transaction 函数返回的结果。结果可能包含交易的哈希值、交易的状态以及其他相关信息。具体返回值的格式取决于 create_transaction 函数的实现。

注意: 实际应用中, create_transaction 函数的实现会涉及复杂的密码学操作、签名过程和链间通信协议。此示例仅用于演示函数的基本用法,不包含底层的具体实现细节。跨链交易的安全性至关重要,需要仔细评估和审计相关的代码和协议。

3.3 查询交易状态 (getTransaction)

此端点用于查询特定交易的当前状态,提供有关交易进度的详细信息。开发者可以使用此端点实时跟踪交易,确保其按预期执行。

  • Endpoint: /api/v1/transactions/{transaction_id}
  • Method: GET
  • Description: 通过提供唯一的交易ID,检索有关该交易的所有可用信息。
  • Parameters:
    • transaction_id (路径参数): 必需。代表要查询的特定交易的唯一标识符。
  • Response:

    服务器将返回一个 JSON 对象,其中包含有关请求交易的详细信息。如果交易不存在或发生其他错误,则会返回相应的错误代码。

                
    {
      "id": "transaction_id",
      "payinAddress": "payin_address",
      "payoutAddress": "payout_address",
      "amountExpectedFrom": "1",
      "amountExpectedTo": "12.345",
      "amountFrom": "1.00000000",
      "amountTo": "12.34500000",
      "currencyFrom": "btc",
      "currencyTo": "eth",
      "status": "finished",
      "createdAt": "2023-10-27T10:00:00.000Z",
      "updatedAt": "2023-10-27T10:15:00.000Z",
      "networkFees": "0.0001",
      "provider": "Changelly",
      "confirmations": 6,
      "txId": "0xabcdef1234567890"
    }
                
            

    字段说明:

    • id : 交易的唯一标识符。 此 ID 用于在整个系统中跟踪交易。
    • payinAddress : 用户用于发送 from 加密货币的地址。 这是用户启动交易时使用的地址。
    • payoutAddress : 接收 to 加密货币的地址。这是接收兑换后加密货币的目标地址。
    • amountExpectedFrom : 用户期望发送的 from 加密货币的金额。
    • amountExpectedTo : 用户期望收到的 to 加密货币的金额。 此金额可能会因汇率和费用而异。
    • amountFrom : 实际收到的 from 加密货币的金额。 由于网络费用或用户错误,此金额可能与预期金额略有不同。
    • amountTo : 实际发送的 to 加密货币的金额。 这是用户实际收到的金额。
    • currencyFrom : 用户发送的加密货币的代码(例如,"btc")。
    • currencyTo : 用户接收的加密货币的代码(例如,"eth")。
    • status : 交易的当前状态。 可能的值包括 "pending"、"confirming"、"finished"、"failed" 等。
    • createdAt : 交易创建的时间戳,采用 ISO 8601 格式。
    • updatedAt : 交易上次更新的时间戳,采用 ISO 8601 格式。
    • networkFees : 交易产生的网络手续费,以 currencyFrom 为单位。
    • provider : 处理交易的第三方提供商的名称(例如 Changelly、Coinbase)。
    • confirmations : 交易在区块链上获得的确认数。
    • txId : 交易在区块链上的交易 ID (Transaction Hash)。
  • 可能的 Status 值:
    • pending : 交易已提交,正在等待处理。
    • confirming : 交易正在等待区块链确认。
    • finished : 交易已成功完成。
    • failed : 交易失败,原因可能是多种多样的,例如无效的地址或网络问题。
    • refunded : 交易已退款。
    • expired : 交易已过期。
  • 错误处理:

    如果交易 ID 无效或找不到交易,API 将返回相应的错误代码和消息。

示例代码 (Python):

以下Python代码示例演示了如何使用HMAC-SHA512算法生成签名,并利用该签名向加密货币交易所Changelly的API发起安全请求,以查询特定交易的状态。 代码依赖于 hashlib、hmac、time 和 requests 库。

import hashlib import hmac import time import requests import # 引入库,用于处理API响应

api_key = "YOUR_API_KEY" # 替换为您的API密钥 secret_key = "YOUR_SECRET_KEY" # 替换为您的密钥

def generate_sign(message, secret): """ 使用HMAC-SHA512算法生成签名。 参数: message (str): 要签名的消息。 secret (str): 用于签名的密钥。 返回值: str: 十六进制格式的签名。 """ message = message.encode('utf-8') # 将消息编码为UTF-8字节串 secret = secret.encode('utf-8') # 将密钥编码为UTF-8字节串 signature = hmac.new(secret, message, digestmod=hashlib.sha512).hexdigest() # 使用HMAC-SHA512生成签名,并转换为十六进制 return signature

def get_transaction_status(transaction_id): """ 查询指定交易ID的状态。 参数: transaction_id (str): 要查询的交易ID。 返回值: dict: 包含交易状态信息的字典。如果请求失败,则返回None。 """ api_url = f"https://api.changelly.com/api/v1/transactions/{transaction_id}" # 构建API请求URL

nonce = str(int(time.time())) # 生成一个随机数,作为nonce,防止重放攻击。通常使用当前时间戳。
message = "" # GET 请求没有消息体
sign = generate_sign(message, secret_key) # 使用密钥对消息进行签名

headers = {
    "X-API-Key": api_key, # 您的API密钥
    "X-Nonce": nonce, # 随机数
    "X-Sign": sign, # 请求签名
    "Content-Type": "application/" # 指定请求体的格式为JSON
}

try:
    response = requests.get(api_url, headers=headers) # 发送GET请求
    response.raise_for_status() # 如果响应状态码不是200,则抛出HTTPError异常。

    return response.() # 解析JSON响应
except requests.exceptions.RequestException as e:
    print(f"请求失败: {e}")
    return None

注意事项:

  • 请务必妥善保管您的 API_KEY SECRET_KEY ,避免泄露。
  • nonce 必须是唯一的,并且随着每个请求递增,以防止重放攻击。使用时间戳是一个常见的做法。
  • 错误处理至关重要。在实际应用中,您需要处理各种可能的异常情况,例如网络连接问题、API密钥无效、签名不匹配等。 使用try...except 块来捕获 requests 的异常.
  • response.raise_for_status() 函数用于在响应状态码不是200时抛出异常,可以帮助你快速发现请求错误。
  • API响应通常是JSON格式,使用 response.() 方法可以方便地将其解析为Python字典。
  • 一些API可能需要额外的参数或者使用POST请求,请参考对应API的文档进行调整。

示例用法:

使用 get_transaction_status 函数可以查询指定交易ID的状态。 你需要将实际的交易ID替换 "your_transaction_id" ,该函数将返回包含交易状态信息的字典。

result = get_transaction_status("your_transaction_id")

接下来,使用 print(result) 将结果打印到控制台,以便查看交易状态的详细信息。返回的结果可能包含诸如 "pending"(待处理)、"confirmed"(已确认)、"failed"(失败)等状态信息,以及交易的区块高度、时间戳等其他相关数据。

3.4 获取最小/最大兑换金额 ( getMinAmount , getMaxAmount )

这些API端点用于查询特定加密货币交易对的最小和最大允许兑换金额限制。 这些限制由交易所设定,以管理风险和确保交易的流动性。

  • 端点 (Endpoint): /api/v1/minAmount (获取最小金额) 或 /api/v1/maxAmount (获取最大金额)
  • 方法 (Method): POST
  • 请求体 (Request Body):
  • 请求体需要包含指定交易对的货币代码。

    
    {
        "from": "btc",
        "to":  "eth"
    }
    
    • from : 要兑换的源加密货币代码 (例如: "btc" 代表比特币)。该字段区分大小写,务必使用正确的货币代码。
    • to : 要接收的目标加密货币代码 (例如: "eth" 代表以太坊)。该字段区分大小写,务必使用正确的货币代码。
  • 响应 (Response) - getMinAmount (获取最小金额):
  • 响应体包含允许兑换的最小金额。

    
    {
        "result":  "0.001"
    }
    
    • result : 最小兑换金额。 例如,"0.001" 表示最小兑换量为 0.001 BTC。 数据类型通常为字符串,以便处理不同精度的数字。
  • 响应 (Response) - getMaxAmount (获取最大金额):
  • 响应体包含允许兑换的最大金额。

    
    {
        "result": "10"
    }
    
    • result : 最大兑换金额。 例如,"10" 表示最大兑换量为 10 BTC。 数据类型通常为字符串,以便处理不同精度的数字。交易所会根据市场深度和流动性调整此数值。

3.5 获取支持的加密货币 ( getCurrencies )

此端点允许开发者获取 Changelly 平台当前支持的所有加密货币列表。该列表涵盖了各种加密数字资产,包含了每种货币的关键元数据,方便用户了解其在平台上的可用性和相关属性。

  • Endpoint: /api/v1/currencies
  • Method: GET
  • Response:
  • 返回的 JSON 数组包含了平台支持的各种加密货币对象。每个对象都包含了以下关键字段:

    
    [
        {
            "name": "Bitcoin",
            "ticker": "btc",
            "enabled": true,
            "fixRateEnabled": true,
            "payinEnabled": true,
            "payoutEnabled": true
        },
        {
            "name": "Ethereum",
            "ticker": "eth",
            "enabled": true,
            "fixRateEnabled": true,
            "payinEnabled": true,
            "payoutEnabled": true
        },
        // ... 更多加密货币
    ]
    
    • name : 加密货币的全名,例如 "Bitcoin" 或 "Ethereum"。
    • ticker : 加密货币的唯一代码或符号,例如 "btc" 或 "eth"。这是在交易和API交互中识别特定货币的常用标识符。
    • enabled : 一个布尔值,指示该加密货币当前是否在平台上启用并可供交易。 true 表示该货币可以进行兑换, false 表示当前不可用。该状态可能因维护、监管要求或其他操作原因而发生变化。
    • fixRateEnabled : 一个布尔值,指示该加密货币是否支持固定汇率交易。 true 表示可以以固定汇率进行交易, false 表示只能以浮动汇率进行交易。固定汇率交易允许用户在一定时间内锁定汇率,从而降低市场波动带来的风险。
    • payinEnabled : 一个布尔值,指示用户是否可以将此加密货币作为支付货币(pay-in)发送到 Changelly 平台进行兑换。 true 表示允许接收此货币, false 表示当前不允许。
    • payoutEnabled : 一个布尔值,指示用户是否可以接收此加密货币作为兑换后的结算货币(pay-out)。 true 表示允许发送此货币作为兑换结果, false 表示当前不允许。

4. 错误处理

Changelly API 采用标准的 HTTP 状态码体系,用于明确指示每个 API 请求的处理结果。通过状态码,开发者可以快速识别请求是否成功,以及失败的原因。以下是一些常见的 HTTP 状态码及其在 Changelly API 中的具体含义:

  • 400 Bad Request : 此状态码表示客户端发起的请求存在问题,导致服务器无法理解。常见原因包括:
    • 缺少必需的请求参数,例如发起交易时未提供目标地址。
    • 请求参数的格式不正确,例如提供的加密货币地址格式错误。
    • 请求体包含无效的 JSON 格式。
    开发者应仔细检查请求参数,确保其符合 API 文档的要求。
  • 401 Unauthorized : 此状态码表明客户端未经过身份验证或提供的身份验证信息无效,无法访问受保护的资源。原因通常包括:
    • API 密钥未在请求头中正确提供。
    • API 密钥已过期或被禁用。
    • API 密钥与请求的 IP 地址不匹配(如果启用了 IP 地址白名单)。
    开发者需要确保 API 密钥的有效性和正确配置。
  • 403 Forbidden : 此状态码表示服务器拒绝执行请求,即使客户端已通过身份验证。这可能是由于:
    • 客户端尝试访问其权限之外的资源。
    • 服务器配置了访问控制规则,禁止客户端的 IP 地址或用户代理。
    • 请求触发了服务器的安全策略。
    开发者应检查其账户权限和 API 使用策略。
  • 404 Not Found : 此状态码表示请求的资源在服务器上不存在。这可能意味着:
    • 客户端尝试访问不存在的 API 端点。
    • 请求中指定的资源 ID 不存在。
    • API 端点的 URL 地址拼写错误。
    开发者应仔细检查 URL 地址,确保其指向正确的 API 端点。
  • 500 Internal Server Error : 此状态码表示服务器在处理请求时遇到了内部错误,无法完成请求。这通常是服务器端的临时性问题,例如:
    • 数据库连接错误。
    • 服务器代码错误。
    • 服务器资源不足。
    开发者可以稍后重试请求,或者联系 Changelly 技术支持获取帮助。

当 API 请求失败时,Changelly API 通常会在响应体中返回一个 JSON 对象,其中包含更详细的错误信息,例如错误代码和错误消息。错误消息通常会提供关于错误原因的更具体描述,帮助开发者快速定位问题。开发者务必检查 HTTP 响应状态码和 JSON 响应体中的错误信息,以便能够正确处理错误并采取相应的措施,例如重新构造请求、调整参数或联系技术支持。