Getnet DocsGetnet Docs

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: -ObjC y -lsqlite3 en 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.

EntornoCaso 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 completas
  • onPaymentProcess - Actualizaciones de progreso durante la transacción
  • onPaymentFinished - 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
#endif

Solució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: