メインコンテンツへスキップ
テレグラムMar 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月時点で、数字は説得力のある物語を語っています:

  • 月間5億人以上のアクティブユーザー — Telegram Mini Apps全体
  • 3,600以上のアクティブMini Apps — Telegram Mini Appカタログに掲載
  • 4億以上のTONウォレット — Telegram Wallet、Tonkeeper、TON Spaceを通じて作成
  • 42億ドルの総ロック額 — TON DeFiプロトコル
  • 毎日1,200万件のオンチェーン取引 — TONメインネット

これらの数字は、アクティブユーザー数でTONを最も広く普及したブロックチェーンにしており、Ethereum(L2を含む)やSolanaを上回っています。成長を推進しているのは単一の要因:Telegram統合です。全世界で月間9億5千万人以上のアクティブTelegramユーザーがおり、Mini Appやウォレット利用への小さな転換率でも膨大な数字を生み出します。

なぜ決済にTONを選ぶのか?

決済機能付きアプリケーションを構築する開発者にとって、TONは他のブロックチェーンに対して3つの構造的優位性を提供します:

  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年Q4にリリースされ、以下の統一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)の基本的な理解

ステップ1: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;
}

ステップ2: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;
}

ステップ3: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}`);
}

ステップ4:サブスクリプション課金

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国でのリワード動画広告で**$5-15のeCPM**を報告しています。

2. Telegram Starsによるアプリ内課金

Telegram StarsはTelegram内蔵の仮想通貨で、2024年から利用可能です。ユーザーはフィアット(Apple Pay、Google Pay、クレジットカード)でStarsを購入し、Mini Appsで使用します。開発者はStars収益の70%を受け取ります。

3. クリプトネイティブマネタイゼーション

TON Pay SDK決済とDeFiメカニクスを組み合わせます:

  • トークンゲートアクセス — プレミアム機能へのアクセスに特定のJettonまたはSBT(Soulbound Token)の保有を要求
  • NFTマーケットプレイス — デジタルコレクティブルの販売(TON NFTはTEP-62標準を使用)
  • ステーキング報酬 — ユーザーがMini AppのスマートコントラクトでTONやJettonをステーキングしてイールドを得る
  • 紹介コミッション — スマートコントラクトを通じてJettonで紹介ボーナスを支払う

マネタイゼーションモデル比較

モデル支払い方法開発者シェアユーザー摩擦最適な用途
Telegram広告広告インプレッション広告収益の50-70%低(受動的)高DAUの無料アプリ
Telegram Starsフィアット → Stars70%中程度(アプリ内課金)デジタル商品、カジュアルゲーム
TON Pay(Toncoin)暗号ウォレット100%(ガス代除く)やや高い(ウォレット必要)クリプトネイティブユーザー
TON Pay(USDT)暗号ウォレット100%(ガス代除く)やや高い(ウォレット必要)安定価値取引
サブスクリプション暗号ウォレット100%(ガス代除く)中程度(一回の承認)SaaS、プレミアムコンテンツ

本番デプロイメントチェックリスト

決済対応Mini Appをローンチする前に:

  1. 加盟店ウォレットのセキュリティ — 決済受け取りにマルチシグウォレット(例:TON Safe)を使用。シングルキーのホットウォレットは使用しない。
  2. 決済検証 — 常にサーバーサイドで決済を検証。金額、ペイロード、送信者アドレスを確認。
  3. エラーハンドリング — ネットワークタイムアウト、拒否されたトランザクション、残高不足を適切に処理。明確なエラーメッセージを表示。
  4. 返金ポリシー — 返金メカニズムを実装。TONトランザクションは不可逆のため、返金には別途送金が必要。
  5. レート制限 — 決済webhookエンドポイントを悪用から保護。webhook署名を検証。
  6. ロギング — 紛争解決のためにトランザクションハッシュ付きで全決済イベントを記録。
  7. テスト — 開発にはTONテストネットを使用。TON Pay SDKは設定フラグでテストネットモードをサポート。

よくある質問

TON Mini Appsはどれくらいのユーザーにリーチできますか?

Telegramは月間9億5千万人以上のアクティブユーザーを有しています。Mini Appsは何もインストールせずに全員がアクセスできます。トップMini Apps(Notcoin、Hamster Kombat)は3,000-4,000万ユーザーに達しています。適切に配信されたMini Appの現実的な到達可能市場は100-1,000万ユーザーです。

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はApple Pay、Google Pay、クレジットカードをサポートするTelegramのネイティブ決済インフラを使用します。

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時間)エスクロースマートコントラクトに資金を保持します。