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

دمج SDK لـ React Native

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

الميزات

Simplified Security

اجمع بيانات الدفع الحساسة بأمان مع الالتزام بمتطلبات PCI

Multiple Payment Methods

اقبل طرق الدفع المتنوعة لتوسيع التواجد العالمي

Native UI

شاشات وعناصر أصيلة لأندرويد وiOS
حاليًا، Apple Pay وGoogle Pay وCash App وUPI غير مدعومة في SDK ريأكت نيتيف. نحن نعمل بنشاط لإضافة دعم لهذه طرق الدفع في الإصدارات القادمة.

التثبيت

1

Install the SDK

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

Platform-specific setup

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

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

1

Get Publishable Key

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

Setup Payment Provider

قم بتغليف تطبيقك بـ 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

Create payment utility function

أنشئ دالة مساعدة لجلب معلمات الدفع من واجهة برمجة التطبيقات الخلفية الخاصة بك:
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

Implement the payment screen

أنشئ شاشة الدفع الخاصة بك باستخدام هوك useCheckout. فيما يلي تنفيذ كامل:
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
مطلوب
سر العميل من نية الدفع، يتم الحصول عليه من واجهة One time payment أو الاشتراك.
mode
string
مطلوب
وضع جلسة الدفع (تجريبي أو حي).
configuration.appearance
object
خيارات التخصيص لمظهر صفحة الدفع
configuration.appearance.themes
string
وضع السمة: 'light' أو 'dark'

تخصيص المظهر

يمكنك تخصيص تجربة الدفع الموحدة في React Native لتتناسب مع تصميم تطبيقك عن طريق تعديل الألوان والخطوط والمزيد من خلال معلمة appearance عند استدعاء 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: راجع مرجع رموز الأخطاء للتعامل المفصل مع الأخطاء

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

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