メインコンテンツへスキップ

デジタルウォレット

東南アジアで最も人気のあるデジタルウォレットからの支払いを受け付け、タイ、シンガポール、マレーシア、フィリピンなどの数百万人の顧客にリーチします。

概要

デジタルウォレット(e-wallet)は、顧客がスマートフォンアプリを使用して支払いを行うことができるモバイル決済方法です。これらのウォレットは東南アジアで非常に人気があり、モバイルファーストの消費者の間で高い普及率を誇ります。

デジタルウォレットを選ぶ理由

  • 🚀 成長市場 - 東南アジアの消費者の60%以上がe-walletを定期的に使用
  • 即時確認 - リアルタイムの支払い検証
  • 📱 モバイルファースト - スマートフォンユーザーに最適化
  • 🔒 安全 - 加盟店にカード情報を共有しない
  • 💰 低摩擦 - ワンタップチェックアウト体験
  • 🌏 地域リーチ - 現地の支払い選好にアクセス

サポートされているデジタルウォレット

タイ 🇹🇭

ウォレットユーザー通貨返金可能決済
TrueMoney ウォレット3000万人以上THB✅ はい1-3日
Rabbit LINE Pay1200万人以上THB✅ はい1-3日
ShopeePay800万人以上THB, SGD, MYR✅ はい1-3日

シンガポール 🇸🇬

ウォレットユーザー通貨返金可能決済
GrabPay1億8700万人以上SGD, MYR, THB✅ はい1-3日
ShopeePay800万人以上SGD, THB, MYR✅ はい1-3日

マレーシア 🇲🇾

ウォレットユーザー通貨返金可能決済
Touch 'n Go eWallet1800万人以上MYR✅ はい1-3日
Boost900万人以上MYR✅ はい1-3日
GrabPay1億8700万人以上MYR, SGD, THB✅ はい1-3日
ShopeePay800万人以上MYR, SGD, THB✅ はい1-3日

インドネシア 🇮🇩

ウォレットユーザー通貨返金可能決済
DANA1億5000万人以上IDR✅ はい1-3日
ShopeePay800万人以上IDR✅ はい1-3日

フィリピン 🇵🇭

ウォレットユーザー通貨返金可能決済
GCash8600万人以上PHP✅ はい1-3日

韓国 🇰🇷

ウォレットユーザー通貨返金可能決済
KakaoPay3000万人以上KRW✅ はい1-3日

日本 🇯🇵

ウォレットユーザー通貨返金可能決済
PayPay6000万人以上JPY✅ はい1-3日

中国 🇨🇳

ウォレットユーザー通貨返金可能決済
Alipay10億人以上CNY, 複数✅ はい1-3日
Alipay+13億人以上複数✅ はい1-3日
WeChat Pay13億人以上CNY✅ はい1-3日

デジタルウォレットの仕組み

一般的なフロー:

  1. 顧客がチェックアウト時に希望するウォレットを選択
  2. 加盟店がOmise APIを介してsourceとchargeを作成
  3. 顧客がウォレット認証ページにredirect
  4. ウォレットアプリが開く(モバイルでdeep link経由)
  5. 顧客が認証して支払いを確認
  6. 支払いが即座に処理される
  7. 顧客が加盟店サイトに戻る
  8. 加盟店がwebhook通知を受信

平均完了時間: 1-3分

実装の概要

基本的な統合

const omise = require('omise')({
secretKey: 'skey_test_YOUR_SECRET_KEY'
});

// Create source for wallet payment
const source = await omise.sources.create({
type: 'grabpay', // or truemoney, shopeepay, etc.
amount: 50000, // Amount in smallest currency unit
currency: 'THB' // THB, SGD, MYR, etc.
});

// Create charge
const charge = await omise.charges.create({
amount: 50000,
currency: 'THB',
source: source.id,
return_uri: 'https://yourdomain.com/payment/callback'
});

// Redirect customer to wallet
res.redirect(charge.authorize_uri);

returnとwebhookの処理

// Handle return from wallet
app.get('/payment/callback', async (req, res) => {
const charge = await omise.charges.retrieve(req.query.charge_id);

if (charge.status === 'successful') {
res.redirect('/payment-success');
} else {
res.redirect('/payment-failed');
}
});

// Handle webhook (recommended)
app.post('/webhooks/omise', (req, res) => {
const event = req.body;

if (event.key === 'charge.complete') {
const charge = event.data;

if (charge.status === 'successful') {
// Process order
fulfillOrder(charge.metadata.order_id);
}
}

res.sendStatus(200);
});

比較マトリックス

