モバイル決済
Omiseのネイティブモバイル SDK を使用して、iOS、Android、React Native、Flutter 向けに組み込みのトークン化と最適化されたチェックアウトフローで、アプリ内決済を安全に受け付けます。
概要
Omise は、モバイルプラットフォーム向けのネイティブ SDK を提供しており、決済の収集、カードのトークン化、チェックアウトフローをモバイルアプリ内で完全に処理できます。SDK には、事前構築された UI コンポーネントとカスタム統合用の低レベル API が含まれています。
主な機能:
- ✅ ネイティブパフォーマンス - iOS と Android に最適化
- ✅ 安全なトークン化 - カードデータがサーバーに触れることはありません
- ✅ 事前構築 UI - すぐに使える決済フォーム
- ✅ カスタム統合 - UX の完全なコントロール
- ✅ 40以上の決済方法 - カード、ウォレット、QR、バンキング
- ✅ クロスプラットフォーム - React Native と Flutter のサポート
- ✅ 生体認証 - Touch ID、Face ID、指紋認証のサポート
利用可能な SDK
iOS SDK
iPhone および iPad アプリ向けのネイティブ Swift/Objective-C SDK:
機能:
- ネイティブ iOS 決済フォーム
- SwiftUI と UIKit のサポート
- Touch ID / Face ID 認証
- Apple Pay 統合
- iOS 13+ サポート
Android SDK
Android アプリ向けのネイティブ Kotlin/Java SDK:
機能:
- Material Design コンポーネント
- Jetpack Compose のサポート
- 生体認証
- Google Pay 統合
- Android 5.0+ (API 21+) サポート
React Native
クロスプラットフォーム React Native モジュール:
機能:
- iOS と Android で動作
- JavaScript/TypeScript API
- 一貫したクロスプラットフォームの動作
- Expo と互換性あり
Flutter
クロスプラットフォーム Flutter プラグイン:
機能:
- Dart API
- iOS と Android のサポート
- ネイティブパフォーマンス
- Flutter アプリとのシームレスな統合
比較
| 機能 | iOS | Android | React Native | Flutter |
|---|---|---|---|---|
| 言語 | Swift | Kotlin | JavaScript | Dart |
| 事前構築 UI | ✅ | ✅ | ✅ | ✅ |
| カスタム UI | ✅ | ✅ | ✅ | ✅ |
| カードトークン化 | ✅ | ✅ | ✅ | ✅ |
| 3D Secure | ✅ | ✅ | ✅ | ✅ |
| Apple Pay | ✅ | ❌ | ✅ (iOS) | ✅ (iOS) |
| Google Pay | ❌ | ✅ | ✅ (Android) | ✅ (Android) |
| 生体認証 | Touch/Face ID | 指紋認証 | 両方 | 両方 |
| 最小バージョン | iOS 13+ | API 21+ | 0.60+ | 2.0+ |
仕組み
セキュリティのメリット:
- カードデータがアプリのサーバーに触れることはありません
- PCI コンプライアンスが簡素化されます (SAQ A)
- HTTPS 経由の安全なトークン化
- デバイスにカードデータが保存されません
クイックスタート
iOS (Swift)
import OmiseSDK
// SDK を設定
let publicKey = "pkey_test_YOUR_PUBLIC_KEY"
OmiseSDK.configure(publicKey: publicKey)
// トークンを作成
let request = OmiseTokenRequest(
name: "John Doe",
number: "4242424242424242",
expirationMonth: 12,
expirationYear: 2027,
securityCode: "123"
)
OmiseSDK.createToken(request) { result in
switch result {
case .success(let token):
print("Token created: \(token.id)")
// トークンをサーバーに送信
self.chargeCard(tokenId: token.id)
case .failure(let error):
print("Error: \(error.localizedDescription)")
}
}
Android (Kotlin)
import co.omise.android.OmiseSDK
import co.omise.android.models.Token
// SDK を設定
OmiseSDK.initialize("pkey_test_YOUR_PUBLIC_KEY")
// トークンを作成
val request = TokenRequest(
name = "John Doe",
number = "4242424242424242",
expirationMonth = 12,
expirationYear = 2027,
securityCode = "123"
)
OmiseSDK.createToken(request) { result ->
when (result) {
is Result.Success -> {
val token = result.data
println("Token created: ${token.id}")
// トークンをサーバーに送信
chargeCard(token.id)
}
is Result.Error -> {
println("Error: ${result.exception.message}")
}
}
}
React Native
import Omise from 'omise-react-native';
// SDK を設定
Omise.configure('pkey_test_YOUR_PUBLIC_KEY');
// トークンを作成
const cardData = {
name: 'John Doe',
number: '4242424242424242',
expirationMonth: 12,
expirationYear: 2027,
securityCode: '123'
};
try {
const token = await Omise.createToken(cardData);
console.log('Token created:', token.id);
// サーバーに送信
await chargeCard(token.id);
} catch (error) {
console.error('Error:', error.message);
}
Flutter
import 'package:omise_flutter/omise_flutter.dart';
// SDK を設定
OmiseFlutter.initialize(publicKey: 'pkey_test_YOUR_PUBLIC_KEY');
// トークンを作成
final cardData = CardData(
name: 'John Doe',
number: '4242424242424242',
expirationMonth: 12,
expirationYear: 2027,
securityCode: '123',
);
try {
final token = await OmiseFlutter.createToken(cardData);
print('Token created: ${token.id}');
// サーバーに送信
await chargeCard(token.id);
} catch (e) {
print('Error: $e');
}
サーバーサイド統合
モバイルアプリからトークンを受け取った後、サーバーでカードをチャージします:
// Node.js サーバー
const omise = require('omise')({
secretKey: process.env.OMISE_SECRET_KEY
});
app.post('/charge', async (req, res) => {
try {
const { token, amount } = req.body;
const charge = await omise.charges.create({
amount: amount,
currency: 'THB',
card: token
});
res.json({
success: true,
charge_id: charge.id,
status: charge.status
});
} catch (error) {
res.status(500).json({
success: false,
error: error.message
});
}
});
決済方法
クレジット/デビットカード
すべての SDK はクレジットカードとデビットカードのトークン化をサポートしています:
// iOS
let card = OmiseCardRequest(
name: "John Doe",
number: "4242424242424242",
expirationMonth: 12,
expirationYear: 2027,
securityCode: "123"
)
モバイルバンキング
モバイルバンキングリダイレクトフローのサポート:
// Android
val source = SourceRequest(
type = "mobile_banking_kbank",
amount = 100000,
currency = "THB"
)
デジタルウォレット
ウォレット決済の統合:
// React Native
const source = await Omise.createSource({
type: 'truemoney',
amount: 50000,
currency: 'THB',
phoneNumber: '+66876543210'
});
Apple Pay (iOS のみ)
import PassKit
let paymentRequest = PKPaymentRequest()
paymentRequest.merchantIdentifier = "merchant.your.app"
paymentRequest.supportedNetworks = [.visa, .masterCard, .amex]
paymentRequest.merchantCapabilities = .capability3DS
paymentRequest.countryCode = "TH"
paymentRequest.currencyCode = "THB"
paymentRequest.paymentSummaryItems = [
PKPaymentSummaryItem(label: "Total", amount: NSDecimalNumber(value: 100.00))
]
let controller = PKPaymentAuthorizationViewController(paymentRequest: paymentRequest)
controller?.delegate = self
present(controller!, animated: true)
Google Pay (Android のみ)
val paymentDataRequest = PaymentDataRequest.newBuilder()
.setTransactionInfo(
TransactionInfo.newBuilder()
.setTotalPrice("100.00")
.setTotalPriceStatus(WalletConstants.TOTAL_PRICE_STATUS_FINAL)
.setCurrencyCode("THB")
.build()
)
.build()
val task = paymentsClient.loadPaymentData(paymentDataRequest)
3D Secure サポート
すべての SDK は 3D Secure 認証をサポートしています:
iOS
// 3DS は自動的に処理されます
let charge = try await createCharge(tokenId: token.id)
if let authorizeUri = charge.authorizeUri {
// 3DS 認証を表示
let safariVC = SFSafariViewController(url: authorizeUri)
present(safariVC, animated: true)
}
Android
// 3DS は自動的に処理されます
val charge = createCharge(token.id)
charge.authorizeUri?.let { uri ->
// 3DS 認証を表示
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(uri))
startActivity(intent)
}
ベストプラクティス
1. 公開鍵を安全に保存する
// iOS - Configuration を使用
struct Config {
static let omisePublicKey = "pkey_test_YOUR_KEY"
}
// Android - BuildConfig を使用
val publicKey = BuildConfig.OMISE_PUBLIC_KEY