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

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

Nhiều phương thức thanh toán

Chấp nhận nhiều phương thức thanh toán khác nhau để mở rộng phạm vi toàn cầu

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

1

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
2

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

1

Lấy khóa công khai

Lấy khóa công khai của bạn từ bảng điều khiển Dodo Payments. (Khác nhau cho cả chế độ thử nghiệm và chế độ trực tiếp) https://app.dodopayments.com/developer/others
2

Cài đặt nhà cung cấp thanh toán

Bọc ứng dụng của bạn với DodoPaymentProvider:
App.tsx
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.
3

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 các ý định thanh toán và trả về một bí mật khách hàng. Đảm bảo 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ề cài đặt backend.
4

Triển khai màn hình thanh toán

Tạo màn hình thanh toán của bạn bằng cách sử dụng useCheckout hook. Đây là một triển khai hoàn chỉnh:
PaymentScreen.tsx
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

clientSecret
string
required
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ý.
mode
string
required
Chế độ của phiên thanh toán (thử nghiệm hoặc trực tiếp).
configuration.appearance
object
Tùy chọn tùy chỉnh cho giao diện của bảng thanh toán
configuration.appearance.themes
string
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ế ứng dụng của bạn 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 sắc xác định màu sắc của một hoặc nhiều thành phần trong UI. Ví dụ, primary xác định màu sắc của nút Thanh toán.
Danh mục màu sắcSử dụng
primaryMàu sắc 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 sắc 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 sắc viền bên trong (viền chia sẻ) cho các thành phần
primaryTextMàu sắc văn bản tiêu đề
secondaryTextMàu sắc văn bản nhãn cho các trường nhập
componentTextMàu sắc văn bản nhập (ví dụ: số thẻ, mã zip)
placeholderTextMàu sắc văn bản giữ chỗ cho các trường nhập
iconMàu sắc cho biểu tượng (ví dụ: nút đóng)
errorMàu sắc 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);
  }
};
  • 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

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.