@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
text/typescript
/**
* @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>;
}