Inicializar el SDK
Antes de procesar pagos, el SDK debe autenticarse y la configuración del comercio debe sincronizarse con la pasarela de Get Mini. Esta guía cubre los pasos esenciales de inicialización: establecer el entorno, validar tu licencia y realizar el Login del comercio.
Requisitos
Antes de comenzar, asegúrate de tener:
- Bundle ID registrado con Get Mini para la validación de la licencia
- Clave de licencia asociada con tu Bundle ID proporcionada por Get Mini
- Credenciales de comercio (nombre de usuario y contraseña para inicio de sesión)
- Flags de linker configurados:
-ObjCy-lsqlite3en Build Settings - SDK instalado con todos los archivos de encabezado accesibles vía Bridging Header
Completa Instalar el SDK y Configurar Permisos iOS antes de proceder.
Pasos de inicialización
Paso 1: Fijar entorno y licencia
La clase CommonUtils gestiona la configuración global del SDK. Inicializa estos lo antes posible, idealmente en el application(_:didFinishLaunchingWithOptions:) de tu AppDelegate:
// Importar vía Bridging Header: CommonUtils.h
import UIKit
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// 1. Fijar entorno de ejecución
// Opciones: "des" (Desarrollo), "int" (Integración),
// "ccal" (CCAL), "real" (Producción)
CommonUtils.setEntorno("des")
// 2. Fijar licencia de aplicación proporcionada por Get Mini
CommonUtils.setAppLicense("SU_CLAVE_DE_LICENCIA_AQUI")
return true
}El entorno determina qué servidores de pasarela Get Mini procesan tus transacciones. La clave de licencia valida tu Bundle ID para prevenir el uso no autorizado.
| Entorno | Caso de Uso |
|---|---|
"des" | Desarrollo y pruebas iniciales |
"int" | Pruebas de integración con Get Mini |
"ccal" | Entorno CCAL |
"real" | Producción (requiere aprobación de Get Mini) |
Nunca establezcas el entorno a "real" hasta que tu aplicación haya sido oficialmente certificada por Get Mini.
Paso 2: Realizar el Login de comercio
Para procesar transacciones, el SDK necesita la configuración del comercio (FUC, ID de Terminal, etc.) de la pasarela Get Mini. Obtén esto realizando un Login utilizando RedsysConfigurationManager:
// Importar vía Bridging Header: DatosLoginDTO.h, RedsysConfigurationManager.h
func performMerchantLogin() {
let credentials = DatosLoginDTO(user: "usuario_comercio",
andPass: "contraseña_comercio")
RedsysConfigurationManager.obtenerDatosComercioLogin(credentials) { response, error in
if let merchantData = response,
let merchant = merchantData.merchantList?.first as? MerchantDataDTO,
let terminal = merchant.listaTerm?.first as? TerminalDataDTO {
print("Login exitoso: \(merchant.nameComplete ?? "")")
print("FUC: \(terminal.fuc ?? "")")
print("Terminal: \(terminal.terminal ?? "")")
// Almacenar merchantData para operaciones de pago
self.saveMerchantConfiguration(merchantData)
} else {
print("Fallo de Login: \(error?.localizedDescription ?? "Error desconocido")")
self.handleLoginError(error)
}
}
}El DatosLoginResponseDTO que se obtiene al iniciar sesión con éxito no expone directamente el FUC, el terminal ni el nombre del comercio. Contiene merchantList, un array de objetos MerchantDataDTO: el nombre del comercio se obtiene de nameComplete o nameReduced en ese objeto. Cada MerchantDataDTO tiene su propio array listaTerm de objetos TerminalDataDTO, que contienen fuc, terminal, currency y services (una lista de códigos de permisos).
Almacena esta configuración de forma segura para usarla al crear objetos MerchanDTO para operaciones de pago.
Para implementaciones en las que no se requieren credenciales para cada sesión, consulta el manual sobre opciones de “Login sin credenciales” (Login Transparente).
Paso 3: Implementar protocolos de delegado
Tu controlador de vista debe implementar los protocolos de delegado del SDK para recibir callbacks durante la inicialización y el procesamiento de pagos.
// Importar vía Bridging Header: RedsysPinpadManager.h
class PaymentViewController: UIViewController,
RedsysDelegateGeneric,
RedsysBTPinpadInitDelegate,
RedsysBTPinpadPaymentDelegate {
var merchantConfig: DatosLoginResponseDTO?
override func viewDidLoad() {
super.viewDidLoad()
// La inicialización ocurrirá al iniciar el flujo de pago
}
// MARK: - Delegado de Inicialización
func onInitFinished(_ result: Any!, orError error: Error!) {
if let config = result as? PinpadConfig {
print("PIN pad listo para transacciones")
// Proceder al pago
} else {
print("Error de inicialización: \(error?.localizedDescription ?? "")")
}
}
// MARK: - Delegados de Pago
func onPaymentProcess(_ result: Any!, orError error: Error!) {
// Llamado durante el procesamiento de pago para actualizaciones de progreso
print("Pago en progreso...")
}
func onPaymentFinished(_ result: RespuestaTransaccionDTO!, orError error: Error!) {
if let transaction = result, error == nil {
print("Pago aprobado: \(transaction.codigoRespuesta ?? "")")
// Guardar transacción, generar recibo
} else {
print("Pago fallido: \(error?.localizedDescription ?? "")")
// Manejar error, permitir reintento
}
}
}Estos delegados proporcionan callbacks en diferentes etapas:
onInitFinished- Conexión y configuración del PIN pad completasonPaymentProcess- Actualizaciones de progreso durante la transacciónonPaymentFinished- Resultado final de la transacción
Mejores prácticas
Manejo seguro de credenciales
Nunca codifiques credenciales de comercio directamente en el código fuente:
// ❌ MAL: Credenciales codificadas
let credentials = DatosLoginDTO(user: "miusuario", andPass: "micontraseña")
// ✅ BIEN: Recuperadas de almacenamiento seguro o backend
let credentials = DatosLoginDTO(
user: SecureStorage.shared.merchantUsername,
andPass: SecureStorage.shared.merchantPassword
)Recupera credenciales de tu API backend segura o almacenamiento local cifrado en tiempo de ejecución. Nunca confirmes credenciales en el control de versiones.
Gestión del ciclo de vida del delegado
Asegúrate de que tu objeto delegado (usualmente un View Controller) permanezca en memoria durante la duración de la transacción. Si el View Controller es desasignado antes de que se llame a onPaymentFinished, no recibirá el resultado de la transacción.
Para aplicaciones complejas con múltiples flujos de pago, considera crear una clase coordinadora de pagos dedicada que implemente los protocolos de delegado y gestione toda la lógica de transacción separadamente de los controladores de vista.
Configuración del entorno
Usa configuraciones de compilación para gestionar diferentes entornos:
#if DEBUG
CommonUtils.setEntorno("des")
#else
CommonUtils.setEntorno("real") // Solo después de certificación
#endifSolución de problemas
Validación de Licencia Falla
Verifica que tu Bundle ID coincida exactamente con lo registrado con Get Mini. Verifica en Xcode bajo General > Identity > Bundle Identifier.
Inicio de Sesión Devuelve Error
Asegúrate de estar usando el entorno correcto ("des" para credenciales de prueba). Verifica que las credenciales sean válidas para el entorno seleccionado.
Delegados No Llamados
Confirma que has establecido el delegado antes de llamar a los métodos de pago y que el objeto delegado no ha sido desasignado.
Próximos pasos
Con el SDK inicializado y la configuración del comercio recuperada, procede a:
- Inicio rápido: Tu primera venta - Ejemplo de flujo de pago completo
- Ciclo de vida de la transacción - Entender las fases del proceso de pago
- Seguridad y licencias - Aprender sobre las funcionalidades de seguridad del SDK