跳到主要内容
TelegramMar 28, 2026

2026年在TON上构建:使用TON Pay SDK在Telegram Mini Apps中实现加密支付

OS
Open Soft Team

Engineering Team

2026年的TON生态系统

The Open Network(TON)已从一个具有Telegram背景的区块链项目发展成为全球最活跃的加密货币生态系统之一。截至2026年3月,数据令人瞩目:

  • 500M+月活跃用户遍布Telegram Mini Apps
  • 3,600+活跃Mini Apps在Telegram Mini App目录中上架
  • 400M+ TON钱包通过Telegram Wallet、Tonkeeper和TON Space创建
  • 42亿美元总锁仓价值在TON DeFi协议中
  • 每日1200万笔链上交易在TON主网上

这些数字使TON成为按活跃用户数计算分布最广泛的区块链,超越了Ethereum(包括L2)和Solana。增长的驱动力来自单一因素:Telegram集成。Telegram全球拥有950M+月活用户,即使很小的转化率也能产生庞大的数字。

为什么选择TON进行支付?

对于构建支付功能应用的开发者,TON相比其他区块链提供三大结构性优势:

  1. 分发 — 您的Mini App可在Telegram内被发现,这是用户每天已经在使用的消息平台。无需应用商店审核,无下载障碍,无需安装钱包。
  2. 近零费用 — TON交易费平均为$0.005-0.01,使微支付和应用内购买在经济上可行,无需批处理或L2复杂性。
  3. 亚秒级最终性 — TON的分片架构实现约5秒的出块时间,在1-2个区块内达到实际最终性。用户在10秒内看到确认的支付。

TON Pay SDK:架构概览

TON Pay SDK是Telegram Mini Apps的官方支付集成库。于2025年第四季度发布,它提供统一的API用于:

  • TON Connect — 钱包认证
  • Toncoin支付 — 原生TON转账
  • Jetton支付 — TRC-20代币标准:USDT、NOT和自定义代币
  • 订阅计费 — 通过预授权智能合约进行循环Jetton收费
  • 支付收据 — 带元数据的链上支付证明

SDK以npm包形式提供(@tonconnect/pay-sdk),支持客户端(浏览器)和服务端(Node.js)使用。

前提条件