機能GrabPayTrueMoneyShopeePayTouch 'n GoBoostDANAGCash
地域SG/MY/THTH複数MYMYIDPH
ユーザー1億8700万人以上3000万人以上800万人以上1800万人以上900万人以上1億5000万人以上8600万人以上
即時
モバイルのみ
返金全額/部分全額/部分全額/部分全額/部分全額/部分全額/部分全額/部分
返金期間30日30日30日30日30日30日30日

適切なウォレットの選択

市場別

タイ

  • プライマリ: TrueMoney(最高の普及率)
  • セカンダリ: Rabbit LINE Pay、ShopeePay
  • ユースケース: すべてのeコマース、サービス

シンガポール

  • プライマリ: GrabPay(配車サービスユーザー)
  • セカンダリ: ShopeePay(eコマース)
  • ユースケース: フードデリバリー、交通、ショッピング

マレーシア

  • プライマリ: Touch 'n Go(最大のユーザーベース)
  • セカンダリ: Boost、GrabPay
  • ユースケース: 交通、駐車場、小売

インドネシア

  • プライマリ: DANA(最大のウォレット)
  • セカンダリ: ShopeePay
  • ユースケース: eコマース、配車サービス、サービス

フィリピン

  • プライマリ: GCash(支配的なプレーヤー)
  • ユースケース: 請求書、送金、eコマース

日本

  • プライマリ: PayPay(6000万人以上のユーザー)
  • ユースケース: 小売、レストラン、サービス

韓国

  • プライマリ: KakaoPay(Kakaoエコシステム)
  • ユースケース: メッセージングプラットフォーム統合

ユースケース別

eコマース

  • TrueMoney、ShopeePay、Touch 'n Go、DANA、GCash

フードデリバリー

  • GrabPay、ShopeePay、TrueMoney

交通

  • GrabPay、Touch 'n Go、TrueMoney

デジタルサービス

  • すべてのウォレットに適している

観光と中国の顧客

  • Alipay、WeChat Pay、Alipay+

一般的な実装パターン

マルチウォレットチェックアウト

// Display available wallets based on currency
function getAvailableWallets(currency, country) {
const wallets = {
'THB': ['truemoney', 'rabbit_linepay', 'shopeepay'],
'SGD': ['grabpay', 'shopeepay'],
'MYR': ['touch_n_go', 'boost', 'grabpay', 'shopeepay'],
'IDR': ['dana', 'shopeepay'],
'PHP': ['gcash'],
'JPY': ['paypay'],
'KRW': ['kakaopay']
};

return wallets[currency] || [];
}

// Create payment with selected wallet
async function createWalletPayment(walletType, amount, currency) {
const source = await omise.sources.create({
type: walletType,
amount: amount,
currency: currency
});

const charge = await omise.charges.create({
amount: amount,
currency: currency,
source: source.id,
return_uri: `${baseUrl}/payment/callback`
});

return charge.authorize_uri;
}

モバイル検出

// Check if user is on mobile
function isMobileDevice() {
return /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
}

// Show wallet options based on device
if (!isMobileDevice()) {
// Hide mobile-only wallets
document.querySelectorAll('.mobile-wallet').forEach(el => {
el.style.display = 'none';
});
}

金額の検証

// Validate amount for each wallet
const WALLET_LIMITS = {
grabpay: {
SGD: { min: 50, max: 50000 },
MYR: { min: 100, max: 150000 },
THB: { min: 2000, max: 5000000 }
},
truemoney: {
THB: { min: 2000, max: 5000000 }
},
shopeepay: {
THB: { min: 100, max: 5000000 },
SGD: { min: 10, max: 100000 },
MYR: { min: 100, max: 100000 }
}
// ... more wallets
};

function validateWalletAmount(walletType, amount, currency) {
const limits = WALLET_LIMITS[walletType]?.[currency];

if (!limits) {
return { valid: false, error: 'Wallet not available for currency' };
}

if (amount < limits.min) {
return { valid: false, error: `Minimum amount is ${limits.min}` };
}

if (amount > limits.max) {
return { valid: false, error: `Maximum amount is ${limits.max}` };
}

return { valid: true };
}

ベストプラクティス

1. 明確な指示を表示

顧客に何を期待するかを示します:

  • アプリの要件
  • ステップバイステップのプロセス
  • 推定完了時間
  • アプリがインストールされていない場合の代替方法

2. モバイルファーストデザイン

<div class="wallet-options">
<button class="wallet-button" data-wallet="grabpay">
<img src="/icons/grabpay.svg" alt="GrabPay">
<span>GrabPay</span>
<small>即時確認</small>
</button>
<!-- More wallet buttons -->
</div>

3. deep linkを適切に処理

function openWalletApp(authorizeUri) {
// Try opening wallet app
window.location = authorizeUri;

// Fallback if app not installed
setTimeout(() => {
if (!document.hidden) {
showAppInstallPrompt();
}
}, 2500);
}

