Skip to main content

Quick Start

バックエンドからチェックアウトへ、そして戻るまでの4つのステップ。

Platform Examples

Android、iOS、React Native、Flutter向けのコード。

Checkout Customization

モバイルで特に重要な14個のcheckout sessionパラメータ。

Mobile Recipes

よくある5つのモバイルシナリオに対応する完全なリクエストボディ。
モバイルアプリは、プラットフォームのシステムブラウザー画面でDodo Paymentsのホスト型チェックアウトを開き、チェックアウト終了時に顧客をアプリへ戻します。バックエンドがcheckout sessionを作成し、webhookからアクセス権を付与します。
Dodo Paymentsは、Android、iOS、React Native、Flutter向けの公式checkout SDKを提供しています。各SDKはcheckout URLを開き、復帰を取得し、1回の型付きstart(...)呼び出しの背後で結果を解析します。また、それぞれに放棄されたsessionの復旧機能が含まれています。SDKがどれもスタックに適合しない場合にのみ、フローを手動で構築してください。

前提条件

始める前に、次のものが必要です。
  • Dodo Paymentsアカウント。
  • Developer → API Keysから取得したAPI keyと、Developer → Webhooksから取得したwebhook signing secret。
  • Android、iOS、React Native、またはFlutterアプリ。
  • checkout sessionを作成するバックエンドサーバー。API keyはこのサーバーに保存します。

統合ワークフロー

すべてのDodo Payments API呼び出しはバックエンドから行います。アプリはバックエンドにcheckout URLを要求し、それを開いて結果を表示するだけです。
ディープリンク内のstatusは、顧客に何を表示するかをアプリに伝えます。これは支払いの証明ではありません。アクセス権はモバイルの結果ではなく、バックエンドで受信したpayment.succeededまたはsubscription.active webhookから付与してください。
1

Backend: Create Checkout Session

バックエンドはAPI keyを使ってcheckout sessionを作成し、そのcheckout_urlをアプリに返します。sessionのreturn_urlには、アプリが登録するディープリンクを設定します。例:myapp://checkout/return。

Checkout Session API Docs

Node.js、Pythonなどの言語からcheckout sessionを作成する方法と、完全なパラメータリファレンスを確認できます。
Security:checkout sessionはモバイルアプリではなく、必ずバックエンドサーバーで作成してください。アプリのバイナリからAPI keyを抽出することは誰にでも可能です。
2

Mobile: Get Checkout URL

アプリはバックエンドを呼び出してcheckout URLを取得します。このリクエストは、サインイン中のユーザー自身のsession tokenで認証してください。各例では、userSessionTokenがそのtokenで、CheckoutResponseが独自のレスポンスタイプです。
Security:アプリはDodo Payments APIを直接呼び出さず、必ずバックエンドとのみ通信します。
3

Mobile: Open Checkout in Browser

checkout URLをプラットフォームのシステムブラウザー画面で開きます。公式checkout SDKを使えば、この処理が自動的に行われ、型付きの結果が返されます。

Pick your mobile SDK

Android、iOS、React Native、Flutterのインストール手順とセットアップ方法。
4

Backend: Handle Payment Completion

バックエンドがpayment.succeededまたはsubscription.active webhookを受信したら、アクセス権を付与します。復帰URLの結果は、アプリの画面を更新する目的にのみ使用してください。

SDKを選択する

すべてのモバイルSDKは同じ契約に従います。1回のstart(...)呼び出しで、Dodo Paymentsのホスト型checkoutをプラットフォームのシステムブラウザー画面で開き、型付きCheckoutResultを返します。そのstatusはsucceeded、failed、cancelled、pending、またはexpiredになります。SDKがAPI keyを保持したりDodo Payments APIを呼び出したりすることはありません。4つすべてが放棄されたsessionの復旧に対応しています。

Android

com.dodopayments.api:checkout-androidはCustom Tabを開きます。minSdk 23が必要です。

iOS

dodopayments-mobile-sdk-iosはSFSafariViewControllerを開きます。iOS 16以降が必要です。

React Native

