导读: TP钱包是国内用户量领先的多链去中心化非托管钱包,累计服务超千万用户,支持以太坊、BSC、Polygon、Solana等数十条主流公链,为用户提供链上转账、NFT收藏、DeFi交互等核心链上服务,而TP钱包开放平台则为开发者开放了完善的API接口,无需从零搭建链上交互底层逻辑,就能快速集成钱包连接、...
随着Web3生态的快速发展,多链去中心化钱包成为开发者对接区块链生态的核心入口之一,TP钱包作为国内头部的多链非托管钱包,已覆盖以太坊、BSC、Polygon等数十条主流公链,累计服务全球超千万用户,其开放平台为开发者提供了完善的API接口体系,无需从零构建链上交互底层逻辑,即可快速集成钱包连接、交易签名、链上数据查询等能力,有效降低Web3应用的开发与接入门槛,本文将从前期权限申请到实战编码,完整讲解TP钱包API调用的全流程。
前期准备:打通TP钱包开放平台权限
在调用TP钱包API前,需完成开发环境配置、权限申请与基础校验:
- 注册开放平台账号并创建应用
访问TP钱包开放平台官网,使用TP钱包账号登录后,可选择创建个人或企业开发者应用:个人开发者仅需实名认证即可快速通过审核,企业开发者需补充营业执照等资质材料,创建完成后将自动获得唯一的
appId与appSecret,二者是后续API鉴权的核心凭证,严禁硬编码到代码中。 - 配置开发环境
前端开发可直接使用TP钱包官方JS SDK,推荐配置Node.js 16+版本并开启HTTPS本地调试(Web3应用需HTTPS环境,本地可使用
localhost或配置自签名证书);后端开发可通过RESTful API对接,支持Java、Python、Go等任意支持HTTP请求的开发语言,建议提前配置对应语言的HTTP客户端工具。 - 明确目标公链与链ID 提前确认对接的公链ID,避免出现链ID不匹配的调用错误: | 公链名称 | 主网链ID | 测试网链ID | |----------------|---------|------------------| | 以太坊主网 | 1 | 11155111(Sepolia) | | BSC主网 | 56 | 97(BSC Testnet) | | Polygon主网 | 137 | 80001(Mumbai) | | Solana主网 | 101 | 102(Devnet) |
TP钱包API核心模块拆解
TP钱包开放平台的API覆盖Web3应用的全交互场景,主要分为四大核心模块:
- 账户交互类API:作为DApp集成钱包的基础接口,支持一键连接钱包、获取用户钱包地址、查询用户授权状态,是实现Web3用户登录的核心能力。
- 链上查询类API:无需发起链上交易即可获取静态链上数据,支持查询钱包余额、交易记录、区块高度、合约持仓等信息,常用于构建用户资产看板。
- 交易签名类API:封装了链上交易的签名与广播逻辑,支持发起转账、合约调用等交易请求,通过TP钱包完成用户授权签名后自动广播到目标链,无需开发者自行处理签名算法与链上广播逻辑。
- DApp授权类API:支持获取用户授权后的链上画像数据,包括NFT藏品列表、DeFi持仓、跨链转账记录等,帮助开发者快速构建用户资产展示页面。
实战编码:两种场景下的TP钱包API调用
前端场景:DApp内集成钱包连接
这是最常见的TP钱包API调用场景,用于在Web3 DApp中实现一键连接钱包、获取用户地址与链上数据。
步骤1:安装官方SDK
使用npm或yarn安装TP钱包官方前端SDK:
npm install @tp-lab/tp-wallet-js-sdk --save
步骤2:完整前端代码示例
import TPWallet from '@tp-lab/tp-wallet-js-sdk';
import { ethers } from 'ethers';
// 初始化SDK,填入申请到的appId与目标链ID
const tpWallet = new TPWallet({
appId: "YOUR_APP_ID",
chainId: 56 // 对接BSC主网
});
// 检测TP钱包是否已安装
function checkWalletInstalled() {
return !!window.tpwallet;
}
// 一键连接TP钱包
async function connectTPWallet() {
if (!checkWalletInstalled()) {
window.open('https://www.tpwallet.io/', '_blank');
return;
}
try {
// 唤起钱包连接弹窗并获取用户地址
const userAccount = await tpWallet.connect();
// 自动切换到目标链,避免链ID不匹配
await tpWallet.switchChain(56);
console.log("用户钱包地址:", userAccount.address);
console.log("当前连接链ID:", userAccount.chainId);
return userAccount.address;
} catch (error) {
console.error("钱包连接失败:", error.message);
}
}
// 查询并转换钱包余额单位(将wei转换为BNB)
async function getWalletBalance(address) {
const balanceWei = await tpWallet.getBalance(address);
const balanceBnb = ethers.formatEther(balanceWei);
console.log("钱包BNB余额:", balanceBnb);
return balanceBnb;
}
补充说明:前端调用时需注意跨域问题,若使用本地开发环境,建议通过后端代理转发API请求。
后端场景:批量链上数据处理
如果需要批量查询多个用户的链上余额、批量发起转账交易,则需使用TP钱包开放平台的RESTful后端API,需通过HMAC-SHA256签名完成鉴权。
步骤1:签名鉴权逻辑
后端调用API时需严格遵循官方签名规则:
- 将所有请求参数按字典序排序后拼接为
key1=value1&key2=value2格式的字符串 - 使用
appSecret作为密钥,通过HMAC-SHA256算法对拼接后的字符串进行签名 - 将签名结果添加到请求参数中,与其他参数一同发送给开放平台接口
步骤2:多语言后端代码示例
Node.js版本
const axios = require('axios');
const crypto = require('crypto');
require('dotenv').config();
// 从环境变量读取密钥,避免硬编码
const APP_ID = process.env.TP_APP_ID;
const APP_SECRET = process.env.TP_APP_SECRET;
// 区分测试网与主网API地址
const API_BASE_URL = process.env.NODE_ENV === 'production'
? "https://openapi.tpwallet.io/v1"
: "https://openapi.test.tpwallet.io/v1";
// 生成API签名
function generateApiSign(params) {
const sortedParams = Object.keys(params)
.sort()
.map(key => `${key}=${params[key]}`)
.join('&');
return crypto.createHmac('sha256', APP_SECRET)
.update(sortedParams)
.digest('hex');
}
// 批量并行查询用户BSC余额
async function batchGetWalletBalance(addressList) {
const tasks = addressList.map(async (address) => {
const params = {
app_id: APP_ID,
address: address,
chain_id: 56,
timestamp: Date.now()
};
const sign = generateApiSign(params);
try {
const res = await axios.get(`${API_BASE_URL}/chain/balance`, {params: {...params, sign}});
return {address, balance: res.data.data};
} catch (error) {
console.error(`查询地址${address}余额失败:`, error.response?.data || error.message);
return {address, balance: null, error: error.message};
}
});
return Promise.all(tasks);
}
Python版本
import requests
import hashlib
import hmac
import os
from dotenv import load_dotenv
import time
load_dotenv()
APP_ID = os.getenv('TP_APP_ID')
APP_SECRET = os.getenv('TP_APP_SECRET')
API_BASE_URL = "https://openapi.test.tpwallet.io/v1" if os.getenv('NODE_ENV') != 'production' else "https://openapi.tpwallet.io/v1"
def generate_api_sign(params):
sorted_params = sorted(params.items(), key=lambda x: x[0])
sign_str = '&'.join([f"{k}={v}" for k, v in sorted_params])
return hmac.new(APP_SECRET.encode(), sign_str.encode(), hashlib.sha256).hexdigest()
def batch转载请注明出处:qbadmin,如有疑问,请联系()。
本文地址:https://www.jbh.org.cn/xsdd/590.html
