TP钱包API调用实战教程,快速搭建Web3应用交互能力

作者:qbadmin 2026-08-14 浏览:1373
导读: TP钱包是国内用户量领先的多链去中心化非托管钱包,累计服务超千万用户,支持以太坊、BSC、Polygon、Solana等数十条主流公链,为用户提供链上转账、NFT收藏、DeFi交互等核心链上服务,而TP钱包开放平台则为开发者开放了完善的API接口,无需从零搭建链上交互底层逻辑,就能快速集成钱包连接、...

随着Web3生态的快速发展,多链去中心化钱包成为开发者对接区块链生态的核心入口之一,TP钱包作为国内头部的多链非托管钱包,已覆盖以太坊、BSC、Polygon等数十条主流公链,累计服务全球超千万用户,其开放平台为开发者提供了完善的API接口体系,无需从零构建链上交互底层逻辑,即可快速集成钱包连接、交易签名、链上数据查询等能力,有效降低Web3应用的开发与接入门槛,本文将从前期权限申请到实战编码,完整讲解TP钱包API调用的全流程。


前期准备:打通TP钱包开放平台权限

在调用TP钱包API前,需完成开发环境配置、权限申请与基础校验:

  1. 注册开放平台账号并创建应用 访问TP钱包开放平台官网,使用TP钱包账号登录后,可选择创建个人或企业开发者应用:个人开发者仅需实名认证即可快速通过审核,企业开发者需补充营业执照等资质材料,创建完成后将自动获得唯一的appIdappSecret,二者是后续API鉴权的核心凭证,严禁硬编码到代码中。
  2. 配置开发环境 前端开发可直接使用TP钱包官方JS SDK,推荐配置Node.js 16+版本并开启HTTPS本地调试(Web3应用需HTTPS环境,本地可使用localhost或配置自签名证书);后端开发可通过RESTful API对接,支持Java、Python、Go等任意支持HTTP请求的开发语言,建议提前配置对应语言的HTTP客户端工具。
  3. 明确目标公链与链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应用的全交互场景,主要分为四大核心模块:

  1. 账户交互类API:作为DApp集成钱包的基础接口,支持一键连接钱包、获取用户钱包地址、查询用户授权状态,是实现Web3用户登录的核心能力。
  2. 链上查询类API:无需发起链上交易即可获取静态链上数据,支持查询钱包余额、交易记录、区块高度、合约持仓等信息,常用于构建用户资产看板。
  3. 交易签名类API:封装了链上交易的签名与广播逻辑,支持发起转账、合约调用等交易请求,通过TP钱包完成用户授权签名后自动广播到目标链,无需开发者自行处理签名算法与链上广播逻辑。
  4. 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时需严格遵循官方签名规则:

  1. 将所有请求参数按字典序排序后拼接为key1=value1&key2=value2格式的字符串
  2. 使用appSecret作为密钥,通过HMAC-SHA256算法对拼接后的字符串进行签名
  3. 将签名结果添加到请求参数中,与其他参数一同发送给开放平台接口

步骤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

标签: