Chuyển đến nội dung chính

Điều Kiện Tiên Quyết

Trước khi tích hợp Dodo Payments vào ứng dụng di động của bạn, hãy đảm bảo bạn đã có:
  • Tài Khoản Dodo Payments: Tài khoản thương nhân hoạt động với quyền truy cập API
  • Thông Tin Xác Thực API: Khóa API và khóa bí mật webhook từ bảng điều khiển của bạn
  • Dự Án Ứng Dụng Di Động: Ứng dụng Android, iOS, React Native hoặc Flutter
  • Máy Chủ Backend: Để xử lý an toàn việc tạo phiên thanh toán

Quy Trình Tích Hợp

Tích hợp di động tuân theo quy trình 4 bước an toàn, trong đó backend của bạn xử lý các cuộc gọi API và ứng dụng di động của bạn quản lý trải nghiệm người dùng.
1

Backend: Tạo Phiên Thanh Toán

Tài Liệu API Phiên Thanh Toán

Tìm hiểu cách tạo một phiên thanh toán trong backend của bạn bằng Node.js, Python và nhiều hơn nữa. Xem các ví dụ hoàn chỉnh và tham chiếu tham số trong tài liệu API Phiên Thanh Toán chuyên dụng.
Bảo Mật: Các phiên thanh toán phải được tạo trên máy chủ backend của bạn, không bao giờ trong ứng dụng di động. Điều này bảo vệ các khóa API của bạn và đảm bảo xác thực đúng cách.
2

Di Động: Lấy URL Thanh Toán

Ứng dụng di động của bạn gọi backend của bạn để lấy URL thanh toán:
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
}
Bảo Mật: Ứng dụng di động chỉ giao tiếp với backend của bạn, không bao giờ trực tiếp với API Dodo Payments.
3

Di Động: Mở Thanh Toán Trong Trình Duyệt

4

Backend: Xử Lý Hoàn Tất Thanh Toán

Xử lý hoàn tất thanh toán qua webhooks và URL chuyển hướng để xác nhận trạng thái thanh toán.

Tích Hợp Cụ Thể Nền Tảng

Chọn nền tảng di động của bạn bên dưới để xem các ví dụ triển khai hoàn chỉnh:

Tích Hợp Android

Triển Khai Chrome Custom Tabs

// 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)
            }
        }
    }
}

Thực Hành Tốt Nhất

  • Bảo Mật: Không bao giờ lưu trữ các khóa API trong mã ứng dụng của bạn. Sử dụng lưu trữ an toàn và SSL pinning.
  • Trải Nghiệm Người Dùng: Hiển thị chỉ báo tải, xử lý lỗi một cách duyên dáng và cung cấp thông điệp rõ ràng.
  • Kiểm Tra: Sử dụng thẻ thử nghiệm, mô phỏng lỗi mạng và kiểm tra trên nhiều thiết bị.

Khắc Phục Sự Cố

Các Vấn Đề Thường Gặp

  • WebView không mở liên kết thanh toán: Đảm bảo liên kết thanh toán hợp lệ và sử dụng HTTPS.
  • Callback không nhận được: Kiểm tra URL trả về và cấu hình webhook của bạn.
  • Lỗi khóa API: Xác minh rằng khóa API của bạn là chính xác và có quyền truy cập cần thiết.

Tài Nguyên Bổ Sung

Để có câu hỏi hoặc hỗ trợ, hãy liên hệ với [email protected].