Tích hợp SDK React Native
Dodo Payments React Native SDK cho phép bạn xây dựng trải nghiệm thanh toán an toàn trong các ứng dụng Android và iOS gốc của bạn. SDK của chúng tôi cung cấp các thành phần và màn hình UI có thể tùy chỉnh để thu thập thông tin thanh toán.
📦 Cài đặt SDK của chúng tôi từ NPM
📚 Xem kho demo của chúng tôi để có ví dụ triển khai hoàn chỉnh
🎥 Xem video demo của chúng tôi để thấy Dodo Payments SDK hoạt động
Tính năng
Bảo mật đơn giản Thu thập dữ liệu thanh toán nhạy cảm một cách an toàn trong khi vẫn tuân thủ PCI
Giao diện gốc Màn hình và thành phần gốc cho Android và iOS
Hiện tại, Apple Pay, Google Pay, Cash App và UPI không được hỗ trợ trong SDK React Native. Chúng tôi đang tích cực làm việc để thêm hỗ trợ cho các phương thức thanh toán này trong các phiên bản tương lai.
Cài đặt
Cài đặt SDK
Cài đặt Dodo Payments SDK bằng cách sử dụng trình quản lý gói mà bạn ưa thích: npm install dodopayments-react-native-sdk
yarn add dodopayments-react-native-sdk
Cài đặt cụ thể cho nền tảng
Chạy pod install trong thư mục iOS của bạn: cd ios && pod install && npm run ios
Cài đặt phía khách hàng
Thiết lập Nhà cung cấp thanh toán
Wrap your app with the DodoPaymentProvider: import React from 'react' ;
import { DodoPaymentProvider } from 'dodopayments-react-native-sdk' ;
import PaymentScreen from './PaymentScreen' ;
function App () {
return (
< DodoPaymentProvider publishableKey = "YOUR_PUBLISHABLE_KEY" >
< PaymentScreen />
</ DodoPaymentProvider >
);
}
export default App ;
Bạn sẽ cần tạo khóa API từ bảng điều khiển Dodo Payments của bạn. Xem hướng dẫn tạo khóa API của chúng tôi để biết hướng dẫn chi tiết.
Tạo hàm tiện ích thanh toán
Tạo một hàm tiện ích để lấy các tham số thanh toán từ API backend của bạn: utils/fetchPaymentParams.ts
const API_URL = 'YOUR_BACKEND_URL' ; // Replace with your server URL
const fetchPaymentParams = async () => {
const response = await fetch ( ` ${ API_URL } /create-payment` , {
method: 'POST' ,
headers: {
'Content-Type' : 'application/json' ,
},
});
if ( ! response . ok ) {
throw new Error ( 'Failed to fetch payment parameters' );
}
return await response . json ();
};
export default fetchPaymentParams ;
Hàm này giả định rằng bạn có một điểm cuối API backend tạo ra các ý định thanh toán và trả về một bí mật khách hàng. Đảm bảo rằng backend của bạn được cấu hình đúng để xử lý việc tạo thanh toán. Xem Hướng dẫn Tích hợp API của chúng tôi để biết ví dụ về thiết lập backend.
Triển khai màn hình thanh toán
Create your payment screen using the useCheckout hook. Here’s a complete implementation: import React from 'react' ;
import { View , Text , useColorScheme } from 'react-native' ;
import { useCheckout , type sessionParams } from 'dodopayments-react-native-sdk' ;
import fetchPaymentParams from './utils/fetchPaymentParams' ;
const PaymentScreen = () => {
const { initPaymentSession , presentPaymentSheet } = useCheckout ();
const [ error , setError ] = React . useState ( '' );
const [ message , setMessage ] = React . useState ( '' );
const [ loading , setLoading ] = React . useState ( false );
const [ showSuccessScreen , setShowSuccessScreen ] = React . useState ( false );
const isDarkMode = useColorScheme () === 'dark' ;
const processPayment = async () => {
setLoading ( true );
setMessage ( '' );
setError ( '' );
try {
// 1. Get payment parameters from your backend
const key = await fetchPaymentParams ();
// 2. Initialize payment session
const paymentSheetParamsResult = await initPaymentSession ({
clientSecret: key . clientSecret ,
});
// 3. Configure and present payment sheet
const params : sessionParams = {
... ( paymentSheetParamsResult as sessionParams ),
configuration: {
appearance: {
themes: isDarkMode ? 'dark' : 'light' ,
primaryButton: {
colors: {
light: {
background: 'green' ,
componentBorder: 'green' ,
placeholderText: 'yellow' ,
},
dark: {
background: 'green' ,
componentBorder: 'green' ,
placeholderText: 'yellow' ,
},
},
shapes: {
borderRadius: 30 ,
borderWidth: 3 ,
},
},
},
mode: 'test' , // DEFAULTS TO TEST MODE
},
};
const paymentSheetResponse = await presentPaymentSheet ( params );
// 4. Handle payment result
switch ( paymentSheetResponse ?. status ) {
case 'cancelled' :
setError ( 'Payment cancelled by user.' );
break ;
case 'succeeded' :
setMessage ( '' );
setShowSuccessScreen ( true );
break ;
case 'failed' :
setError ( 'Payment failed : \n ' + paymentSheetResponse ?. message );
break ;
default :
setError ( paymentSheetResponse ?. message );
setMessage ( '' );
}
} catch ( err ) {
setError ( 'Failed to process payment' );
} finally {
setLoading ( false );
}
};
return (
< View >
< Button
onPress = { processPayment }
disabled = { loading }
title = { loading ? 'Processing...' : 'Pay Now' }
/>
{ error && < Text style = { { color: 'red' } } > { error } </ Text > }
{ message && < Text style = { { color: 'green' } } > { message } </ Text > }
{ showSuccessScreen && (
< PaymentSuccessScreen
amount = { total }
onContinue = { () => setShowSuccessScreen ( false ) }
/>
) }
</ View >
);
};
export default PaymentScreen ;
Để có ví dụ hoàn chỉnh với kiểu dáng, xử lý lỗi và tùy chọn tùy chỉnh, hãy xem các kho demo của chúng tôi:
Tùy chọn cấu hình
Tham số phiên
Bí mật khách hàng từ ý định thanh toán của bạn, lấy từ API thanh toán một lần hoặc API đăng ký.
Chế độ của phiên thanh toán (thử nghiệm hoặc trực tiếp).
Tùy chọn tùy chỉnh cho giao diện của bảng thanh toán
configuration.appearance.themes
Chế độ chủ đề: 'light' hoặc 'dark'
Tùy chỉnh giao diện
Bạn có thể tùy chỉnh React Native Unified Checkout để phù hợp với thiết kế của ứng dụng bằng cách thay đổi màu sắc, phông chữ và nhiều hơn nữa thông qua tham số appearance khi gọi initPaymentSession().
Tùy chỉnh màu sắc
Mỗi danh mục màu xác định màu sắc của một hoặc nhiều thành phần trong giao diện người dùng. Ví dụ, primary xác định màu sắc của nút Thanh toán.
Danh mục màu sắc Sử dụng primaryMàu chính cho nút Thanh toán và các mục đã chọn backgroundMàu nền của trang thanh toán componentBackgroundMàu nền cho các trường nhập, tab và các thành phần khác componentBorderMàu viền bên ngoài cho các trường nhập, tab và các thành phần khác componentDividerMàu viền bên trong (viền chia sẻ) cho các thành phần primaryTextMàu chữ tiêu đề secondaryTextMàu chữ nhãn cho các trường nhập componentTextMàu chữ nhập (ví dụ: số thẻ, mã bưu chính) placeholderTextMàu chữ placeholder cho các trường nhập iconMàu cho biểu tượng (ví dụ: nút đóng) errorMàu cho thông báo lỗi và các hành động phá hủy
Ví dụ cấu hình với hỗ trợ chế độ sáng và tối:
const appearance = {
colors: {
light: {
primary: '#F8F8F2' ,
background: '#ffffff' ,
componentBackground: '#E6DB74' ,
componentBorder: '#FD971F' ,
componentDivider: '#FD971F' ,
primaryText: '#F8F8F2' ,
secondaryText: '#75715E' ,
componentText: '#AE81FF' ,
placeholderText: '#E69F66' ,
icon: '#F92672' ,
error: '#FF0000' ,
},
dark: {
primary: '#00ff0099' ,
background: '#ff0000' ,
componentBackground: '#ff0080' ,
componentBorder: '#62ff08' ,
componentDivider: '#d6de00' ,
primaryText: '#5181fc' ,
secondaryText: '#ff7b00' ,
componentText: '#00ffff' ,
placeholderText: '#00ffff' ,
icon: '#f0f0f0' ,
error: '#0f0f0f' ,
},
},
};
Tùy chỉnh hình dạng
Bạn có thể tùy chỉnh bán kính viền, độ rộng viền và bóng được sử dụng trong toàn bộ giao diện thanh toán:
const appearance = {
shapes: {
borderRadius: 10 , // Border radius for input fields, tabs, and components
borderWidth: 1 , // Border width for components
},
};
Tùy chỉnh cụ thể cho thành phần
Bạn có thể tùy chỉnh các thành phần UI cụ thể như nút chính (nút Thanh toán). Các cài đặt này có ưu tiên hơn các cài đặt giao diện toàn cầu:
const appearance = {
primaryButton: {
colors: {
background: '#000000' ,
text: '#ffffff' ,
border: '#ff00ff' ,
},
shapes: {
borderRadius: 10 ,
borderWidth: 1.5 ,
},
},
};
Để áp dụng các tùy chỉnh này, hãy bao gồm chúng trong cấu hình phiên thanh toán của bạn:
const params : sessionParams = {
... paymentSheetParams ,
configuration: {
appearance: {
themes: isDarkMode ? 'dark' : 'light' ,
... appearance , // Include your custom appearance settings
},
},
};
Xử lý lỗi
Xử lý các trạng thái thanh toán khác nhau trong hàm thanh toán của bạn:
const handlePaymentResult = ( paymentSheetResponse ) => {
switch ( paymentSheetResponse ?. status ) {
case 'cancelled' :
// User cancelled the payment
console . log ( 'Payment cancelled by user' );
break ;
case 'succeeded' :
// Payment completed successfully
console . log ( 'Payment succeeded' );
// Navigate to success screen or update UI
break ;
case 'failed' :
// Payment failed
console . log ( 'Payment failed:' , paymentSheetResponse ?. message );
// Show error message to user
break ;
default :
console . log ( 'Unknown payment status:' , paymentSheetResponse ?. status );
}
};
Các tình huống lỗi phổ biến
Vấn đề kết nối mạng : Đảm bảo kết nối internet ổn định
Bí mật khách hàng không hợp lệ : Xác minh backend đang tạo các ý định thanh toán hợp lệ
Thiếu phụ thuộc đồng : Cài đặt tất cả các phụ thuộc cần thiết
Cài đặt cụ thể cho nền tảng : Hoàn thành các bước cấu hình iOS và Android
Lỗi API : Kiểm tra Tài liệu mã lỗi của chúng tôi để biết cách xử lý lỗi chi tiết
Bật ghi nhật ký gỡ lỗi trong quá trình phát triển
Kiểm tra các yêu cầu mạng đến backend của bạn
Xác minh rằng các khóa API được cấu hình đúng
Thử nghiệm trên cả hai nền tảng iOS và Android
Xem Câu hỏi thường gặp kỹ thuật của chúng tôi để biết các vấn đề phổ biến
Sử dụng Chế độ thử nghiệm và chế độ trực tiếp một cách hợp lý
Phương thức thanh toán thử nghiệm
Sử dụng số thẻ thử nghiệm trong quá trình phát triển để xác minh tích hợp của bạn mà không xử lý thanh toán thực. Tìm hiểu thêm về quy trình thử nghiệm của chúng tôi và các môi trường thử nghiệm có sẵn.