Skip to main content
Đây là React Native checkout SDK chính thức của Dodo Payments, @dodopayments/react-native-checkout. SDK mở hosted checkout của Dodo trong một chế độ xem trình duyệt native và trả về một kết quả có kiểu. Lưu ý: có một package cũ, không liên quan tên là dodopayments-react-native-sdk (không có scope) với API hoàn toàn khác. Trang này chỉ mô tả package chính thức hiện tại có scope.

Checkout Sessions API

Tạo checkout_url mà SDK này sẽ mở từ backend của bạn.

Mobile Integration Guide

Xem cách tích hợp bước này vào toàn bộ quy trình thanh toán trên thiết bị di động.
React Native SDK là một lớp bao bọc Turbo Module mỏng trên cùng các core native Swift và Kotlin. SDK mở SFSafariViewController trên iOS và Chrome Custom Tab trên Android, không chứa API key và không bao giờ gọi trực tiếp Dodo API. Toàn bộ logic checkout chạy trong trình duyệt; SDK chỉ quản lý vòng đời của view và lấy return URL.
SDK này chỉ yêu cầu New Architecture, React Native 0.76+, iOS 16+ và Android minSdk 24.

Cài đặt

1

Install the Package

Package được autolink và kéo com.dodopayments.api:checkout-android từ Maven.
Không cần thiết lập bổ sung; dependency native được tự động phân giải.
2

Register a Callback URL Scheme

Ứng dụng của bạn phải đăng ký một URL scheme để nhận return URL từ checkout.
Trong android/app/build.gradle:
android/app/build.gradle
Thay "myapp" bằng scheme của ứng dụng.

Cách sử dụng

Chuyển tiếp Return URL

Listener Linking là bắt buộc để xử lý return URL trên iOS. Trên Android, handleOpenURL không thực hiện thao tác nào và resolve false vì Android core tự xử lý redirect. Bạn có thể đăng ký listener vô điều kiện trên cả hai nền tảng.

Ý nghĩa của kết quả

result.status là gợi ý UI, không phải bằng chứng thanh toán thành công. Hãy xác nhận mọi khoản thanh toán từ backend của bạn thông qua webhook payment.succeeded / subscription.active.
CheckoutStatus
bắt buộc
Một trong các giá trị succeeded, failed, cancelled, pending, expired.
string
Được thiết lập khi return URL có chứa giá trị này. Hiển thị giá trị trong UI, không dùng giá trị này để cấp quyền truy cập. Xem mục Verify the Payment bên dưới.
string
Được thiết lập cho các checkout đăng ký.
string[]
Được thiết lập khi checkout bao gồm các sản phẩm có license key.
string
Được thiết lập khi checkout thu thập email.
Record<string, string>
Mọi query parameter từ return URL, được giữ nguyên văn.

Xác minh khoản thanh toán

Webhooks

Dodo Payments gọi backend của bạn khi khoản thanh toán thành công hoặc subscription được kích hoạt.

Get Payment Detail

Tra cứu paymentId bằng secret key của bạn để kiểm tra trực tiếp trạng thái.
Chỉ cấp quyền truy cập sau khi một trong các cách này xác nhận khoản thanh toán, tuyệt đối không chỉ dựa vào result.status.

Tùy chỉnh giao diện

Tùy chỉnh thanh công cụ, các nút và bảng màu của trình duyệt checkout thông qua customization trên start(...). Các tùy chọn được nhóm theo nền tảng vì Custom Tab của Android và SFSafariViewController của iOS cung cấp các điều khiển native khác nhau. Tất cả các trường đều không bắt buộc; nếu bỏ qua customization, giao diện mặc định của từng nền tảng sẽ được sử dụng.
Color
Màu nền của thanh công cụ.
Color
Màu thanh điều hướng.
Color
Màu đường phân cách phía trên thanh điều hướng.
'default' | 'back'
default hiển thị biểu tượng hệ thống “X”; back thay vào đó hiển thị mũi tên quay lại.
'start' | 'end'
Nút đóng xuất hiện ở phía nào của thanh công cụ.
boolean
Hiển thị biểu tượng chia sẻ của thanh công cụ.
boolean
Hiển thị tiêu đề trang bên dưới URL trong thanh công cụ.
boolean
Cho phép thanh công cụ tự động ẩn khi cuộn trang.
boolean
Hiển thị “Bookmark this page” trong menu thêm.
boolean
Hiển thị “Download page” trong menu thêm.
'system' | 'light' | 'dark'
Buộc sử dụng giao diện sáng hoặc tối bất kể cài đặt hệ thống của thiết bị.
'done' | 'close' | 'cancel'
Nhãn hoặc biểu tượng cho nút đóng.
'pageSheet' | 'fullScreen'
pageSheet hiển thị dưới dạng thẻ có thể vuốt để đóng; fullScreen bao phủ toàn bộ màn hình.
boolean
Cho phép thanh công cụ thu gọn khi cuộn. Chỉ hiển thị khi presentationStylefullScreenpageSheet giữ cố định các thanh bất kể cài đặt này.
'system' | 'light' | 'dark'
Buộc sử dụng giao diện sáng hoặc tối bất kể cài đặt hệ thống của thiết bị.

Lỗi

start từ chối với một CheckoutError chỉ khi sử dụng sai hoặc nền tảng gặp lỗi. Thanh toán bị hủy hoặc bị từ chối luôn là một kết quả, không bao giờ là một exception.
  • INVALID_CHECKOUT_URL: không phải là URL phiên checkout.dodopayments.com.
  • INVALID_RETURN_URL: không phải là absolute URL hợp lệ.
  • ALREADY_IN_PROGRESS: một checkout đang chạy.
  • PLATFORM_ERROR: lỗi nền tảng không mong đợi.

Phiên bị bỏ dở

Nếu ứng dụng hoặc JS bundle bị dừng giữa chừng trong quá trình checkout, promise sẽ bị mất nhưng native layer vẫn giữ phiên. Khôi phục phiên ở lần mount tiếp theo và đối soát phiên với backend của bạn.

Liên quan

Mobile Integration Guide

Cùng một contract cho Android, iOS và Flutter.

Expo Boilerplate

Một ví dụ Expo hoàn chỉnh có tích hợp checkout.
Lần sửa đổi cuối 17 tháng 8, 2026