UNPKG

expo-mercadopago-integration

Version:

Expo library for integrating Mercado Pago native SDK without ejecting

250 lines (186 loc) 6.15 kB
# Expo Mercado Pago SDK Una librería npm para integrar el SDK nativo de Mercado Pago en aplicaciones Expo sin necesidad de ejectar. ## 🚀 Características - ✅ Integración completa con el SDK nativo de Mercado Pago - ✅ Soporte para iOS y Android - ✅ No requiere ejectar de Expo - ✅ TypeScript support - ✅ Manejo de eventos de pago - ✅ Verificación de app instalada - ✅ Configuración automática de permisos ## 📦 Instalación ```bash npm install expo-mercadopago-sdk ``` ## 🔧 Configuración ### 1. Configurar el plugin en app.json ```json { "expo": { "plugins": [ [ "./node_modules/expo-mercadopago-sdk/plugin.js", { "publicKey": "TEST-12345678-1234-1234-1234-123456789012" } ] ] } } ``` ### 2. Configurar las credenciales Obtén tu `public_key` desde el [panel de desarrolladores de Mercado Pago](https://www.mercadopago.com.ar/developers/panel/credentials). ## 📖 Uso ### Inicialización básica ```typescript import { createMercadoPagoSDK, MercadoPagoConfig } from 'expo-mercadopago-sdk'; const config: MercadoPagoConfig = { publicKey: 'TEST-12345678-1234-1234-1234-123456789012', siteId: 'MLA', // Argentina language: 'es', }; const mercadopago = createMercadoPagoSDK(config); await mercadopago.initialize(); ``` ### Iniciar un pago ```typescript // Opción 1: Usando preference ID const result = await mercadopago.startPayment('123456789-12345678-12345678-12345678'); // Opción 2: Configurando preference ID en la configuración const config: MercadoPagoConfig = { publicKey: 'TEST-12345678-1234-1234-1234-123456789012', preferenceId: '123456789-12345678-12345678-12345678', }; const mercadopago = createMercadoPagoSDK(config); await mercadopago.initialize(); const result = await mercadopago.startPayment(); ``` ### Escuchar eventos de pago ```typescript const subscription = mercadopago.addPaymentResultListener((result) => { switch (result.status) { case 'approved': console.log('Pago aprobado:', result.paymentId); break; case 'rejected': console.log('Pago rechazado:', result.statusDetail); break; case 'pending': console.log('Pago pendiente'); break; case 'in_process': console.log('Pago en proceso'); break; } }); // Limpiar listener cuando no se necesite mercadopago.removePaymentResultListener(subscription); ``` ### Verificar si Mercado Pago está instalado ```typescript const isInstalled = await mercadopago.isMercadoPagoInstalled(); console.log('Mercado Pago instalado:', isInstalled); ``` ### Obtener versión del SDK ```typescript const version = await mercadopago.getSDKVersion(); console.log('Versión del SDK:', version); ``` ## 🏗️ Estructura del proyecto ``` expo-mercadopago-sdk/ ├── src/ │ └── ExpoMercadoPagoModule.ts # Interfaz TypeScript ├── ios/ │ ├── ExpoMercadoPagoModule.swift # Módulo nativo iOS │ └── ExpoMercadoPagoModule.podspec ├── android/ │ ├── build.gradle │ └── src/main/java/expo/modules/mercadopago/ │ └── ExpoMercadoPagoModule.kt # Módulo nativo Android ├── plugin.js # Plugin de configuración Expo ├── example/ │ └── App.tsx # Ejemplo de uso ├── package.json └── README.md ``` ## 🔌 API Reference ### MercadoPagoConfig ```typescript interface MercadoPagoConfig { publicKey: string; // Tu public key de Mercado Pago preferenceId?: string; // ID de preferencia (opcional) siteId?: string; // ID del sitio (ej: 'MLA' para Argentina) language?: string; // Idioma (ej: 'es', 'en') } ``` ### PaymentResult ```typescript interface PaymentResult { status: 'approved' | 'rejected' | 'pending' | 'in_process'; paymentId: string; statusDetail: string; paymentData?: PaymentData; error?: { message: string; code: string; }; } ``` ### Métodos disponibles - `initialize()`: Inicializa el SDK - `startPayment(preferenceId?)`: Inicia el flujo de pago - `addPaymentResultListener(callback)`: Agrega listener para eventos de pago - `removePaymentResultListener(subscription)`: Remueve listener - `isMercadoPagoInstalled()`: Verifica si la app está instalada - `getSDKVersion()`: Obtiene la versión del SDK ## 🛠️ Desarrollo ### Prerrequisitos - Node.js 16+ - Expo CLI - Xcode (para iOS) - Android Studio (para Android) ### Instalación de dependencias ```bash npm install ``` ### Build ```bash npm run build ``` ### Limpiar ```bash npm run clean ``` ### Nota sobre dependencias Esta librería utiliza `expo-modules-core` como dependencia principal. Si encuentras errores de instalación, asegúrate de tener una versión compatible de Expo en tu proyecto. ## 📱 Ejemplo completo Ver el archivo `example/App.tsx` para un ejemplo completo de implementación. ## 🔒 Permisos La librería automáticamente configura los siguientes permisos: **Android:** - `android.permission.INTERNET` - `android.permission.ACCESS_NETWORK_STATE` **iOS:** - URL schemes para Mercado Pago ## 🐛 Troubleshooting ### Error: "Module not found" Asegúrate de que el plugin esté configurado correctamente en `app.json`. ### Error: "Public key required" Verifica que estés usando una public key válida de Mercado Pago. ### Error: "Preference ID required" Asegúrate de proporcionar un preference ID válido antes de iniciar el pago. ## 📄 Licencia MIT ## 🤝 Contribuir 1. Fork el proyecto 2. Crea una rama para tu feature (`git checkout -b feature/AmazingFeature`) 3. Commit tus cambios (`git commit -m 'Add some AmazingFeature'`) 4. Push a la rama (`git push origin feature/AmazingFeature`) 5. Abre un Pull Request ## 📞 Soporte Si tienes problemas o preguntas, abre un issue en GitHub. ## 🔗 Enlaces útiles - [Documentación oficial de Mercado Pago](https://www.mercadopago.com.ar/developers/es/docs/sdks-library/client-side/sdk-nativo) - [Panel de desarrolladores](https://www.mercadopago.com.ar/developers/panel) - [Expo Modules](https://docs.expo.dev/modules/module-api/)