UNPKG

@lmapp/react-native-cloudpayments

Version:

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

181 lines (171 loc) β€’ 7.75 kB
/** * @fileoverview Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ интСрфСйсы для CloudPayments SDK * @description Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π²ΠΎ всСм SDK * @author Leonid Molchanov * @since 1.0.0 */ import type { EPaymentFormEventName, EPaymentFormErrorCode } from './enums'; // ============================================================================ // BASE INTERFACES // ============================================================================ /** * Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ интСрфСйс для всСх ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² CloudPayments API * * @description Бтандартная структура ΠΎΡ‚Π²Π΅Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ SDK. * Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡΡ‚ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ сообщСниС для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. * * @example ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π° * ```typescript * import { PaymentService } from '@lmapp/react-native-cloudpayments'; * * const result = await PaymentService.presentPaymentForm(paymentData); * if (result.success) { * console.log('ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ ΡƒΡΠΏΠ΅ΡˆΠ½Π°:', result.message); * } else { * console.log('Ошибка:', result.message); * } * ``` * * @since 1.0.0 */ export interface IBaseResponse { /** * Π€Π»Π°Π³ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡΡ‚ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ * @description true - опСрация Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, false - ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка */ success: boolean; /** * Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ * @description ВСкстовоС описаниС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. * Π’ случаС успСха содСрТит ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅, Π² случаС ошибки - описаниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. */ message: string; } /** * Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ * * @description НаслСдуСт Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ ΠΈ добавляСт ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. * Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. * * @example ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ID Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ * ```typescript * const result = await PaymentService.presentPaymentForm(paymentData); * if (result.success && result.transactionId) { * console.log('Вранзакция создана с ID:', result.transactionId); * // БохраняСм ID для дальнСйшСго отслСТивания * await saveTransactionId(result.transactionId); * } * ``` * * @since 1.0.0 */ export interface IBaseResponseWithTransaction extends IBaseResponse { /** * Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ * @description Числовой ID Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² систСмС CloudPayments. * Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для отслСТивания статуса ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ° ΠΈ Π² ΠΎΡ‚Ρ‡Π΅Ρ‚Π°Ρ…. * ΠœΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ссли транзакция Π½Π΅ Π±Ρ‹Π»Π° создана. */ transactionId?: number; } /** * Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ интСрфСйс для всСх ошибок CloudPayments SDK * * @description Бтандартная структура ошибки, которая содСрТит ΠΊΠΎΠ΄ ошибки * ΠΈ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠ΅ сообщСниС. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ * ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок Π²ΠΎ всСм SDK. * * @example ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок с ΠΊΠΎΠ΄Π°ΠΌΠΈ * ```typescript * import { EPaymentFormErrorCode } from '@lmapp/react-native-cloudpayments'; * * try { * await PaymentService.presentPaymentForm(paymentData); * } catch (error: IBaseError) { * switch (error.code) { * case EPaymentFormErrorCode.CONFIGURATION_ERROR: * showAlert('Ошибка настройки', 'ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ SDK'); * break; * case EPaymentFormErrorCode.PAYMENT_FAILED: * showAlert('ΠŸΠ»Π°Ρ‚Π΅ΠΆ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½', error.message); * break; * default: * showAlert('Ошибка', error.message); * } * } * ``` * * @since 1.0.0 */ export interface IBaseError { /** * Код ошибки ΠΈΠ· пСрСчислСния EPaymentFormErrorCode * @description Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт * ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ошибок. */ code: EPaymentFormErrorCode; /** * Π§Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠ΅ описаниС ошибки * @description ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ сообщСниС ΠΎΠ± ошибкС Π½Π° русском языкС. * ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΈΠ»ΠΈ использовано для логирования. */ message: string; } /** * Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ интСрфСйс для Π΄Π°Π½Π½Ρ‹Ρ… событий ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ * * @description Бтандартная структура Π΄Π°Π½Π½Ρ‹Ρ… события, которая содСрТит * Π½Π°Π·Π²Π°Π½ΠΈΠ΅ события ΠΈ связанныС с Π½ΠΈΠΌ Π΄Π°Π½Π½Ρ‹Π΅. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ систСмой * событий SDK для увСдомлСния ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… этапах ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ½ΠΎΠ³ΠΎ процСсса. * * @template T - Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… события (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Record<string, any>) * * @example Подписка Π½Π° события с Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ * ```typescript * import { eventEmitter, EPaymentFormEventName } from '@lmapp/react-native-cloudpayments'; * * // Подписка Π½Π° событиС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ° * eventEmitter.addListener(EPaymentFormEventName.PAYMENT_SUCCESS, (eventData) => { * console.log('Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅:', eventData.eventName); * console.log('ID Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ:', eventData.data.transactionId); * console.log('Π‘ΡƒΠΌΠΌΠ°:', eventData.data.amount); * }); * * // Подписка Π½Π° событиС ошибки * eventEmitter.addListener(EPaymentFormEventName.PAYMENT_FAILED, (eventData) => { * console.log('Ошибка ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ°:', eventData.data.message); * console.log('Код ошибки:', eventData.data.errorCode); * }); * ``` * * @example Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ кастомного ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° событий * ```typescript * interface PaymentSuccessData { * transactionId: number; * amount: string; * currency: string; * } * * const handlePaymentSuccess = (eventData: IBaseEventData<PaymentSuccessData>) => { * const { transactionId, amount, currency } = eventData.data; * console.log(`ΠŸΠ»Π°Ρ‚Π΅ΠΆ Π½Π° ${amount} ${currency} ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½. ID: ${transactionId}`); * }; * ``` * * @since 1.0.0 */ export interface IBaseEventData<T = Record<string, any>> { /** * НазваниС события ΠΈΠ· пСрСчислСния EPaymentFormEventName * @description Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚ΠΈΠΏΠ° события, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт * ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ событиС ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ Π² ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅. */ eventName: EPaymentFormEventName; /** * Π”Π°Π½Π½Ρ‹Π΅, связанныС с событиСм * @description ΠžΠ±ΡŠΠ΅ΠΊΡ‚ с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ событии. * Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… зависит ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° события. НапримСр, для события * PAYMENT_SUCCESS содСрТит transactionId ΠΈ сумму ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ°. */ data: T; }