ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ основному содСрТимому

πŸ“· Π‘ΠΊΠ°Π½Π΅Ρ€ банковских ΠΊΠ°Ρ€Ρ‚ (CardIO)

CardIO - это Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для сканирования банковских ΠΊΠ°Ρ€Ρ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ мобильного устройства. ВмСсто Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° Π½ΠΎΠΌΠ΅Ρ€Π° ΠΊΠ°Ρ€Ρ‚Ρ‹ ΠΈ срока дСйствия, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ просто навСсти ΠΊΠ°ΠΌΠ΅Ρ€Ρƒ Π½Π° ΠΊΠ°Ρ€Ρ‚Ρƒ.

🎯 ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ возмоТности​

  • АвтоматичСскоС распознаваниС Π½ΠΎΠΌΠ΅Ρ€Π° ΠΊΠ°Ρ€Ρ‚Ρ‹ ΠΈ срока дСйствия
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° всСх основных ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ½Ρ‹Ρ… систСм (Visa, MasterCard, МИР ΠΈ Π΄Ρ€.)
  • Гибкая настройка интСрфСйса ΠΈ повСдСния сканСра
  • Локализация Π½Π° 12+ языков
  • Material Design Ρ†Π²Π΅Ρ‚ΠΎΠ²Ρ‹Π΅ схСмы

πŸ—οΈ АрхитСктура ΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒβ€‹

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ платформы​

  • Android: API 21+ (Android 5.0+) - полная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ°
  • iOS: iOS 11.0+ - Ρ‚ΠΎΠ»ΡŒΠΊΠΎ новая Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° (M-сСрия Ρ‡ΠΈΠΏΠΎΠ²)
Π’Π°ΠΆΠ½ΠΎ для iOS

Π’ ΠΌΠΎΠ΄ΡƒΠ»Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ кастомный скомпилированный Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ CardIO ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄ Π½ΠΎΠ²ΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ iOS.

Бтарая Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° iOS НЕ ΠŸΠžΠ”Π”Π•Π Π–Π˜Π’ΠΠ•Π’Π‘Π― - Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° устройствах с Ρ‡ΠΈΠΏΠ°ΠΌΠΈ M-сСрии ΠΈ Π½ΠΎΠ²ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ React Native.

πŸš€ Быстрый старт​

Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ сканСра​

Для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ CardIO сканСра Π² ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠΎΠ»Π΅ enableCardScanner:

import { useCloudPayments } from '@lmapp/react-native-cloudpayments';
import type { IPaymentData } from '@lmapp/react-native-cloudpayments';

const paymentData: IPaymentData = {
publicId: 'pk_test_1234567890abcdef',
amount: '1000.00',
currency: 'RUB',
description: 'ВСстовый ΠΏΠ»Π°Ρ‚Π΅ΠΆ',
enableCardScanner: true, // βœ… Π’ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ сканСр ΠΊΠ°Ρ€Ρ‚
};

const [presentPaymentForm] = useCloudPayments('pk_test_1234567890abcdef');

// Запуск ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ со сканСром
await presentPaymentForm(paymentData);

Базовая конфигурация​

import { 
ECardIOLanguage,
ECardIOColorScheme
} from '@lmapp/react-native-cloudpayments';
import type { ICardIOConfig, IPaymentData } from '@lmapp/react-native-cloudpayments';

const cardScannerConfig: ICardIOConfig = {
requireExpiry: true,
requireCVV: false,
hideCardIOLogo: true,
actionBarColor: ECardIOColorScheme.MATERIAL_BLUE,
guideColor: ECardIOColorScheme.MATERIAL_GREEN,
language: ECardIOLanguage.RUSSIAN
};

const paymentData: IPaymentData = {
publicId: 'pk_test_1234567890abcdef',
amount: '1000.00',
currency: 'RUB',
description: 'ВСстовый ΠΏΠ»Π°Ρ‚Π΅ΠΆ',
enableCardScanner: true,
cardScannerConfig: cardScannerConfig // βœ… Π”Π΅Ρ‚Π°Π»ΡŒΠ½Π°Ρ настройка
};

βš™οΈ ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ ICardIOConfig​