4. webhookを実装

常にwebhookを主要な通知方法として使用します:

app.post('/webhooks/omise', async (req, res) => {
const event = req.body;

// Verify webhook signature
if (!verifyWebhookSignature(req)) {
return res.sendStatus(401);
}

if (event.key === 'charge.complete') {
await processPayment(event.data);
}

res.sendStatus(200);
});

5. 地域オプションを表示

// Detect customer location
const country = detectCountry(); // From IP or user selection

// Show relevant wallets
const walletsByCountry = {
'TH': ['truemoney', 'rabbit_linepay', 'shopeepay'],
'SG': ['grabpay', 'shopeepay'],
'MY': ['touch_n_go', 'boost', 'grabpay'],
'ID': ['dana', 'shopeepay'],
'PH': ['gcash']
};

displayWallets(walletsByCountry[country]);

よくある問題とトラブルシューティング

問題: アプリがインストールされていない

解決策:

function checkWalletApp(walletType) {
const appLinks = {
grabpay: {
ios: 'https://apps.apple.com/app/grab/id647268330',
android: 'https://play.google.com/store/apps/details?id=com.grabtaxi.passenger'
},
truemoney: {
ios: 'https://apps.apple.com/app/truemoney-wallet/id572488921',
android: 'https://play.google.com/store/apps/details?id=com.truemoney.wallet'
}
// ... more wallets
};

return appLinks[walletType];
}

問題: 残高不足

解決策: 明確なエラーを表示して代替手段を提供:

if (charge.failure_code === 'insufficient_balance') {
showMessage('ウォレットの残高が不足しています。チャージするか、別の支払い方法を選択してください。');
showAlternativePaymentMethods();
}

問題: 支払いタイムアウト

解決策: 適切なタイムアウトを設定して再試行を許可:

const TIMEOUT = 15 * 60 * 1000; // 15 minutes

setTimeout(() => {
if (!paymentCompleted) {
showTimeoutMessage();
allowRetry();
}
}, TIMEOUT);

FAQ

どのデジタルウォレットをサポートすべきですか?

ターゲット市場に基づいてウォレットをサポート:

  • タイ: TrueMoney(必須)、Rabbit LINE Pay、ShopeePay
  • シンガポール: GrabPay、ShopeePay
  • マレーシア: Touch 'n Go(必須)、Boost、GrabPay
  • インドネシア: DANA(必須)、ShopeePay
  • フィリピン: GCash(必須)

汎地域カバレッジの場合: GrabPay、ShopeePay、Alipay+

デジタルウォレットはデスクトップで動作しますか?

ほとんどのデジタルウォレットはモバイルのみで、顧客がそれぞれのアプリをインストールしている必要があります。デスクトップユーザーには、クレジットカードやオンラインバンキングなどの代替決済方法を提供する必要があります。

ウォレット支払いを返金できますか?

はい、すべてのサポートされているウォレットは、元の取引から通常30日以内に全額および部分返金を許可します。

決済にはどのくらいかかりますか?

ほとんどのデジタルウォレット支払いは1〜3営業日以内に決済されます。特定の決済スケジュールについては、Omiseダッシュボードを確認してください。

顧客が支払いを完了しない場合はどうなりますか?

chargeはタイムアウト期間(通常15分)後に期限切れになります。新しいchargeで顧客に再試行を許可できます。常に適切なタイムアウト処理を実装し、明確な指示を表示してください。

各ウォレットに個別の統合が必要ですか?

いいえ、すべてのデジタルウォレットは同じ統合パターン(source + charge + redirect)に従います。typeパラメータのみが変更されます。すべてのウォレットで機能する1つのフローを実装できます。

定期支払いのためにウォレット情報を保存できますか?

いいえ、デジタルウォレットは定期支払いのためのトークン化をサポートしていません。顧客は各支払いを承認する必要があります。定期請求の場合は、クレジットカードまたは口座振替方法を使用してください。

関連リソース

次のステップ

  1. ウォレットを選択 - ターゲット市場に基づいて選択
  2. 統合を実装 - 個別のウォレットガイドに従う
  3. 徹底的にテスト - 実際のモバイルデバイスでテスト
  4. webhookを設定 - 信頼性の高い支払い通知を確保
  5. 本番環境へ - 本番環境で有効化

始める準備はできましたか? ウォレットを選択:

  • GrabPay - 東南アジアのスーパーアプリ
  • TrueMoney - タイのNo.1ウォレット
  • Touch 'n Go - マレーシア最大のウォレット
  • DANA - インドネシアの主要ウォレット
  • GCash - フィリピンのトップウォレット