@dodopayments/react-native-checkoutは、両方のnative core上で動作するTurbo Moduleです。New Architectureを有効にしたReact Native 0.77以降が必要です。

Flutter

dodopayments_checkoutは、両方のnative core上で動作するPigeon channelです。Flutter 3.44以降が必要です。
返されるstatusはUI上のヒントであり、支払いの証明ではありません。すべての支払いは、payment.succeededまたはsubscription.active webhookからバックエンドで確認するか、API keyを使って取得してください。cancelledステータスは、復帰URLが到着する前に顧客がブラウザーを閉じたことを意味するため、支払いが成功している可能性があります。失敗として表示しないでください。

Callback URL Schemeの登録

4つのSDKはすべて、例としてmyapp://checkout/returnのように、選択したcustom URL schemeを通じてアプリへ制御を戻します。プラットフォームごとに1回登録してください。
android/app/build.gradle
SDK独自のmanifestにはredirect activityがすでに宣言されているため、manifest XMLを追加する必要はありません。schemeはreturnUrlのschemeと一致させる必要があります。
フローを自分で構築するには、checkout_urlをプラットフォームのシステムブラウザー画面(AndroidではCustom Tab、iOSではSFSafariViewController)で開き、return_urlへのナビゲーションをインターセプトして、クエリパラメータstatusとpayment_idを読み取ります。これらはSDKが自動的に行います。
埋め込み WebView 内で checkout を開かないでください(WKWebView または Android WebView)。 埋め込み WebView では 3-D Secure チャレンジや保存済みカードの自動入力が正常に動作せず、決済に失敗する顧客が増える可能性があります。SDK を使用するか、システムのブラウザー画面で checkout_url を開いてください。iOS では、Apple Pay を利用できるように、SFSafariViewController または ASWebAuthenticationSession、あるいはシステムブラウザーで開いてください。Android では、顧客のブラウザー上で動作する Custom Tab で開くことで、Google Pay を引き続き利用できます。

外観のカスタマイズ

すべてのSDKは、start(...)またはCheckoutParamsで任意のcustomizationパラメータを受け取ります。これはシステムブラウザー画面のtoolbar、button、ブラウザーの表示方法を制御します。checkoutページ独自のthemeは別に設定します。checkout session作成時に、サーバー上でcustomization.theme_configを使って設定します。 オプションはプラットフォームごとに分類されています。AndroidのCustom TabとiOSのSFSafariViewControllerでは、利用できるnative controlが異なるためです。すべてのfieldは任意です。未設定のfieldには、プラットフォーム独自のデフォルト値が使用されます。
Color
Toolbarの背景色。
Color
Navigation barの色。
Color
Navigation barの上に表示されるdividerの色。
'default' | 'back'
defaultはシステムの「X」アイコンを表示し、backは代わりに戻る矢印を描画します。
'start' | 'end'
Toolbarのどちら側にclose buttonを表示するか。
boolean
Toolbarのshare iconを表示します。
boolean
ToolbarでURLの下にpage titleを表示します。
boolean
ページのスクロールに合わせてtoolbarを自動的に非表示にします。
boolean
オーバーフローメニューに「このページをブックマーク」を表示します。
boolean
オーバーフローメニューに「ページをダウンロード」を表示します。
'system' | 'light' | 'dark'
デバイスのシステム設定にかかわらず、lightまたはdark appearanceを強制します。
'done' | 'close' | 'cancel'
dismiss buttonのlabelまたはicon。
'pageSheet' | 'fullScreen'
デフォルト:"pageSheet"
pageSheetは、顧客がスワイプして閉じられるcardとしてcheckoutを表示します。fullScreenは画面全体を覆います。
boolean
スクロール時にtoolbarを折りたたみます。効果があるのはpresentationStyleがfullScreenの場合のみです。pageSheetでは、barは固定されたままです。
'system' | 'light' | 'dark'
デバイスのシステム設定にかかわらず、lightまたはdark appearanceを強制します。
以下の例では、Androidでtoolbarの色とclose buttonを設定し、iOSでは全画面のdark表示を設定します。React NativeとFlutterでは、それぞれ別のandroidおよびios option groupを使用します。native SDKでは各プラットフォーム固有のoptionのみを使用します。