Поля карты​

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π’ΠΈΠΏΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅
requireExpirybooleantrueΠ’Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ Π²Π²ΠΎΠ΄ срока дСйствия ΠΊΠ°Ρ€Ρ‚Ρ‹
requireCVVbooleanfalseΠ’Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ Π²Π²ΠΎΠ΄ CVV ΠΊΠΎΠ΄Π° ⚠️ НЕ Π Π•ΠšΠžΠœΠ•ΠΠ”Π£Π•Π’Π‘Π―
requirePostalCodebooleanfalseΠ’Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ Π²Π²ΠΎΠ΄ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ индСкса
requireCardholderNamebooleanfalseΠ’Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ Π²Π²ΠΎΠ΄ ΠΈΠΌΠ΅Π½ΠΈ дСрТатСля ΠΊΠ°Ρ€Ρ‚Ρ‹
const fieldsConfig: ICardIOConfig = {
requireExpiry: true, // βœ… ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ для Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ
requireCVV: false, // ❌ НСбСзопасно, Π»ΡƒΡ‡ΡˆΠ΅ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ
requirePostalCode: false, // Для Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ
requireCardholderName: true // ПолСзно для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ
};

Настройки интСрфСйса​

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π’ΠΈΠΏΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅
hideCardIOLogobooleantrueΠ‘ΠΊΡ€Ρ‹Ρ‚ΡŒ Π»ΠΎΠ³ΠΎΡ‚ΠΈΠΏ CardIO
usePayPalLogobooleanfalseΠ˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΎΡ‚ΠΈΠΏ PayPal
suppressManualEntrybooleanfalseΠ‘ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°
const interfaceConfig: ICardIOConfig = {
hideCardIOLogo: true, // βœ… Для Π±Ρ€Π΅Π½Π΄ΠΈΠ½Π³Π° прилоТСния
usePayPalLogo: false, // Волько Ссли ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ с PayPal
suppressManualEntry: false // ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°
};

ЦвСтовая схСма​

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π’ΠΈΠΏΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅
actionBarColorECardIOColorScheme | stringΠ¦Π²Π΅Ρ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° сканСра
guideColorECardIOColorScheme | stringΠ¦Π²Π΅Ρ‚ Ρ€Π°ΠΌΠΊΠΈ сканирования
// ИспользованиС прСдустановлСнных Ρ†Π²Π΅Ρ‚ΠΎΠ²
const colorsConfig: ICardIOConfig = {
actionBarColor: ECardIOColorScheme.MATERIAL_BLUE,
guideColor: ECardIOColorScheme.MATERIAL_GREEN,
};

// ИспользованиС кастомных hex-ΠΊΠΎΠ΄ΠΎΠ²
const customColorsConfig: ICardIOConfig = {
actionBarColor: '#1976D2',
guideColor: '#4CAF50',
};

ДоступныС Ρ†Π²Π΅Ρ‚ΠΎΠ²Ρ‹Π΅ схСмы​

enum ECardIOColorScheme {
MATERIAL_BLUE = '#2196F3',
MATERIAL_GREEN = '#4CAF50',
MATERIAL_RED = '#F44336',
MATERIAL_ORANGE = '#FF9800',
MATERIAL_PURPLE = '#9C27B0',
MATERIAL_INDIGO = '#3F51B5',
MATERIAL_CYAN = '#00BCD4',
MATERIAL_PINK = '#E91E63',
BLACK = '#000000',
WHITE = '#FFFFFF',
GRAY = '#9E9E9E',
}

Локализация​

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π’ΠΈΠΏΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅
languageECardIOLanguage | stringΠ―Π·Ρ‹ΠΊ интСрфСйса сканСра
const localizationConfig: ICardIOConfig = {
language: ECardIOLanguage.RUSSIAN, // Русский интСрфСйс
};

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ языки​

