头图

市面上的USDT支付接口比较多,各有所长,今天以BlockATM为例介绍如何快速接入这种支付接口。BlockATM的特点是基于智能合约,消费者的支付会直接进入智能合约钱包,平台无法触碰到资金,这种被称为Web3支付的模式是最近比较流行的。

步骤 1:注册并获取 API 密钥

注册账户:

  • 访问 BlockATM 并注册一个账户。
  • 完成邮箱验证和其他必要的身份验证步骤。

获取 API 密钥:

  • 登录后,进入开发者或 API 设置页面。
  • 生成一个新的 API 密钥,并妥善保存。

步骤 2:了解 API 类型和请求限制

BlockATM 提供了两种主要的 API 类型:

  • Public API:用于非敏感操作,适合前端调用。
  • Server-to-Server API:用于敏感操作(如创建订单),需要从后端服务器调用。

请求限制:

每个 API 密钥每分钟最多允许 100 次请求,超过限制会返回 429 错误。如果继续超限访问,会返回 418 错误并阻止后续请求。

步骤 3:设置请求头

在调用 BlockATM 的 API 时,需要在请求头中包含以下信息:

  • BlockATM-API-Key:你的 API 密钥。
  • BlockATM-Request-Time:请求的时间戳,精确到毫秒。
  • BlockATM-Signature-V1:对请求数据进行签名(仅适用于创建订单 API)。
  • BlockATM-Rec_Window:时间窗口,默认为 30000 毫秒。

步骤 4:生成支付二维码

我们将使用 Create QRCode Payment API 来生成 USDT 支付二维码。

API 请求示例
以下是一个 Python 示例代码,展示如何调用该 API:

import requests
import time
import json
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric.utils import encode_dss_signature
from cryptography.hazmat.backends import default_backend
 
# 你的 API 密钥
API_KEY = "your_api_key_here"
 
# 生成密钥对
def generate_key_pair():
    private_key = ec.generate_private_key(ec.SECP256R1(), default_backend())
    public_key = private_key.public_key()
    return private_key, public_key
 
# 对请求数据进行签名
def sign_request(private_key, data):
    signature = private_key.sign(data.encode(), ec.ECDSA(hashes.SHA256()))
    return signature.hex()
 
# 创建支付二维码
def create_qr_code_payment():
    url = "https://backend.blockatm.net/api/v1/payment/createQrOrder"
    headers = {
        "accept": "application/json",
        "content-type": "application/json",
        "BlockATM-API-Key": API_KEY,
        "BlockATM-Request-Time": str(int(time.time() * 1000)),  # 当前时间戳
    }
 
    # 请求参数
    payload = {
        "chainId": "1",  # 链 ID(例如:1 表示以太坊主网)
        "symbol": "USDT",  # 代币符号
        "amount": "100",  # 支付金额
    }
 
    # 对请求数据进行签名
    private_key, _ = generate_key_pair()
    signature = sign_request(private_key, json.dumps(payload, sort_keys=True))
    headers["BlockATM-Signature-V1"] = signature
 
    # 发送请求
    response = requests.post(url, headers=headers, json=payload)
    return response.json()
 
# 调用函数并打印结果
result = create_qr_code_payment()
print(result)

参数说明

  • chainId:区块链网络的 ID(例如:1 表示以太坊主网)。
  • symbol:代币符号(例如:USDT)。
  • amount:支付金额(例如:100 表示 100 USDT)。

响应示例
如果请求成功,API 会返回以下格式的 JSON 数据:

{
    "cashierUrl": "https://blockatm.net/cashier/order123",
    "toAddress": "0x1234567890abcdef1234567890abcdef12345678"
}
  • cashierUrl:收银台 URL,用户可以通过扫描二维码访问。
  • toAddress:USDT 收款地址。

步骤 5:查询智能合约的收款记录

BlockATM 提供了 Query Smart Contract Payment API,用于查询通过智能合约模式支付的订单信息。

API 请求示例
以下是一个 Python 示例代码,展示如何调用该 API:

import requests
 
# 查询智能合约支付记录
def query_contract_payment():
    url = "https://backend.blockatm.net/api/v1/payment/contractPayment"
    headers = {
        "accept": "application/json",
        "BlockATM-API-Key": API_KEY,  # 你的 API 密钥
    }
 
    # 发送请求
    response = requests.get(url, headers=headers)
    return response.json()
 
# 调用函数并打印结果
payment_info = query_contract_payment()
print(payment_info)

响应示例
如果请求成功,API 会返回以下格式的 JSON 数据:

{
    "orderId": "123456",
    "status": "completed",
    "amount": "100",
    "symbol": "USDT",
    "chainId": "1",
    "toAddress": "0x1234567890abcdef1234567890abcdef12345678",
    "timestamp": "1633024800000"
}

orderId:订单 ID。

status:订单状态(例如:completed 表示已完成)。

amount:支付金额。

symbol:代币符号。

chainId:链 ID。

toAddress:收款地址。

timestamp:支付时间戳。

步骤 6:处理支付结果

  • 用户支付:用户扫描二维码并完成支付。
  • 监听支付状态:使用 BlockATM 提供的 Query API 查询订单状态,确认支付是否成功。

步骤 7:错误处理

  • 429 错误:请求频率过高,需降低请求频率。
  • 418 错误:请求被阻止,需检查 API 密钥和请求参数。
  • 其他错误:根据 API 返回的错误信息进行排查。

TickTank
2 声望1 粉丝

高频tick数据行情接口