在集成TON Pay SDK之前,确保您拥有:

  1. 具有Mini App功能的已注册Telegram Bot(@BotFather/newapp
  2. 用于接收支付的TON钱包地址(商户钱包)
  3. Node.js 20+和TypeScript 5.x开发环境
  4. 对Telegram Mini App API的基本了解(window.Telegram.WebApp

第一步:TON Connect钱包认证

TON Connect是将TON钱包连接到dApp和Mini Apps的标准协议。它作为认证层 — 在接受支付之前,您需要知道用户想从哪个钱包支付。

设置TON Connect

import { TonConnect } from "@tonconnect/sdk";
import { TonPaySDK } from "@tonconnect/pay-sdk";

// 使用您的清单初始化TON Connect
const tonConnect = new TonConnect({
  manifestUrl: "https://yourapp.com/tonconnect-manifest.json",
});

// 检查用户是否有之前连接的钱包
const existingWallet = tonConnect.wallet;
if (existingWallet) {
  console.log("已连接:", existingWallet.account.address);
}

钱包连接流程

钱包连接流程因用户的钱包提供商而异:

import { toUserFriendlyAddress } from "@tonconnect/sdk";

async function connectWallet(): Promise<string> {
  const walletList = await tonConnect.getWallets();

  // 对于Telegram Mini Apps,优先使用TON Space(内置)
  const tonSpace = walletList.find(
    (w) => w.appName === "tonspace"
  );

  if (tonSpace) {
    await tonConnect.connect({
      jsBridgeKey: tonSpace.jsBridgeKey,
    });
  } else {
    const universalLink = tonConnect.connect({
      universalLink: walletList[0].universalLink,
      bridgeUrl: walletList[0].bridgeUrl,
    });
    window.open(universalLink, "_blank");
  }

  return new Promise((resolve) => {
    tonConnect.onStatusChange((wallet) => {
      if (wallet) {
        const address = toUserFriendlyAddress(
          wallet.account.address
        );
        resolve(address);
      }
    });
  });
}

会话持久化

TON Connect会话在Mini App重启之间保持持久。SDK将会话数据存储在localStorage中。在后续启动时,在提示用户之前检查现有连接:

async function initAuth(): Promise<string | null> {
  await tonConnect.restoreConnection();
  if (tonConnect.connected && tonConnect.wallet) {
    return toUserFriendlyAddress(
      tonConnect.wallet.account.address
    );
  }
  return null;
}

第二步:接受Toncoin支付

钱包连接后,您可以使用TON Pay SDK请求原生TON转账。

简单支付请求

import { TonPaySDK, PaymentRequest } from "@tonconnect/pay-sdk";

const tonPay = new TonPaySDK({
  tonConnect,
  merchantWallet: "EQD...您的商户地址",
  webhookUrl: "https://yourapi.com/webhooks/ton-pay",
});

async function requestPayment(
  amount: number,
  orderId: string
): Promise<string> {
  const payment: PaymentRequest = {
    amount: amount.toString(),
    payload: orderId,
    description: `订单 #${orderId}`,
  };

  const result = await tonPay.requestPayment(payment);

  if (result.status === "confirmed") {
    return result.txHash;
  } else if (result.status === "rejected") {
    throw new Error("支付被用户拒绝");
  } else {
    throw new Error(`支付失败: ${result.error}`);
  }
}

服务端支付验证

永远不要仅信任客户端支付确认。在后端验证每笔支付:

import { TonClient } from "@ton/ton";
import { Address, fromNano } from "@ton/core";

const tonClient = new TonClient({
  endpoint: "https://toncenter.com/api/v2/jsonRPC",
  apiKey: process.env.TONCENTER_API_KEY,
});

async function verifyPayment(
  txHash: string,
  expectedAmount: string,
  expectedPayload: string,
  merchantAddress: string
): Promise<boolean> {
  const tx = await tonClient.getTransaction(
    Address.parse(merchantAddress),
    txHash
  );

  if (!tx) return false;

  const receivedAmount = fromNano(tx.inMessage?.value ?? 0n);
  if (parseFloat(receivedAmount) < parseFloat(expectedAmount)) {
    return false;
  }

  const payload = tx.inMessage?.body?.toString() ?? "";
  if (payload !== expectedPayload) {
    return false;
  }

  return true;
}

第三步:Jetton(代币)支付

Jetton是TON上相当于ERC-20的代币。最常用于支付的Jetton是TON上的USDT(Tether),截至2026年3月在TON网络上流通量超过12亿美元。

请求Jetton支付

import { JettonPaymentRequest } from "@tonconnect/pay-sdk";

async function requestUSDTPayment(
  amount: number,
  orderId: string
): Promise<string> {
  const USDT_MASTER = "EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs";

  const payment: JettonPaymentRequest = {
    jettonMaster: USDT_MASTER,
    amount: (amount * 1e6).toString(),
    payload: orderId,
    description: `$${amount} USDT — 订单 #${orderId}`,
    forwardTonAmount: "50000000",
  };

  const result = await tonPay.requestJettonPayment(payment);

  if (result.status === "confirmed") {
    return result.txHash;
  }
  throw new Error(`Jetton支付失败: ${result.error}`);
}

第四步:订阅计费

TON Pay SDK通过预授权订阅合约支持循环支付。用户批准最大收费金额和频率,您的后端可以在无需额外用户交互的情况下触发收费。

import { SubscriptionRequest } from "@tonconnect/pay-sdk";

async function createSubscription(
  userId: string
): Promise<string> {
  const subscription: SubscriptionRequest = {
    jettonMaster: USDT_MASTER,
    amount: "4990000",
    period: 30 * 24 * 60 * 60,
    maxCharges: 12,
    payload: `sub-${userId}`,
    description: "高级版 — $4.99/月",
  };

  const result = await tonPay.createSubscription(subscription);

  if (result.status === "active") {
    return result.subscriptionAddress;
  }
  throw new Error("订阅创建失败");
}

Telegram Mini Apps的变现策略

支付只是变现拼图的一部分。以下是成功的Mini Apps如何组合多种收入流:

1. Telegram广告平台

Telegram的原生广告平台允许Mini Apps展示广告并以TON赚取收入。集成需要通过@AdsBot注册为发布者。

顶级Mini Apps报告在Tier 1国家的激励视频广告eCPM为$5-15

2. 通过Telegram Stars进行应用内购买

Telegram Stars是Telegram的内置虚拟货币,自2024年起可用。用户用法币(Apple Pay、Google Pay、信用卡)购买Stars并在Mini Apps中消费。开发者获得70%的Stars收入。

3. 加密原生变现

将TON Pay SDK支付与DeFi机制结合:

  • 代币门控访问 — 要求持有特定Jetton或SBT(灵魂绑定代币)以访问高级功能
  • NFT市场 — 销售数字收藏品(TON NFT使用TEP-62标准)
  • 质押奖励 — 让用户在Mini App的智能合约中质押TON或Jetton以获取收益
  • 推荐佣金 — 通过智能合约以Jetton支付推荐奖金

变现模式比较

模式支付方式开发者份额用户摩擦最适合
Telegram广告广告展示广告收入的50-70%低(被动)高DAU免费应用
Telegram Stars法币 → Stars70%中等(应用内购买)数字商品、休闲游戏
TON Pay(Toncoin)加密钱包100%(减去gas)较高(需要钱包)加密原生用户
TON Pay(USDT)加密钱包100%(减去gas)较高(需要钱包)稳定价值交易
订阅加密钱包100%(减去gas)中等(一次性授权)SaaS、高级内容

生产部署检查清单

在启动支付功能的Mini App之前:

  1. 商户钱包安全 — 使用多签钱包(如TON Safe)接收支付。切勿将单密钥热钱包用于商户资金。
  2. 支付验证 — 始终在服务端验证支付。检查金额、payload和发送者地址。
  3. 错误处理 — 优雅处理网络超时、被拒绝的交易和余额不足。向用户显示清晰的错误消息。
  4. 退款政策 — 实施退款机制。TON交易不可逆,因此退款需要单独的转出交易。
  5. 速率限制 — 保护支付webhook端点免受滥用。验证webhook签名。
  6. 日志记录 — 记录所有支付事件及交易哈希以用于争议解决。
  7. 测试 — 使用TON测试网进行开发。TON Pay SDK通过配置标志支持测试网模式。

常见问题

TON Mini Apps能触达多少用户?

Telegram拥有950M+月活用户。Mini Apps无需安装即可被所有人访问。顶级Mini Apps(Notcoin、Hamster Kombat)已达到3000-4000万用户。分发良好的Mini App的现实可触达市场为100-1000万用户。

TON支付的交易费是多少?

原生TON转账费用约为0.005-0.01 TON(按当前价格0.01-0.02)。Jetton转账由于额外的智能合约执行略贵,通常为0.03-0.05 TON(0.06-0.10)。费用由发送方支付,而非商户。

我可以在Telegram Mini App中接受法币支付吗?

可以,通过Telegram Stars(内置)或第三方支付提供商。Telegram Stars使用Telegram的原生支付基础设施,支持Apple Pay、Google Pay和信用卡。

接受TON支付需要KYC吗?

对于商户:取决于您的管辖区和交易量。大多数国家在超过一定门槛时需要资金传输或支付处理许可。对于用户:创建TON钱包不需要KYC,但用户购买TON的中心化交易所会执行KYC。

TON和Ethereum在支付方面有什么区别?

TON提供更低费用(0.01 vs Ethereum L1上的0.50-5.00)、更快最终性(10秒 vs 12-15分钟)和内置的Telegram分发。Ethereum拥有更大的DeFi生态系统、更多机构采用和更强的去中心化保证。对于面向消费者的支付应用,TON的Telegram集成是决定性优势。

如何处理争议和退款?

区块链支付不可逆 — 没有退款。您必须实施自己的退款和争议解决系统。最佳实践:在将资金释放到商户钱包之前,将资金保留在托管智能合约中进行争议期(24-72小时)。