enum ECardIOLanguage {
ENGLISH = 'en', // Английский
RUSSIAN = 'ru', // Русский
FRENCH = 'fr', // Ѐранцузский
GERMAN = 'de', // НСмСцкий
ITALIAN = 'it', // Π˜Ρ‚Π°Π»ΡŒΡΠ½ΡΠΊΠΈΠΉ
JAPANESE = 'ja', // Японский
KOREAN = 'ko', // ΠšΠΎΡ€Π΅ΠΉΡΠΊΠΈΠΉ
PORTUGUESE = 'pt', // ΠŸΠΎΡ€Ρ‚ΡƒΠ³Π°Π»ΡŒΡΠΊΠΈΠΉ
SWEDISH = 'sv', // ШвСдский
CHINESE_SIMPLIFIED = 'zh-Hans', // ΠšΠΈΡ‚Π°ΠΉΡΠΊΠΈΠΉ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹ΠΉ
CHINESE_TRADITIONAL = 'zh-Hant', // ΠšΠΈΡ‚Π°ΠΉΡΠΊΠΈΠΉ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ
SPANISH = 'es', // Испанский
}

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ настройки​

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π’ΠΈΠΏΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅
suppressConfirmationbooleanfalseΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π²ΠΈΠ±Ρ€Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΈ сканировании
suppressScanbooleanfalseΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π·Π²ΡƒΠΊ ΠΏΡ€ΠΈ сканировании
keepApplicationThemebooleanfalseΠ‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΌΡƒ прилоТСния
const additionalConfig: ICardIOConfig = {
suppressConfirmation: false, // ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²ΠΈΠ±Ρ€Π°Ρ†ΠΈΡŽ для UX
suppressScan: false, // ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π·Π²ΡƒΠΊ для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связи
keepApplicationTheme: true // βœ… Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΌΡƒ прилоТСния
};

πŸ“‹ ΠŸΠΎΠ»Π½Ρ‹Π΅ примСры​

Минимальная конфигурация​

import type { IPaymentData } from '@lmapp/react-native-cloudpayments';

const paymentData: IPaymentData = {
publicId: 'pk_test_1234567890abcdef',
amount: '1000.00',
currency: 'RUB',
description: 'ВСстовый ΠΏΠ»Π°Ρ‚Π΅ΠΆ',
enableCardScanner: true // Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ конфигурация ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
};

РСкомСндуСмая конфигурация​

import { 
ECardIOLanguage,
ECardIOColorScheme
} from '@lmapp/react-native-cloudpayments';

const recommendedConfig: ICardIOConfig = {
// Поля ΠΊΠ°Ρ€Ρ‚Ρ‹
requireExpiry: true, // βœ… ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ для Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ
requireCVV: false, // ❌ Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅ всСго
requirePostalCode: false,
requireCardholderName: false,

// Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ
hideCardIOLogo: true, // βœ… Чистый Π±Ρ€Π΅Π½Π΄ΠΈΠ½Π³
usePayPalLogo: false,
suppressManualEntry: false, // βœ… ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ

// Π¦Π²Π΅Ρ‚Π°
actionBarColor: ECardIOColorScheme.MATERIAL_BLUE,
guideColor: ECardIOColorScheme.MATERIAL_GREEN,

// Локализация
language: ECardIOLanguage.RUSSIAN,

// Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ
suppressConfirmation: false,
suppressScan: false,
keepApplicationTheme: true // βœ… Π•Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΠ΅ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ
};

Максимальная конфигурация​

const fullConfig: ICardIOConfig = {
// ВсС поля ΠΊΠ°Ρ€Ρ‚Ρ‹
requireExpiry: true,
requireCVV: false, // ⚠️ НЕ Π Π•ΠšΠžΠœΠ•ΠΠ”Π£Π•Π’Π‘Π―
requirePostalCode: true,
requireCardholderName: true,

// Полная настройка интСрфСйса
hideCardIOLogo: true,
usePayPalLogo: false,
suppressManualEntry: false,

// ΠšΠ°ΡΡ‚ΠΎΠΌΠ½Ρ‹Π΅ Ρ†Π²Π΅Ρ‚Π°
actionBarColor: '#1976D2', // Material Blue 700
guideColor: '#388E3C', // Material Green 700

// Локализация
language: ECardIOLanguage.RUSSIAN,

// ВсС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ настройки
suppressConfirmation: false,
suppressScan: false,
keepApplicationTheme: true
};