Checkoutページのカスタマイズ

checkoutページ自体(表示するfield、theme、表示する決済手段)は、checkout session作成時にサーバーで設定します。外観のカスタマイズで説明するのは、その周囲のブラウザー画面だけです。以下のパラメータは、モバイルでのコンバージョンに最も大きな効果があります。 これらのパラメータは、checkout session のリクエスト内の3か所、つまりトップレベル、customization、または feature_flags に配置します。配置先列には、それぞれのパラメータを配置するオブジェクトが示されています。各パラメータは表示されたオブジェクトに配置してください。誤ったオブジェクトに配置しても効果はありません。
**billing_currencyとbilling_address.countryは必ず一緒に渡してください。**どちらか一方を省略すると、Adaptive Currencyは顧客のIPアドレスからbilling currencyを選択できます。例えば、米国の顧客が欧州へ旅行中でbilling countryが設定されていない場合、EURで請求される可能性があります。
モバイルコンバージョンへの最大の効果:show_order_details: falseとminimal_address: trueを設定します。これらを組み合わせると、決済手段がスクロールせずに表示され、住所fieldの大部分が削除されます。
チェックアウトの比較:注文詳細を展開(fieldはスクロール後に表示)した場合と折りたたみ(上部に表示)した場合

show_order_details: false moves the contact and payment fields above the fold, instead of behind the order summary.

完全なstreet、city、state fieldの代わりにpostcodeのみを収集するには、minimal_address: trueを設定します。
チェックアウトの比較:完全なbilling address formとpostcodeのみの場合

minimal_address: true reduces the billing address to a single postcode field.

checkoutがデバイスのlightまたはdark mode設定に従うように、theme: "system"を設定します。
チェックアウトの比較:同じページをlight modeとdark modeで表示

With theme: system, the checkout follows the device's light or dark appearance automatically.

**利用できる決済手段は商品タイプによって異なります。**Apple PayとCash App Payは、ゼロではない金額のrecurring subscriptionに対応しています。one-time paymentでは、ビジネスで有効にしたすべての決済手段を利用できます。Payment Methodsを参照してください。

Full checkout session parameter reference

Checkout Sessions guideに記載された、すべてのparameter、type、default value。

モバイル最適化レシピ

各レシピは、バックエンドから送信する完全なcheckout session requestです。シナリオに合うものを選び、product IDを自分のものに置き換えてください。Node.jsとPythonのclientは最初のレシピで設定し、その他のレシピで再利用します。
最も短いフォームにする場合は、このレシピを使用します。決済手段を上部に表示し、住所はpostcodeのみ、discount fieldは表示せず、themeはデバイスに従います。
利用可能なすべてのparameterとdefaultについては、Checkout Sessionsを参照してください。
checkoutページをアプリの一部のように見せる必要がある場合は、このレシピを使用します。brand color、border radius、custom pay button labelを設定します。
theme_configでcustom dark navy paletteを適用したブランド付きモバイルcheckout
theme_configは、darkとlightの別々のobjectを受け取るため、paletteはデバイスのappearanceに従います。すべてのcolor keyとfont optionについては、Checkout Sessionsを参照してください。
過去に支払ったことのあるサインイン済み顧客には、このレシピを使用します。顧客のcustomer_id、保存済みのpayment_method_id、confirm: trueを渡してcheckout formを省略します。payment_method_idを指定すると、sessionは保存済みのmethodに直接課金し、checkout_urlを返さないため、アプリで開くものはありません。結果はwebhookから取得します。
バックエンドがpayment.succeeded webhookを受信したら、アクセス権を付与します。アプリが表示するstatusはUI上のヒントにすぎません。
初回請求前に無料trialを提供するsubscription productには、このレシピを使用します。trial_period_daysで、このsessionのtrial期間を設定します。
モバイルSDKが返ったときではなく、バックエンドがsubscription.active webhookを受信したときにアクセス権を付与します。完全なwebhookフローについては、Subscription Integration Guideを参照してください。
wallet top-up、pay-as-you-go、BNPLなど、後で請求するために顧客の決済手段を保存する場合は、このレシピを使用します。subscription labelは表示しません。顧客は一度決済手段を承認し、後から変動する金額を請求します。
使用量に応じて課金するアプリは、このパターンに従います。例えば、占星術アプリは固定スケジュールではなく、各セッションのたびに事前承認済みカードへ請求します。
オンデマンド請求は、最小通貨単位で少なくとも100(USDでは$1.00)である必要があります。APIは、"product_price: value out of range"を伴う低いproduct_priceを拒否します。請求せずに承認するには、上記のようにmandate_only: trueを使用し、後で少なくともその最小額を請求してください。
完全な請求フロー、webhook event、retry policyについては、On-Demand Subscriptionsを参照してください。

