UNPKG

@lmapp/react-native-cloudpayments

Version:

πŸš€ ΠœΠΎΡ‰Π½Ρ‹ΠΉ SDK для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ΅ΠΉ CloudPayments Π² React Native. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Apple Pay, Google Pay, Π‘Π‘ΠŸ, банковских ΠΊΠ°Ρ€Ρ‚. Полная типизация TypeScript. iOS 12+ ΠΈ Android 21+

406 lines (396 loc) β€’ 16.5 kB
/** * @fileoverview Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ сСрвисов CloudPayments SDK * @description Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ Ρ‚ΠΈΠΏΡ‹ для основных сСрвисов SDK: ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ΅ΠΉ ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠ°Ρ€Ρ‚Π°ΠΌΠΈ * @author Leonid Molchanov * @since 1.0.0 */ import type { IPaymentData, ICreateIntentPaymentData, IPaymentFormResponse, IIntentResponse, IBankInfo, IPublicKeyResponse, EPaymentMethodType, } from './index'; // ============================================================================ // SERVICE INTERFACES // ============================================================================ /** * Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ сСрвиса для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с банковскими ΠΊΠ°Ρ€Ρ‚Π°ΠΌΠΈ * * @description БСрвис для Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ ΠΊΠ°Ρ€Ρ‚, получСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π±Π°Π½ΠΊΠ΅-эмитСнтС * ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ для ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ°Ρ€Ρ‚. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ * ΠΏΡ€ΠΈ создании собствСнных ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌ ΠΈΠ»ΠΈ для Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ. * * @example Π‘Π°Π·ΠΎΠ²ΠΎΠ΅ использованиС CardService * ```typescript * import { CardService } from '@lmapp/react-native-cloudpayments'; * * // ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° коррСктности Π½ΠΎΠΌΠ΅Ρ€Π° ΠΊΠ°Ρ€Ρ‚Ρ‹ * const isValid = CardService.isValidCardNumber('4111111111111111'); * console.log('ΠšΠ°Ρ€Ρ‚Π° Π²Π°Π»ΠΈΠ΄Π½Π°:', isValid); * * // ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π±Π°Π½ΠΊΠ΅ * const bankInfo = await CardService.getBankInfo('4111111111111111'); * console.log('Π‘Π°Π½ΠΊ:', bankInfo.bankName); * ``` * * @example Π Π°Π±ΠΎΡ‚Π° с ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ * ```typescript * // ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° для ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ * const publicKey = await CardService.getPublicKey(); * console.log('ВСрсия ΠΊΠ»ΡŽΡ‡Π°:', publicKey.Version); * * // Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ) * const cryptogram = createCryptogram(cardData, publicKey.Pem); * ``` * * @since 1.0.0 */ export interface ICardService { /** * ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° коррСктности Π½ΠΎΠΌΠ΅Ρ€Π° банковской ΠΊΠ°Ρ€Ρ‚Ρ‹ * * @description Π’Π°Π»ΠΈΠ΄ΠΈΡ€ΡƒΠ΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠ°Ρ€Ρ‚Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π›ΡƒΠ½Π° (Luhn algorithm). * ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€Π°, Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ * сущСствованиС ΠΊΠ°Ρ€Ρ‚Ρ‹ ΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ провСдСния ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ°. * * @param cardNumber - НомСр ΠΊΠ°Ρ€Ρ‚Ρ‹ (ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ ΠΈ дСфисы) * @returns Promise с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ * * @example Валидация Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² * ```typescript * // НомСр Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² * const isValid1 = await CardService.isValidCardNumber('4111111111111111'); * console.log('Visa:', isValid1); // true * * // НомСр с ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ * const isValid2 = await CardService.isValidCardNumber('4111 1111 1111 1111'); * console.log('Visa с ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ:', isValid2); // true * * // НомСр с дСфисами * const isValid3 = await CardService.isValidCardNumber('4111-1111-1111-1111'); * console.log('Visa с дСфисами:', isValid3); // true * * // НСкоррСктный Π½ΠΎΠΌΠ΅Ρ€ * const isValid4 = await CardService.isValidCardNumber('1234567890123456'); * console.log('НСкоррСктный:', isValid4); // false * ``` * * @example Валидация Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ * ```typescript * const handleCardNumberChange = async (cardNumber: string) => { * const isValid = await CardService.isValidCardNumber(cardNumber); * setCardNumberValid(isValid); * * if (isValid) { * // МоТно ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π±Π°Π½ΠΊΠ΅ * CardService.getBankInfo(cardNumber).then(bankInfo => { * setBankName(bankInfo.bankName); * }); * } * }; * ``` * * @since 1.0.0 */ isValidCardNumber(cardNumber: string): Promise<boolean>; /** * ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π±Π°Π½ΠΊΠ΅-эмитСнтС ΠΊΠ°Ρ€Ρ‚Ρ‹ * * @description ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ Π±Π°Π½ΠΊ-эмитСнт ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ ΠΊΠ°Ρ€Ρ‚Ρ‹ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ * ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π±Π°Π½ΠΊΠ΅, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈ Π»ΠΎΠ³ΠΎΡ‚ΠΈΠΏ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ BIN * (Bank Identification Number) - ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 6-8 Ρ†ΠΈΡ„Ρ€ Π½ΠΎΠΌΠ΅Ρ€Π° ΠΊΠ°Ρ€Ρ‚Ρ‹. * * @param cardNumber - НомСр банковской ΠΊΠ°Ρ€Ρ‚Ρ‹ * @returns Promise с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ Π±Π°Π½ΠΊΠ΅-эмитСнтС * * @example ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π±Π°Π½ΠΊΠ΅ * ```typescript * const bankInfo = await CardService.getBankInfo('4111111111111111'); * console.log('Π‘Π°Π½ΠΊ:', bankInfo.bankName); * if (bankInfo.logoUrl) { * console.log('Π›ΠΎΠ³ΠΎΡ‚ΠΈΠΏ:', bankInfo.logoUrl); * } * ``` * * @example ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π»ΠΎΠ³ΠΎΡ‚ΠΈΠΏΠ° Π±Π°Π½ΠΊΠ° Π² UI * ```typescript * const [bankInfo, setBankInfo] = useState<IBankInfo | null>(null); * * const handleCardNumberChange = async (cardNumber: string) => { * if (CardService.isValidCardNumber(cardNumber)) { * try { * const info = await CardService.getBankInfo(cardNumber); * setBankInfo(info); * } catch (error) { * console.log('НС ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π±Π°Π½ΠΊ'); * setBankInfo(null); * } * } * }; * * // Π’ JSX * {bankInfo && ( * <View> * <Text>{bankInfo.bankName}</Text> * {bankInfo.logoUrl && <Image source={{ uri: bankInfo.logoUrl }} />} * </View> * )} * ``` * * @throws {Error} Если Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π±Π°Π½ΠΊ ΠΈΠ»ΠΈ Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠ°Ρ€Ρ‚Ρ‹ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π΅Π½ * @since 1.0.0 */ getBankInfo(cardNumber: string): Promise<IBankInfo>; /** * ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° для ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ°Ρ€Ρ‚Ρ‹ * * @description Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ CloudPayments для * ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ°Ρ€Ρ‚Ρ‹ (Π½ΠΎΠΌΠ΅Ρ€, CVV, срок дСйствия). * ΠšΠ»ΡŽΡ‡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° сСрвСр. * * @returns Promise с ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ ΠΈ Π΅Π³ΠΎ вСрсиСй * * @example ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° * ```typescript * const publicKey = await CardService.getPublicKey(); * console.log('PEM ΠΊΠ»ΡŽΡ‡:', publicKey.Pem); * console.log('ВСрсия:', publicKey.Version); * ``` * * @example ИспользованиС для создания ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ * ```typescript * // ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ * const publicKey = await CardService.getPublicKey(); * * // ΠŸΠΎΠ΄Π³ΠΎΡ‚Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Ρ€Ρ‚Ρ‹ * const cardData = { * cardNumber: '4111111111111111', * expDate: '12/25', * cvv: '123', * cardHolderName: 'JOHN DOE' * }; * * // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ (Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для RSA) * const cryptogram = createCryptogram(cardData, publicKey.Pem); * * // ΠžΡ‚ΠΏΡ€Π°Π²Π»ΡΠ΅ΠΌ ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° сСрвСр * const paymentResult = await sendPaymentToServer({ * cryptogram, * amount: '1000.00', * currency: 'RUB' * }); * ``` * * @throws {Error} Если Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ * @see {@link https://developers.cloudpayments.ru/#kriptogramma-karty} ДокумСнтация ΠΏΠΎ ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ * @since 1.0.0 */ getPublicKey(): Promise<IPublicKeyResponse>; } /** * Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ сСрвиса для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ°ΠΌΠΈ * * @description Основной сСрвис CloudPayments SDK, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для * провСдСния ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ΅ΠΉ, создания Intent'ΠΎΠ² ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ способами ΠΎΠΏΠ»Π°Ρ‚Ρ‹. * ВсС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ асинхронныС ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Promise с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. * * @example Π‘Π°Π·ΠΎΠ²ΠΎΠ΅ использованиС PaymentService * ```typescript * import { PaymentService, IPaymentData } from '@lmapp/react-native-cloudpayments'; * * // Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ SDK * await PaymentService.init('pk_test_1234567890abcdef'); * * // Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ° * const paymentData: IPaymentData = { * publicId: 'pk_test_1234567890abcdef', * amount: '1000.00', * currency: 'RUB', * description: 'ВСстовый ΠΏΠ»Π°Ρ‚Π΅ΠΆ', * email: 'test@example.com' * }; * * // Запуск ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ * try { * const result = await PaymentService.presentPaymentForm(paymentData); * console.log('ΠŸΠ»Π°Ρ‚Π΅ΠΆ ΡƒΡΠΏΠ΅ΡˆΠ΅Π½:', result.transactionId); * } catch (error) { * console.log('Ошибка:', error.message); * } * ``` * * @example Π Π°Π±ΠΎΡ‚Π° с Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ способами ΠΎΠΏΠ»Π°Ρ‚Ρ‹ * ```typescript * import { EPaymentMethodType } from '@lmapp/react-native-cloudpayments'; * * // ΠžΠΏΠ»Π°Ρ‚Π° Ρ‡Π΅Ρ€Π΅Π· Tinkoff Pay * const tpayResult = await PaymentService.getIntentWaitStatus( * paymentData, * EPaymentMethodType.TPAY * ); * * // ΠžΠΏΠ»Π°Ρ‚Π° Ρ‡Π΅Ρ€Π΅Π· Π‘Π‘ΠŸ * const sbpResult = await PaymentService.getIntentWaitStatus( * paymentData, * EPaymentMethodType.SBP * ); * ``` * * @since 1.0.0 */ export interface IPaymentService { /** * Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ CloudPayments SDK * * @description ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ SDK с вашим Public ID. * Π”ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½ ΠΏΠ΅Ρ€Π΅Π΄ использованиСм Π»ΡŽΠ±Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² SDK. * Public ID ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π² Π»ΠΈΡ‡Π½ΠΎΠΌ ΠΊΠ°Π±ΠΈΠ½Π΅Ρ‚Π΅ CloudPayments. * * @param publicId - ΠŸΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΌΠ΅Ρ€Ρ‡Π°Π½Ρ‚Π° ΠΈΠ· Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ°Π±ΠΈΠ½Π΅Ρ‚Π° * * @example Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ SDK * ```typescript * // Для тСстового Ρ€Π΅ΠΆΠΈΠΌΠ° * await PaymentService.init('pk_test_1234567890abcdef'); * * // Для Π±ΠΎΠ΅Π²ΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ° * await PaymentService.init('pk_live_1234567890abcdef'); * ``` * * @throws {Error} Если Public ID Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π΅Π½ ΠΈΠ»ΠΈ нСдоступСн * @since 1.0.0 */ init(publicId: string): Promise<void>; /** * ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ стандартной ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ CloudPayments * * @description ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ CloudPayments с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ * всСх способов ΠΎΠΏΠ»Π°Ρ‚Ρ‹: банковскиС ΠΊΠ°Ρ€Ρ‚Ρ‹, Apple Pay, Google Pay ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅. * Π€ΠΎΡ€ΠΌΠ° автоматичСски адаптируСтся ΠΏΠΎΠ΄ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ ΠΈ настройки ΠΌΠ΅Ρ€Ρ‡Π°Π½Ρ‚Π°. * * @param paymentData - Π”Π°Π½Π½Ρ‹Π΅ ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ° ΠΈ конфигурация Ρ„ΠΎΡ€ΠΌΡ‹ * @returns Promise с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ°, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ID Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈ успСхС * * @example ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΏΠ»Π°Ρ‚Π΅ΠΆ * ```typescript * const paymentData: IPaymentData = { * publicId: 'pk_test_1234567890abcdef', * amount: '500.00', * currency: 'RUB', * description: 'ΠŸΠΎΠΊΡƒΠΏΠΊΠ° Ρ‚ΠΎΠ²Π°Ρ€Π°' * }; * * const result = await PaymentService.presentPaymentForm(paymentData); * if (result.success) { * console.log('Вранзакция:', result.transactionId); * } * ``` * * @example ΠŸΠ»Π°Ρ‚Π΅ΠΆ с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ настройками * ```typescript * const paymentData: IPaymentData = { * publicId: 'pk_test_1234567890abcdef', * amount: '1500.00', * currency: 'RUB', * description: 'Подписка Premium', * email: 'user@example.com', * requireEmail: true, * applePayMerchantId: 'merchant.com.myapp.payments', * showResultScreen: true * }; * * const result = await PaymentService.presentPaymentForm(paymentData); * ``` * * @throws {Error} Если Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ° Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка * @since 1.0.0 */ presentPaymentForm(paymentData: IPaymentData): Promise<IPaymentFormResponse>; /** * Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ½ΠΎΠ³ΠΎ намСрСния (Intent) * * @description Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ Intent - ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ½ΠΎΠ΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ * ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… способов ΠΎΠΏΠ»Π°Ρ‚Ρ‹ (TPay, Π‘Π‘ΠŸ, SberPay). * Intent содСрТит всю ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ΅ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован * для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ссылок ΠΈΠ»ΠΈ QR-ΠΊΠΎΠ΄ΠΎΠ². * * @param paymentData - Π”Π°Π½Π½Ρ‹Π΅ для создания Intent * @returns Promise с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ созданном Intent * * @example Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Intent * ```typescript * const intentData: ICreateIntentPaymentData = { * publicId: 'pk_test_1234567890abcdef', * amount: '2000.00', * currency: 'RUB', * description: 'ΠžΠΏΠ»Π°Ρ‚Π° Π·Π°ΠΊΠ°Π·Π° β„–12345', * email: 'customer@example.com' * }; * * const intent = await PaymentService.createIntent(intentData); * console.log('Intent ID:', intent.id); * console.log('Бтатус:', intent.status); * console.log('URL для ΠΎΠΏΠ»Π°Ρ‚Ρ‹:', intent.paymentUrl); * ``` * * @throws {Error} Если Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Intent * @see {@link https://developers.cloudpayments.ru/#intent} ДокумСнтация ΠΏΠΎ Intent API * @since 1.0.0 */ createIntent(paymentData: ICreateIntentPaymentData): Promise<IIntentResponse>; /** * ОТиданиС статуса Intent с запуском Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ способа ΠΎΠΏΠ»Π°Ρ‚Ρ‹ * * @description ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСт Intent, запускаСт * Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ способ ΠΎΠΏΠ»Π°Ρ‚Ρ‹ (TPay, Π‘Π‘ΠŸ, SberPay) ΠΈ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ°. * АвтоматичСски ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ Π² прилоТСния Π±Π°Π½ΠΊΠΎΠ² ΠΈ отслСТиваСт статус. * * @param paymentData - Π”Π°Π½Π½Ρ‹Π΅ ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ° * @param paymentMethod - Бпособ ΠΎΠΏΠ»Π°Ρ‚Ρ‹ ΠΈΠ· пСрСчислСния EPaymentMethodType * @returns Promise с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ° * * @example ΠžΠΏΠ»Π°Ρ‚Π° Ρ‡Π΅Ρ€Π΅Π· Tinkoff Pay * ```typescript * import { EPaymentMethodType } from '@lmapp/react-native-cloudpayments'; * * const result = await PaymentService.getIntentWaitStatus( * paymentData, * EPaymentMethodType.TPAY * ); * * if (result.success) { * console.log('ΠžΠΏΠ»Π°Ρ‚Π° Ρ‡Π΅Ρ€Π΅Π· TPay ΡƒΡΠΏΠ΅ΡˆΠ½Π°'); * } * ``` * * @example ΠžΠΏΠ»Π°Ρ‚Π° Ρ‡Π΅Ρ€Π΅Π· Π‘Π‘ΠŸ * ```typescript * const sbpResult = await PaymentService.getIntentWaitStatus( * paymentData, * EPaymentMethodType.SBP * ); * * if (sbpResult.success) { * console.log('ΠžΠΏΠ»Π°Ρ‚Π° Ρ‡Π΅Ρ€Π΅Π· Π‘Π‘ΠŸ ΡƒΡΠΏΠ΅ΡˆΠ½Π°'); * } * ``` * * @example ΠžΠΏΠ»Π°Ρ‚Π° Ρ‡Π΅Ρ€Π΅Π· SberPay * ```typescript * const sberResult = await PaymentService.getIntentWaitStatus( * paymentData, * EPaymentMethodType.SBERPAY * ); * ``` * * @throws {Error} Если способ ΠΎΠΏΠ»Π°Ρ‚Ρ‹ Π½Π΅ поддСрТиваСтся ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка * @since 1.0.0 */ getIntentWaitStatus( paymentData: ICreateIntentPaymentData, paymentMethod: EPaymentMethodType ): Promise<IPaymentFormResponse>; }