const paymentData: IPaymentData = {
publicId: 'pk_test_1234567890abcdef',
amount: '1000.00',
currency: 'RUB',
description: 'ΠŸΡ€Π΅ΠΌΠΈΡƒΠΌ ΠΏΠ»Π°Ρ‚Π΅ΠΆ с ΠΏΠΎΠ»Π½Ρ‹ΠΌ сканСром',
email: 'user@example.com',
accountId: 'user_12345',
enableCardScanner: true,
cardScannerConfig: fullConfig
};

πŸ”„ Π›ΠΎΠ³ΠΈΠΊΠ° активации​

CardIO сканСр активируСтся ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ:

  1. АвтоматичСская активация: Если ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π° cardScannerConfig, сканСр Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ автоматичСски
  2. Явная активация: Установка enableCardScanner: true
  3. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: Если Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ, создаСтся Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ сканСр с настройками ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
// 1. АвтоматичСская активация
const paymentData1 = {
// ... Π±Π°Π·ΠΎΠ²Ρ‹Π΅ поля
cardScannerConfig: { requireExpiry: true } // βœ… Π‘ΠΊΠ°Π½Π΅Ρ€ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡΡ автоматичСски
};

// 2. Явная активация
const paymentData2 = {
// ... Π±Π°Π·ΠΎΠ²Ρ‹Π΅ поля
enableCardScanner: true // βœ… Π―Π²Π½ΠΎΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅
};

// 3. Активация с ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ
const paymentData3 = {
// ... Π±Π°Π·ΠΎΠ²Ρ‹Π΅ поля
enableCardScanner: true,
cardScannerConfig: { /* настройки */ } // βœ… Π›ΡƒΡ‡ΡˆΠΈΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄
};

πŸ“Š Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ данныС​

ПослС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ сканирования CardIO Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚:

  • НомСр ΠΊΠ°Ρ€Ρ‚Ρ‹ - распознанный Π½ΠΎΠΌΠ΅Ρ€ банковской ΠΊΠ°Ρ€Ρ‚Ρ‹
  • ΠœΠ΅ΡΡΡ† истСчСния - мСсяц срока дСйствия (Ссли requireExpiry: true)
  • Π“ΠΎΠ΄ истСчСния - Π³ΠΎΠ΄ срока дСйствия (Ссли requireExpiry: true)
  • CVV - ΠΊΠΎΠ΄ бСзопасности (Ссли requireCVV: true)
  • Имя дСрТатСля - имя Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅ (Ссли requireCardholderName: true)

Π”Π°Π½Π½Ρ‹Π΅ автоматичСски ΠΏΠΎΠ΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² поля ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹.

πŸ”’ Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒβ€‹

βœ… РСкомСндации​

  1. CVV: НС собирайтС CVV Ρ‡Π΅Ρ€Π΅Π· сканСр - Π²Π²ΠΎΠ΄ΠΈΡ‚Π΅ Π² Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅
  2. Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅: ВсС Π΄Π°Π½Π½Ρ‹Π΅ ΡˆΠΈΡ„Ρ€ΡƒΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ Π² CloudPayments
  3. Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°: Π‘ΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ происходит локально Π½Π° устройствС

⚠️ ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡβ€‹

  • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ: ВрСбуСтся Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° использованиС ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹
  • ΠžΡΠ²Π΅Ρ‰Π΅Π½ΠΈΠ΅: ΠšΠ°Ρ‡Π΅ΡΡ‚Π²ΠΎ зависит ΠΎΡ‚ освСщСния
  • АрхитСктура iOS: Волько новая Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° с M-Ρ‡ΠΈΠΏΠ°ΠΌΠΈ

πŸ› ΠžΡ‚Π»Π°Π΄ΠΊΠ°β€‹

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° активации​

const paymentData: IPaymentData = {
// ... Π±Π°Π·ΠΎΠ²Ρ‹Π΅ поля
enableCardScanner: true,
cardScannerConfig: {
requireExpiry: true,
language: ECardIOLanguage.RUSSIAN
}
};

console.log('CardIO конфигурация:', paymentData.cardScannerConfig);