モバイルからのサブスクリプションフロー

モバイルアプリは、one-time paymentと同じcheckout sessionフローでsubscriptionを開始します。SDKがホスト型checkoutを開き、顧客がsubscribeし、アプリがディープリンクからの復帰を処理します。subscription lifecycleの残りはバックエンドが管理します。

通常のRecurring Subscription

月次や年次など固定間隔で請求するには、subscription productとディープリンクreturn_urlを指定してcheckout sessionを作成します。subscription開始時に、バックエンドがsubscription.activeを受信します。
Apple PayとCash App Payは、ゼロではない金額のrecurring subscriptionに対応しています。
完全なバックエンドwebhookフローについては、Subscription Integration Guideを参照してください。

On-Demand Subscription

on-demand subscriptionは顧客の決済手段を一度承認し、後から変動する金額を請求できるようにします。wallet top-up、pay-as-you-go、事前に金額が分からない請求に使用します。完全なrequest bodyについては、On-Demand Mandateレシピを参照してください。 モバイルでは、次の点に注意してください。
  • show_on_demand_tag: falseを設定し、checkoutページにsubscriptionまたはon-demandの文言を表示しないようにします。top-up用にカードを保存する顧客は、subscription termsを想定していません。
  • 顧客がmandateを承認した後、バックエンドはsubscription.activeを受信します。後続の請求ではすべてsubscription_idを使用するため、保存してください。
オンデマンド請求は、最小通貨単位で少なくとも100である必要があります。APIは低い金額を"product_price: value out of range"とともに拒否します。少なくともその最小額を請求するか、mandate_only: trueを使って請求せずに承認し、後で最初の金額を回収してください。**請求を短時間に連続してretryしないでください。**同じsubscriptionで前の請求が処理中の場合、新しい請求は"Cannot create new charge as previous payment is not successful yet"で失敗します。これはインドの決済手段(UPI、インドのdebit cardとcredit card)で最もよく発生します。請求開始から48時間後に引き落としが行われるためです。retryする前に、前の請求が完了していることを確認してください。
請求endpoint、webhook event、retry policyについては、On-Demand Subscriptionsを参照してください。

Free Trial付きSubscription

初回請求前にtrialを提供するには、checkout sessionでsubscription_data.trial_period_daysを渡します。顧客はsignup時に決済手段を承認し、Dodo Paymentsはtrial終了時にその手段へ請求します。完全なrequest bodyについては、Subscription with Free Trialレシピを参照してください。

UpgradeとDowngrade

バックエンドは新しいcheckout sessionではなく、APIを通じてplanを変更します。Dodo Paymentsは、選択したproration modeで日割り計算を行います。顧客が自分でplanを変更できるようにするには、Customer Portalへリンクしてください。

Subscription Integration Guide

バックエンドの設定:webhookフロー、アクセス権の付与、キャンセル。

On-Demand Subscriptions

Mandateの承認、変動請求、retry policy。

Upgrade / Downgrade

Proration mode、plan変更、seat調整。

Customer Portal

顧客向けのセルフサービスsubscription管理。

Checkout離脱の削減

小さな画面では、すべてのフォームフィールドへの入力により多くの手間がかかります。以下の checkout session 設定により、フォームを短くして離脱を減らせます。

