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

前提条件

Dodo Paymentsをモバイルアプリに統合する前に、以下を確認してください:
  • Dodo Paymentsアカウント: APIアクセスを持つアクティブなマーチャントアカウント
  • API認証情報: ダッシュボードからのAPIキーとWebhookシークレットキー
  • モバイルアプリプロジェクト: Android、iOS、React Native、またはFlutterアプリケーション
  • バックエンドサーバー: チェックアウトセッションの作成を安全に処理するため

統合ワークフロー

モバイル統合は、バックエンドがAPI呼び出しを処理し、モバイルアプリがユーザーエクスペリエンスを管理する安全な4ステッププロセスに従います。
1

バックエンド: チェックアウトセッションの作成

チェックアウトセッションAPIドキュメント

Node.js、Pythonなどを使用してバックエンドでチェックアウトセッションを作成する方法を学びます。専用のチェックアウトセッションAPIドキュメントで完全な例とパラメータの参照を確認してください。
セキュリティ: チェックアウトセッションはバックエンドサーバーで作成する必要があり、モバイルアプリでは作成しないでください。これにより、APIキーが保護され、適切な検証が保証されます。
2

モバイル: チェックアウトURLの取得

モバイルアプリがバックエンドに呼び出してチェックアウトURLを取得します:
func getCheckoutURL(productId: String, customerEmail: String, customerName: String) async throws -> String {
    let url = URL(string: "https://your-backend.com/api/create-checkout-session")!
    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    
    let requestData: [String: Any] = [
        "productId": productId,
        "customerEmail": customerEmail,
        "customerName": customerName
    ]
    request.httpBody = try JSONSerialization.data(withJSONObject: requestData)
    
    let (data, _) = try await URLSession.shared.data(for: request)
    let response = try JSONDecoder().decode(CheckoutResponse.self, from: data)
    return response.checkout_url
}
セキュリティ: モバイルアプリはバックエンドとのみ通信し、Dodo Payments APIとは直接通信しません。
3

モバイル: ブラウザでチェックアウトを開く

支払い処理のために、安全なアプリ内ブラウザでチェックアウトURLを開きます。

プラットフォーム固有の統合例を見る

Android、iOS、Flutterモバイル決済の完全なコードとセットアップ手順を表示します。
4

バックエンド: 支払い完了の処理

WebhookとリダイレクトURLを介して支払い完了を処理し、支払い状況を確認します。

プラットフォーム固有の統合

以下からモバイルプラットフォームを選択して、完全な実装例を確認してください:

Android統合

Chromeカスタムタブの実装

// Add Chrome Custom Tabs dependency to build.gradle
implementation 'androidx.browser:browser:1.5.0'

// In your Activity
class PaymentActivity : AppCompatActivity() {
    private var customTabsSession: CustomTabsSession? = null
    private var customTabsClient: CustomTabsClient? = null
    private var customTabsServiceConnection: CustomTabsServiceConnection? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // Initialize Custom Tabs
        customTabsServiceConnection = object : CustomTabsServiceConnection() {
            override fun onCustomTabsServiceConnected(name: ComponentName, client: CustomTabsClient) {
                customTabsClient = client
                customTabsClient?.warmup(0L)
                customTabsSession = customTabsClient?.newSession(object : CustomTabsCallback() {
                    override fun onNavigationEvent(navigationEvent: Int, extras: Bundle?) {
                        // Handle navigation events
                    }
                })
            }
            override fun onServiceDisconnected(name: ComponentName) {
                customTabsClient = null
            }
        }
        CustomTabsClient.bindCustomTabsService(
            this,
            "com.android.chrome",
            customTabsServiceConnection!!
        )
        // Get checkout URL from backend and launch
        lifecycleScope.launch {
            try {
                val checkoutURL = getCheckoutURL("prod_123", "[email protected]", "Customer Name")
                val customTabsIntent = CustomTabsIntent.Builder(customTabsSession)
                    .build()
                customTabsIntent.launchUrl(this@PaymentActivity, Uri.parse(checkoutURL))
            } catch (e: Exception) {
                // Handle error
                Log.e("PaymentActivity", "Failed to get checkout URL", e)
            }
        }
    }
}

ベストプラクティス

  • セキュリティ: アプリコードにAPIキーを保存しないでください。安全なストレージとSSLピンニングを使用します。
  • ユーザーエクスペリエンス: ローディングインジケーターを表示し、エラーを適切に処理し、明確なメッセージを提供します。
  • テスト: テストカードを使用し、ネットワークエラーをシミュレートし、さまざまなデバイスでテストします。

トラブルシューティング

一般的な問題

  • WebViewが支払いリンクを開かない: 支払いリンクが有効であり、HTTPSを使用していることを確認してください。
  • コールバックが受信されない: 戻りURLとWebhook設定を確認してください。
  • APIキーエラー: APIキーが正しく、必要な権限を持っていることを確認してください。

追加リソース

質問やサポートが必要な場合は、[email protected]までご連絡ください。