메인 콘텐츠로 건너뛰기

Quick Start

모바일 결제 통합을 4단계로 쉽게 시작하세요

Platform Examples

Android, iOS, React Native, Flutter를 위한 완전한 코드 예제

전제 조건

Dodo Payments를 모바일 앱에 통합하기 전에 다음을 확인하세요:
  • Dodo Payments 계정: API 액세스가 있는 활성 상인 계정
  • API 자격 증명: 대시보드에서 API 키 및 웹훅 비밀 키
  • 모바일 앱 프로젝트: Android, iOS, React Native 또는 Flutter 애플리케이션
  • 백엔드 서버: 체크아웃 세션 생성을 안전하게 처리하기 위해

통합 워크플로우

모바일 통합은 백엔드가 API 호출을 처리하고 모바일 앱이 사용자 경험을 관리하는 안전한 4단계 프로세스를 따릅니다.
1

Backend: Create Checkout Session

Checkout Session API Docs

Node.js, Python 등을 사용하여 백엔드에서 체크아웃 세션을 생성하는 방법을 배우세요. 전용 Checkout Sessions API 문서에서 전체 예제와 매개변수 참조를 확인하세요.
보안: 체크아웃 세션은 모바일 앱이 아닌 백엔드 서버에서만 생성해야 합니다. 이렇게 하면 API 키를 보호하고 적절한 검증을 보장합니다.
2

Mobile: Get Checkout 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

Mobile: Open Checkout in Browser

결제 처리를 위해 안전한 인앱 브라우저에서 체크아웃 URL을 여세요.

See platform-specific integration examples

Android, iOS 및 Flutter 모바일 결제에 대한 전체 코드와 설정 지침을 확인하세요.
4

Backend: Handle Payment Completion

웹훅과 리디렉션 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", "customer@example.com", "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 및 웹훅 구성을 확인하세요.
  • API 키 오류: API 키가 올바르고 필요한 권한이 있는지 확인하세요.

추가 리소스

질문이나 지원이 필요하시면 support@dodopayments.com으로 문의하세요.
Last modified on February 27, 2026