Formの最適化

次の設定で、モバイルのcheckout formを短縮できます。

顧客データの事前入力

事前入力する各fieldは、顧客が入力する必要のないfieldになります。
  • 新規顧客:auth sessionからcustomer.emailとcustomer.nameを設定します。
  • Returning customer:顧客の保存済みdetailsを使用するためにcustomer.customer_idを設定します。
  • Currency:billing_currencyとbilling_address.countryを一緒に渡します。

Recovery Tools

Recovery toolは、checkoutまたはrenewalが完了しなかった顧客を呼び戻します。

Abandoned Cart Recovery

abandonedまたはfailed checkout向けのemail sequence。

Payment Retries

失敗したsubscription renewalの自動retry。

Subscription Dunning

支払いに失敗したsubscriptionを復旧するemail。

Recovery Overview

すべてのrecovery toolと、それによって回収されたrevenue。

ベストプラクティス

  • セキュリティ: API key をアプリに含めないでください。バックエンドで checkout session を作成し、checkout_url のみをアプリに渡します。
  • 権限: CheckoutResult.status は UI のヒントとして扱ってください。バックエンドで決済を確認した後にのみアクセスを許可します。
  • ユーザー体験: バックエンドが session を作成している間は、読み込み状態を表示します。cancelled を失敗として扱わないでください。決済がすでに成功している可能性があります。
  • テスト: test mode と test cards を使用し、シミュレーターだけでなく実機でも return URL の往復を確認します。
  • コンバージョン: show_order_details: false と minimal_address: true を設定します。これらを組み合わせることで、支払い方法がスクロールせずに表示され、住所フィールドの大部分が削除されます。
  • 通貨: billing_currency と billing_address.country の両方を渡します。どちらか一方を省略すると、Adaptive Currency が顧客の IP アドレスから請求通貨を選択することがあります。
  • オンデマンド請求: オンデマンドサブスクリプションでカードの保存のみを行う場合は、show_on_demand_tag: false を設定します。ウォレットにチャージする顧客は、サブスクリプションに関する文言を想定していません。
  • リカバリー: ダッシュボードで Abandoned Cart Recovery を有効にすると、checkout を完了しなかった顧客にメールを送信できます。

トラブルシューティング

よくある問題

  • Callback が届かない: returnUrl の scheme は、登録した scheme と一致している必要があります。Android では、これは dodoCallbackScheme の manifest placeholder です。iOS では、Info.plist の URL type です。React Native と Flutter のアプリでは両方が必要で、Expo では config plugin が両方を設定します。
  • checkout がアプリではなくブラウザーに戻る(iOS): アプリが受信した URL を転送していません。.onOpenURL、scene(_:openURLContexts:)、または React Native の Linking listener から DodoCheckout.handleOpenURL(url) を呼び出してください。
  • Android で PLATFORM_ERROR: 最も一般的な原因は scheme の不一致です。また、MainActivity が android:taskAffinity=""(flutter create のデフォルト値)を設定している場合にも発生します。この設定により、一部の Android OEM ビルドで進行中の checkout が失われることがあります。
  • ALREADY_IN_PROGRESS: checkout がまだ開いています。別の checkout を開始する前に、前の checkout が完了するまで待つか、閉じてください。
  • 未解決の placeholder によりビルドが失敗する: Android SDK を追加しましたが、manifestPlaceholders["dodoCallbackScheme"] を設定していません。
  • 決済は成功したがアクセスが許可されない: アプリがモバイルの結果からアクセスを許可しています。代わりに payment.succeeded または subscription.active webhook からアクセスを許可してください。
  • モバイルで Apple Pay または Google Pay が表示されない: checkout が埋め込み WebView(WKWebView または Android WebView)内で読み込まれていないか確認してください。SDK、またはシステムのブラウザー画面で開きます。Android では Custom Tab、iOS では SFSafariViewController または ASWebAuthenticationSession を使用してください。

追加リソース

Contact Support

ご質問やサポートについては、support@dodopayments.com までメールでお問い合わせください。
最終更新日 2026年9月26日