الانتقال إلى المحتوى الرئيسي

دمج SDK لـ React Native

يمكنك من خلال Dodo Payments React Native SDK بناء تجارب دفع آمنة في تطبيقات Android و iOS الأصلية الخاصة بك. يوفر SDK مكونات واجهة مستخدم قابلة للتخصيص وشاشات لجمع تفاصيل الدفع.

الميزات

أمان مبسط

جمع بيانات الدفع الحساسة بشكل آمن مع الالتزام بمعايير PCI

طرق دفع متعددة

قبول طرق دفع متنوعة لزيادة الوصول العالمي

واجهة مستخدم أصلية

شاشات وعناصر أصلية لنظامي Android و iOS
حاليًا، لا يدعم SDK لـ React Native Apple Pay و Google Pay و Cash App و UPI. نحن نعمل بنشاط على إضافة دعم لهذه الطرق في الإصدارات المستقبلية.

التثبيت

1

تثبيت SDK

قم بتثبيت Dodo Payments SDK باستخدام مدير الحزم المفضل لديك:
npm install dodopayments-react-native-sdk
2

إعداد خاص بالمنصة

قم بتشغيل pod install في مجلد iOS الخاص بك:
cd ios && pod install && npm run ios

إعداد جانب العميل

1

احصل على المفتاح القابل للنشر

احصل على المفتاح القابل للنشر من لوحة معلومات Dodo Payments. (مختلف لكل من أوضاع الاختبار والعيش) https://app.dodopayments.com/developer/others
2

إعداد مزود الدفع

قم بلف تطبيقك باستخدام 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;
ستحتاج إلى توليد مفاتيح API من لوحة معلومات Dodo Payments الخاصة بك. راجع دليل توليد مفاتيح API للحصول على تعليمات مفصلة.
3

إنشاء دالة مساعدة للدفع

أنشئ دالة مساعدة لجلب معلمات الدفع من واجهة برمجة التطبيقات الخلفية الخاصة بك:
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;
تفترض هذه الدالة أن لديك نقطة نهاية واجهة برمجة التطبيقات الخلفية التي تنشئ نوايا الدفع وتعيد سر العميل. تأكد من أن واجهتك الخلفية مُعدة بشكل صحيح للتعامل مع إنشاء الدفع. راجع دليل تكامل API للحصول على أمثلة إعداد الخلفية.
4

تنفيذ شاشة الدفع

أنشئ شاشة الدفع الخاصة بك باستخدام useCheckout hook. إليك تنفيذ كامل:
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;
للحصول على أمثلة كاملة مع التنسيق، ومعالجة الأخطاء، وخيارات التخصيص، تحقق من مستودعات العرض التوضيحي لدينا:

خيارات التكوين

معلمات الجلسة

clientSecret
string
required
سر العميل من نية الدفع الخاصة بك، التي تم الحصول عليها من واجهة برمجة التطبيقات للدفع لمرة واحدة أو الاشتراك.
mode
string
required
وضع جلسة الدفع (اختبار أو حي).
configuration.appearance
object
خيارات التخصيص لمظهر ورقة الدفع
configuration.appearance.themes
string
وضع السمة: 'light' أو 'dark'

تخصيص المظهر

يمكنك تخصيص عملية الدفع الموحدة لـ React Native لتتناسب مع تصميم تطبيقك عن طريق تعديل الألوان، والخطوط، والمزيد من خلال معلمة المظهر عند استدعاء initPaymentSession().

تخصيص الألوان

تحدد كل فئة لون لون واحد أو أكثر من المكونات في واجهة المستخدم. على سبيل المثال، primary يحدد لون زر الدفع.
فئة اللونالاستخدام
primaryاللون الأساسي لزر الدفع والعناصر المحددة
backgroundلون خلفية صفحة الدفع
componentBackgroundلون خلفية المدخلات، والألسنة، والمكونات الأخرى
componentBorderلون الحدود الخارجية للمدخلات، والألسنة، والمكونات الأخرى
componentDividerلون الحدود الداخلية (الحدود المشتركة) للمكونات
primaryTextلون نص الرأس
secondaryTextلون نص التسمية لحقول الإدخال
componentTextلون نص الإدخال (مثل رقم البطاقة، الرمز البريدي)
placeholderTextلون نص العنصر النائب لحقول الإدخال
iconلون الرموز (مثل زر الإغلاق)
errorلون رسائل الخطأ والإجراءات المدمرة
مثال على التكوين مع دعم للوضعين الفاتح والداكن:
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',
    },
  },
};

تخصيص الشكل

يمكنك تخصيص نصف قطر الحدود، وعرض الحدود، والظل المستخدم في جميع أنحاء واجهة الدفع:
const appearance = {
  shapes: {
    borderRadius: 10, // Border radius for input fields, tabs, and components
    borderWidth: 1,   // Border width for components
  },
};

تخصيص مكونات محددة

يمكنك تخصيص مكونات واجهة المستخدم المحددة مثل الزر الأساسي (زر الدفع). تأخذ هذه الإعدادات الأولوية على إعدادات المظهر العامة:
const appearance = {
  primaryButton: {
    colors: {
      background: '#000000',
      text: '#ffffff',
      border: '#ff00ff',
    },
    shapes: {
      borderRadius: 10,
      borderWidth: 1.5,
    },
  },
};
لتطبيق هذه التخصيصات، قم بتضمينها في تكوين جلسة الدفع الخاصة بك:
const params: sessionParams = {
  ...paymentSheetParams,
  configuration: {
    appearance: {
      themes: isDarkMode ? 'dark' : 'light',
      ...appearance, // Include your custom appearance settings
    },
  },
};

معالجة الأخطاء

تعامل مع حالات الدفع المختلفة في دالة الخروج الخاصة بك:
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);
  }
};
  • مشاكل الاتصال بالشبكة: تأكد من وجود اتصال إنترنت مستقر
  • سر العميل غير صالح: تحقق من أن الواجهة الخلفية تقوم بإنشاء نوايا دفع صالحة
  • اعتماديات مفقودة: قم بتثبيت جميع الاعتماديات المطلوبة
  • إعداد خاص بالمنصة: أكمل خطوات التكوين لنظامي iOS و Android
  • أخطاء API: تحقق من مرجع رموز الأخطاء لمعالجة الأخطاء بالتفصيل

طرق الدفع التجريبية

استخدم أرقام بطاقات الاختبار في بيئة التطوير للتحقق من تكامل الخاص بك دون معالجة مدفوعات حقيقية. تعرف على المزيد حول عملية الاختبار والبيئات التجريبية المتاحة.