ЧастыС проблСмы​

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°Π Π΅ΡˆΠ΅Π½ΠΈΠ΅
Π‘ΠΊΠ°Π½Π΅Ρ€ Π½Π΅ запускаСтсяНСт Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π² настройках
НСвСрныС Ρ†Π²Π΅Ρ‚Π°ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ hex-ΠΊΠΎΠ΄Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ECardIOColorScheme
Локализация Π½Π΅ работаСтНСподдСрТиваСмый ΡΠ·Ρ‹ΠΊΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ECardIOLanguage
iOS Π½Π΅ работаСтБтарая Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΄ΠΎ Π½ΠΎΠ²ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹

🎨 ΠšΠ°ΡΡ‚ΠΎΠΌΠΈΠ·Π°Ρ†ΠΈΡ интСрфСйса​

ЦвСтовая схСма брСнда​

// ΠŸΡ€ΠΈΠΌΠ΅Ρ€ для синСго Π±Ρ€Π΅Π½Π΄Π°
const brandBlueConfig: ICardIOConfig = {
actionBarColor: '#1565C0', // ВСмно-синий заголовок
guideColor: '#42A5F5', // Π‘Π²Π΅Ρ‚Π»ΠΎ-синяя Ρ€Π°ΠΌΠΊΠ°
keepApplicationTheme: true
};

// ΠŸΡ€ΠΈΠΌΠ΅Ρ€ для Π·Π΅Π»Π΅Π½ΠΎΠ³ΠΎ Π±Ρ€Π΅Π½Π΄Π°
const brandGreenConfig: ICardIOConfig = {
actionBarColor: '#2E7D32', // Π’Π΅ΠΌΠ½ΠΎ-Π·Π΅Π»Π΅Π½Ρ‹ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ
guideColor: '#66BB6A', // Π‘Π²Π΅Ρ‚Π»ΠΎ-зСлСная Ρ€Π°ΠΌΠΊΠ°
keepApplicationTheme: true
};

ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΡΡ‚ΠΈΡ‡Π½Ρ‹ΠΉ дизайн​

const minimalConfig: ICardIOConfig = {
hideCardIOLogo: true, // Π£Π±Ρ€Π°Ρ‚ΡŒ всС Π»ΠΎΠ³ΠΎΡ‚ΠΈΠΏΡ‹
usePayPalLogo: false,
actionBarColor: '#FFFFFF', // Π‘Π΅Π»Ρ‹ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ
guideColor: '#000000', // ЧСрная Ρ€Π°ΠΌΠΊΠ°
suppressConfirmation: true, // Π£Π±Ρ€Π°Ρ‚ΡŒ Π²ΠΈΠ±Ρ€Π°Ρ†ΠΈΡŽ
suppressScan: true, // Π£Π±Ρ€Π°Ρ‚ΡŒ Π·Π²ΡƒΠΊΠΈ
keepApplicationTheme: true
};

πŸ“± Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с React Native​

ИспользованиС с хуками​

import { useCloudPayments } from '@lmapp/react-native-cloudpayments';

function PaymentScreen() {
const [presentPaymentForm, { isLoading }] = useCloudPayments(
'pk_test_1234567890abcdef',
{
onSuccess: (data) => {
console.log('ΠŸΠ»Π°Ρ‚Π΅ΠΆ ΡƒΡΠΏΠ΅ΡˆΠ΅Π½:', data.transactionId);
},
onError: (data) => {
console.error('Ошибка:', data.message);
}
}
);

const handlePayment = async () => {
const paymentData: IPaymentData = {
publicId: 'pk_test_1234567890abcdef',
amount: '1000.00',
currency: 'RUB',
description: 'ΠŸΠΎΠΊΡƒΠΏΠΊΠ° Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ',
enableCardScanner: true,
cardScannerConfig: {
requireExpiry: true,
language: ECardIOLanguage.RUSSIAN,
actionBarColor: ECardIOColorScheme.MATERIAL_BLUE
}
};

await presentPaymentForm(paymentData);
};

return (
<TouchableOpacity onPress={handlePayment} disabled={isLoading}>
<Text>ΠžΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ со сканСром ΠΊΠ°Ρ€Ρ‚</Text>
</TouchableOpacity>
);
}

πŸ”— БвязанныС раздСлы​

πŸ’‘ ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ссылки​