Configurar la cámara (escáner) - Funcionalidades del terminal - Mercado Pago Developers

Configurar la cámara (escáner)

Una de las funcionalidades de la terminal Point que podrás usar desde tu SmartApp es la cámara como escáner de un código QR o de barras, esencial para pagos presenciales . Además, también puede usarse para escanear códigos QR propios del establecimiento y códigos de barras de productos.

Para implementar esta funcionalidad, utiliza el método launchScanner de la clase cameraScanner dentro del objeto MPManager, y diferencia qué tipo de código quieres escanear mediante la clase ScanType, que puede ser:

  • CAMERA_SCANNER_QR: representa la lectura de códigos QR.
  • CAMERA_SCANNER_BARCODE: representa la lectura de códigos de barras.

Además, a través de la clase ScannerFlowRequestData también podrás controlar algunas funcionalidades visuales de la pantalla del escáner, como:

FuncionalidadTipoDescripción
isLanternOnBooleanIndica si el escáner debe abrir con la linterna de la terminal encendida. Si es así, true; si no, false. Esta funcionalidad no está disponible para lectura de códigos QR, solo para códigos de barras.
initialOrientationStringDefine la orientación inicial de la pantalla donde se mostrará el escáner, que puede ser vertical u horizontal. Los valores posibles son:

- null: la orientación será determinada por la implementación predeterminada de la pantalla del escáner, que actualmente es siempre vertical (Portrait).
- 0: orientación definida como horizontal (Landscape). Se recomienda pasar este valor como ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE.
- 1: orientación definida como vertical (Portrait). Se recomienda pasar este valor como ActivityInfo.SCREEN_ORIENTATION_PORTRAIT.

A continuación, ve un ejemplo de implementación del escáner.

val cameraScanner = MPManager.cameraScanner
/**
* Lanza la cámara para escanear un código QR con los datos de solicitud
**/
val requestData = ScannerFlowRequestData(
   isLanternOn = true, /** Control para encender la linterna, con valor booleano true */
   initialOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE /** Control para la orientación inicial de la pantalla como Landscape, con valor int 0 */
)

cameraScanner.launchScanner(ScanType.CAMERA_SCANNER_QR, requestData) { response ->
   response
       .doIfSuccess { result -> /** Manejo del resultado exitoso del escáner (result.message) */ }
       .doIfError { error -> /** Manejo del error que resulte del escáner (error.message.orEmpty()) */ }
}
/**
* Lanza la cámara para escanear un código de barras con los datos de solicitud
**/
val requestData = ScannerFlowRequestData(
   isLanternOn = false,  /** Control para encender la linterna, con valor booleano true */ 
   initialOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT /** Control para la orientación inicial de la pantalla como Landscape, con valor int 1 */
)

cameraScanner.launchScanner(ScanType.CAMERA_SCANNER_BARCODE, requestData) { response ->
   response
       .doIfSuccess { result -> /** Manejo del resultado exitoso del escáner (result.message) */ }
       .doIfError { error ->  /** Manejo del error que resulte del escáner (error.message.orEmpty()) */ }
}
final CameraScanner cameraScanner = MPManager.INSTANCE.getCameraScanner();
final ScannerFlowRequestData requestData = ScannerFlowRequestData(true, 0);
final Function<MPResponse<CameraScannerResponse>, Unit> callback = new Function<MPResponse<CameraScannerResponse>, Unit>() {
    @Override
    public Unit apply(MPResponse<CameraScannerResponse> response) {
        if (response.getStatus() == ResponseStatus.SUCCESS) {
            // Manejar la respuesta exitosa
            CameraScannerResponse cameraScannerResponse = response.getData();
            String result = cameraScannerResponse.getMessage();
            // ... Hacer algo con el resultado
        } else {
            // Manejar el error en la respuesta
            String errorMessage = response.getError();
            // ... Hacer algo con el error
        }
        return Unit.INSTANCE;
    }
};
/**
* Lanzar el escáner de cámara QR o Barra con el requestData y callback
* ScanType.CAMERA_SCANNER_QR, es el tipo para lanzar la cámara para leer QR
* ScanType.CAMERA_SCANNER_BARCODE, es el tipo para lanzar la cámara para leer código de barras 
*/
cameraScanner.launchScanner(ScanType.CAMERA_SCANNER_QR, requestData, callback);