@lmapp/react-native-cloudpayments
Version:
π ΠΠΎΡΠ½ΡΠΉ SDK Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΠΏΠ»Π°ΡΠ΅ΠΆΠ΅ΠΉ CloudPayments Π² React Native. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Apple Pay, Google Pay, Π‘ΠΠ, Π±Π°Π½ΠΊΠΎΠ²ΡΠΊΠΈΡ ΠΊΠ°ΡΡ. ΠΠΎΠ»Π½Π°Ρ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ TypeScript. iOS 12+ ΠΈ Android 21+
108 lines (100 loc) β’ 3.74 kB
text/typescript
/**
* @fileoverview Π₯ΡΠΊ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ»Π°ΡΠ΅ΠΆΠ½ΠΎΠΉ ΡΠΎΡΠΌΠΎΠΉ CloudPayments
* @description Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Ρ
ΡΠΊ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΠ»Π°ΡΠ΅ΠΆΠ½ΠΎΠΉ ΡΠΎΡΠΌΡ CloudPayments
* @author Leonid Molchanov
* @since 1.0.0
*/
import { useCallback } from 'react';
import { PaymentService } from '../../services';
import type { IPaymentData, IPaymentFormResponse } from '../../types';
import type {
// IUsePaymentFormOptions,
TUsePaymentFormReturn,
} from './types';
// ============================================================================
// HOOK IMPLEMENTATION
// ============================================================================
/**
* Π₯ΡΠΊ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ»Π°ΡΠ΅ΠΆΠ½ΠΎΠΉ ΡΠΎΡΠΌΠΎΠΉ CloudPayments
*
* @description ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΠΏΠ»Π°ΡΠ΅ΠΆΠ½ΠΎΠΉ ΡΠΎΡΠΌΡ CloudPayments.
* ΠΡΠΎΡ Ρ
ΡΠΊ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΠ΅Ρ Π»ΠΎΠ³ΠΈΠΊΡ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ»Π°ΡΠ΅ΠΆΠ½ΠΎΠΉ ΡΠΎΡΠΌΠΎΠΉ ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½
* Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
ΡΡΠ΅Π½Π°ΡΠΈΡΡ
ΠΎΠΏΠ»Π°ΡΡ.
*
* @param publicId - ΠΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΌΠ΅ΡΡΠ°Π½ΡΠ° CloudPayments
* @param options - ΠΠΏΡΠΈΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Ρ
ΡΠΊΠ° (ΠΏΠΎΠΊΠ° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ, Π·Π°ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°Π½Ρ Π΄Π»Ρ Π±ΡΠ΄ΡΡΠ΅Π³ΠΎ)
* @returns Π€ΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΠ»Π°ΡΠ΅ΠΆΠ½ΠΎΠΉ ΡΠΎΡΠΌΡ
*
* @example ΠΠ°Π·ΠΎΠ²ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
* ```typescript
* const presentPaymentForm = usePaymentForm('pk_test_1234567890abcdef');
*
* const handlePayment = async () => {
* try {
* const result = await presentPaymentForm({
* amount: '1000.00',
* currency: 'RUB',
* description: 'ΠΠΎΠΊΡΠΏΠΊΠ° ΡΠΎΠ²Π°ΡΠ°',
* email: 'user@example.com'
* });
*
* if (result.success) {
* console.log('ΠΠ»Π°ΡΠ΅ΠΆ ΡΡΠΏΠ΅ΡΠ΅Π½:', result.transactionId);
* } else {
* console.log('ΠΠ»Π°ΡΠ΅ΠΆ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½:', result.message);
* }
* } catch (error) {
* console.error('ΠΡΠΈΠ±ΠΊΠ° ΠΏΠ»Π°ΡΠ΅ΠΆΠ°:', error);
* }
* };
* ```
*
* @example ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ
* ```typescript
* const presentPaymentForm = usePaymentForm('pk_test_1234567890abcdef');
*
* const result = await presentPaymentForm({
* amount: '2500.00',
* currency: 'RUB',
* description: 'ΠΠΎΠ΄ΠΏΠΈΡΠΊΠ° Premium',
* email: 'user@example.com',
* requireEmail: true,
* applePayMerchantId: 'merchant.com.myapp.payments',
* showResultScreen: true
* });
* ```
*
* @since 1.0.0
*/
export const usePaymentForm = (
publicId: string
// options: IUsePaymentFormOptions = {}
): TUsePaymentFormReturn => {
/**
* Π€ΡΠ½ΠΊΡΠΈΡ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΠ»Π°ΡΠ΅ΠΆΠ½ΠΎΠΉ ΡΠΎΡΠΌΡ
*/
const presentPaymentForm = useCallback(
async (paymentData: IPaymentData): Promise<IPaymentFormResponse> => {
try {
// ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΏΠ»Π°ΡΠ΅ΠΆΠ½ΡΡ ΡΠΎΡΠΌΡ Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ
const result: IPaymentFormResponse =
await PaymentService.presentPaymentForm({
...paymentData,
publicId,
});
return result;
} catch (error) {
const errorMessage =
error instanceof Error ? error.message : 'ΠΠ΅ΠΈΠ·Π²Π΅ΡΡΠ½Π°Ρ ΠΎΡΠΈΠ±ΠΊΠ°';
// ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ
return {
success: false,
message: errorMessage,
transactionId: undefined,
};
}
},
[publicId]
);
return presentPaymentForm;
};