> ## Documentation Index
> Fetch the complete documentation index at: https://docs.compago.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Cómo acercar o insertar la tarjeta

> Cobra sin contacto o con chip en la terminal, y qué hacer cuando la tarjeta pide el PIN o tiene dos cuentas.

export const SupportBox = () => <aside className="cm-support">
		<span className="cm-support-icon">
			<svg className="cm-icon" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
				<path d="M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zM12 8a4 4 0 1 0 0 8 4 4 0 0 0 0-8zM4.93 4.93l4.24 4.24M14.83 9.17l4.24-4.24M14.83 14.83l4.24 4.24M9.17 14.83l-4.24 4.24" />
			</svg>
		</span>
		<div className="cm-support-body">
			<p className="cm-support-title">Estamos para ayudarte en lo que necesites.</p>
			<p className="cm-support-text">Escríbenos por WhatsApp o por correo: del otro lado está el equipo de Compago.</p>
			<div className="cm-support-actions">
				<a className="cm-button cm-button-whatsapp" href="https://wa.me/525510033582?text=Hola%2C%20necesito%20ayuda%20con%20Compago." target="_blank" rel="noopener noreferrer">
					<svg className="cm-icon" width="18" height="18" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
						<path d="M17.47 14.38c-.3-.15-1.76-.87-2.03-.97-.27-.1-.47-.15-.67.15-.2.3-.77.97-.94 1.16-.17.2-.35.22-.64.08-.3-.15-1.26-.47-2.39-1.48-.88-.79-1.48-1.76-1.65-2.06-.17-.3-.02-.46.13-.61.13-.13.3-.35.45-.52.15-.17.2-.3.3-.5.1-.2.05-.37-.03-.52-.07-.15-.67-1.61-.92-2.21-.24-.58-.49-.5-.67-.51h-.57c-.2 0-.52.07-.79.37-.27.3-1.04 1.02-1.04 2.48 0 1.46 1.07 2.88 1.21 3.07.15.2 2.1 3.2 5.08 4.49.71.31 1.26.49 1.7.63.71.23 1.36.2 1.87.12.57-.09 1.76-.72 2.01-1.41.25-.69.25-1.29.17-1.41-.07-.12-.27-.2-.57-.35zm-5.42 7.4h-.01a9.87 9.87 0 0 1-5.03-1.38l-.36-.21-3.74.98 1-3.65-.24-.37a9.86 9.86 0 0 1-1.51-5.26c0-5.45 4.44-9.88 9.89-9.88 2.64 0 5.12 1.03 6.99 2.9a9.83 9.83 0 0 1 2.89 7c0 5.45-4.44 9.88-9.88 9.880zm8.41-18.3A11.82 11.82 0 0 0 12.05 0C5.5 0 .16 5.34.16 11.89c0 2.1.55 4.14 1.59 5.95L.06 24l6.3-1.65a11.88 11.88 0 0 0 5.68 1.45h.01c6.55 0 11.89-5.34 11.89-11.89a11.82 11.82 0 0 0-3.48-8.41z" />
					</svg>
					WhatsApp +52 55 1003 3582
				</a>
				<a className="cm-button" href="mailto:ayuda@compago.com">
					<svg className="cm-icon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
						<path d="M4 4h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2zM22 7l-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7" />
					</svg>
					ayuda@compago.com
				</a>
			</div>
		</div>
	</aside>;

export const GuideImage = ({src, preview, alt, width, height, caption, variant = 'screen'}) => {
  const [open, setOpen] = useState(false);
  const [view, setView] = useState(null);
  const opener = useRef(null);
  const dialog = useRef(null);
  const viewport = useRef(null);
  const closeButton = useRef(null);
  const fitScale = useRef(1);
  const drag = useRef(null);
  const long = height / width > 1.6;
  const icon = (d, size = 18) => <svg className="cm-icon" width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
			<path d={d} />
		</svg>;
  const ZOOM_IN = 'M11 3a8 8 0 1 0 0 16 8 8 0 0 0 0-16zM21 21l-4.35-4.35M11 8v6M8 11h6';
  const ZOOM_OUT = 'M11 3a8 8 0 1 0 0 16 8 8 0 0 0 0-16zM21 21l-4.35-4.35M8 11h6';
  const FIT = 'M3 7V5a2 2 0 0 1 2-2h2M17 3h2a2 2 0 0 1 2 2v2M21 17v2a2 2 0 0 1-2 2h-2M7 21H5a2 2 0 0 1-2-2v-2';
  const DOWNLOAD = 'M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M7 10l5 5 5-5M12 15V3';
  const CLOSE = 'M18 6 6 18M6 6l12 12';
  const clampView = next => {
    const el = viewport.current;
    if (!el) return next;
    const w = width * next.scale;
    const h = height * next.scale;
    const keep = 96;
    const x = w <= el.clientWidth ? (el.clientWidth - w) / 2 : Math.min(keep, Math.max(el.clientWidth - w - keep, next.x));
    const y = h <= el.clientHeight ? (el.clientHeight - h) / 2 : Math.min(keep, Math.max(el.clientHeight - h - keep, next.y));
    return {
      scale: next.scale,
      x,
      y
    };
  };
  const fit = () => {
    const el = viewport.current;
    if (!el) return;
    const scale = long ? Math.min(1, el.clientWidth * 0.94 / width) : Math.min(1, el.clientWidth * 0.94 / width, el.clientHeight * 0.88 / height);
    fitScale.current = scale;
    setView(clampView({
      scale,
      x: (el.clientWidth - width * scale) / 2,
      y: long ? 72 : (el.clientHeight - height * scale) / 2
    }));
  };
  const zoomAt = (factor, cx, cy) => {
    setView(current => {
      const el = viewport.current;
      if (!current || !el) return current;
      const px = cx ?? el.clientWidth / 2;
      const py = cy ?? el.clientHeight / 2;
      const scale = Math.min(Math.max(fitScale.current * 0.5, current.scale * factor), Math.max(1.5, fitScale.current * 6));
      const ratio = scale / current.scale;
      return clampView({
        scale,
        x: px - (px - current.x) * ratio,
        y: py - (py - current.y) * ratio
      });
    });
  };
  const panBy = (dx, dy) => setView(current => current && clampView({
    ...current,
    x: current.x + dx,
    y: current.y + dy
  }));
  const close = () => {
    setOpen(false);
    setView(null);
    opener.current?.focus();
  };
  const show = event => {
    opener.current = event.currentTarget;
    setOpen(true);
  };
  const actions = useRef({});
  actions.current = {
    fit,
    zoomAt,
    panBy,
    close
  };
  useEffect(() => {
    const modal = dialog.current;
    if (!open || !modal) return undefined;
    if (!modal.open) modal.showModal();
    const el = viewport.current;
    actions.current.fit();
    closeButton.current?.focus();
    const onResize = () => actions.current.fit();
    const onKey = event => {
      const {zoomAt: zoom, panBy: pan} = actions.current;
      if (event.key === '+' || event.key === '=') zoom(1.25); else if (event.key === '-' || event.key === '_') zoom(0.8); else if (event.key === '0') actions.current.fit(); else if (event.key === 'ArrowUp') pan(0, 120); else if (event.key === 'ArrowDown') pan(0, -120); else if (event.key === 'ArrowLeft') pan(120, 0); else if (event.key === 'ArrowRight') pan(-120, 0); else return;
      event.preventDefault();
    };
    const onWheel = event => {
      event.preventDefault();
      const rect = el.getBoundingClientRect();
      if (event.ctrlKey || event.metaKey) actions.current.zoomAt(Math.exp(-event.deltaY * 0.0022), event.clientX - rect.left, event.clientY - rect.top); else actions.current.panBy(-event.deltaX, -event.deltaY);
    };
    const root = document.documentElement;
    const overflow = root.style.overflow;
    root.style.overflow = 'hidden';
    window.addEventListener('resize', onResize);
    document.addEventListener('keydown', onKey);
    el?.addEventListener('wheel', onWheel, {
      passive: false
    });
    return () => {
      root.style.overflow = overflow;
      window.removeEventListener('resize', onResize);
      document.removeEventListener('keydown', onKey);
      el?.removeEventListener('wheel', onWheel);
      if (modal.open) modal.close();
    };
  }, [open]);
  const onPointerDown = event => {
    if (event.button !== 0) return;
    drag.current = {
      x: event.clientX,
      y: event.clientY,
      travel: 0
    };
    event.currentTarget.setPointerCapture(event.pointerId);
  };
  const onPointerMove = event => {
    const start = drag.current;
    if (!start) return;
    const dx = event.clientX - start.x;
    const dy = event.clientY - start.y;
    start.travel += Math.abs(dx) + Math.abs(dy);
    start.x = event.clientX;
    start.y = event.clientY;
    panBy(dx, dy);
  };
  const onPointerUp = event => {
    const start = drag.current;
    drag.current = null;
    if (!start || start.travel > 6 || !view) return;
    const rect = viewport.current.getBoundingClientRect();
    const x = event.clientX - rect.left;
    const y = event.clientY - rect.top;
    const inside = x >= view.x && x <= view.x + width * view.scale && y >= view.y && y <= view.y + height * view.scale;
    if (!inside) close();
  };
  const onDoubleClick = event => {
    const rect = viewport.current.getBoundingClientRect();
    if (view && view.scale > fitScale.current * 1.4) fit(); else zoomAt(2.2, event.clientX - rect.left, event.clientY - rect.top);
  };
  const percent = view ? Math.round(view.scale / fitScale.current * 100) : 100;
  const viewer = open && <dialog ref={dialog} className="cm-overlay cm-lightbox" aria-label={alt} onCancel={event => {
    event.preventDefault();
    actions.current.close();
  }} onClick={event => {
    if (!event.target.closest('button, a, .cm-lightbox-viewport')) close();
  }}>
			<div className="cm-overlay-bar">
				<span className="cm-overlay-title">{alt}</span>
				<span className="cm-overlay-tools">
					<button type="button" className="cm-tool" onClick={() => zoomAt(0.8)} aria-label="Alejar" title="Alejar (−)">
						{icon(ZOOM_OUT)}
					</button>
					<button type="button" className="cm-tool cm-tool-text" onClick={fit} aria-label="Ajustar a la pantalla" title="Ajustar a la pantalla (0)">
						{percent}%
					</button>
					<button type="button" className="cm-tool" onClick={() => zoomAt(1.25)} aria-label="Acercar" title="Acercar (+)">
						{icon(ZOOM_IN)}
					</button>
					<button type="button" className="cm-tool" onClick={fit} aria-label="Ajustar a la pantalla" title="Ajustar a la pantalla (0)">
						{icon(FIT)}
					</button>
					<a className="cm-tool" href={src} download aria-label="Descargar imagen" title="Descargar imagen">
						{icon(DOWNLOAD)}
					</a>
					<span className="cm-tool-gap" />
					<button type="button" ref={closeButton} className="cm-tool" onClick={close} aria-label="Cerrar" title="Cerrar (Esc)">
						{icon(CLOSE)}
					</button>
				</span>
			</div>
			<div className="cm-lightbox-viewport" ref={viewport} onPointerDown={onPointerDown} onPointerMove={onPointerMove} onPointerUp={onPointerUp} onPointerCancel={() => {
    drag.current = null;
  }} onDoubleClick={onDoubleClick}>
				{view && <img className="cm-lightbox-img" src={src} alt={alt} width={width} height={height} draggable={false} style={{
    transform: `translate(${view.x}px, ${view.y}px) scale(${view.scale})`
  }} />}
			</div>
			<p className="cm-lightbox-help">Arrastra para moverte · ⌘ o Ctrl + rueda para acercar · Doble clic para ampliar · Clic afuera o Esc para cerrar</p>
		</dialog>;
  if (variant === 'guide') {
    return <figure className="cm-guide">
				<button type="button" className="cm-guide-open" onClick={show} aria-label={`Ver la guía completa: ${alt}`}>
					<img src={preview ?? src} alt={alt} loading="lazy" decoding="async" />
					<span className="cm-guide-button">
						{icon(ZOOM_IN, 17)}
						Ver la guía completa
					</span>
				</button>
				{caption && <figcaption className="cm-figure-caption">{caption}</figcaption>}
				{viewer}
			</figure>;
  }
  return <figure className={variant === 'terminal' ? 'cm-figure cm-figure-terminal' : 'cm-figure'}>
			<button type="button" className="cm-figure-open" onClick={show} aria-label={`Ampliar la imagen: ${alt}`}>
				<img src={preview ?? src} alt={alt} width={width} height={height} loading="lazy" decoding="async" />
				<span className="cm-figure-hint">
					{icon(ZOOM_IN, 15)}
					Ampliar
				</span>
			</button>
			{caption && <figcaption className="cm-figure-caption">{caption}</figcaption>}
			{viewer}
		</figure>;
};

export const GuideVideo = ({src, poster, title, duration, caption}) => {
  const dialog = useRef(null);
  const player = useRef(null);
  const opener = useRef(null);
  const resumeAt = useRef(0);
  const pageOverflow = useRef('');
  const icon = (d, size = 18, fill = false) => <svg className="cm-icon" width={size} height={size} viewBox="0 0 24 24" fill={fill ? 'currentColor' : 'none'} stroke="currentColor" strokeWidth={fill ? 1.6 : 2} strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
			<path d={d} />
		</svg>;
  const PLAY = 'M9 6.5 18.5 12 9 17.5z';
  const MAXIMIZE = 'M8 3H5a2 2 0 0 0-2 2v3M21 8V5a2 2 0 0 0-2-2h-3M3 16v3a2 2 0 0 0 2 2h3M16 21h3a2 2 0 0 0 2-2v-3';
  const CLOSE = 'M18 6 6 18M6 6l12 12';
  const open = event => {
    const modal = dialog.current;
    const video = player.current;
    if (!modal || !video || modal.open) return;
    opener.current = event.currentTarget;
    pageOverflow.current = document.documentElement.style.overflow;
    document.documentElement.style.overflow = 'hidden';
    modal.showModal();
    video.currentTime = resumeAt.current;
    video.play().catch(() => {});
    video.focus();
  };
  const onClose = () => {
    const video = player.current;
    if (video) {
      resumeAt.current = video.ended ? 0 : video.currentTime;
      video.pause();
    }
    document.documentElement.style.overflow = pageOverflow.current;
    opener.current?.focus();
  };
  const close = () => {
    if (dialog.current?.open) dialog.current.close();
  };
  const fullscreen = () => {
    const video = player.current;
    if (!video) return;
    video.play().catch(() => {});
    if (video.requestFullscreen) video.requestFullscreen().catch(() => {}); else if (video.webkitEnterFullscreen) video.webkitEnterFullscreen();
  };
  return <figure className="cm-video">
			<button type="button" className="cm-video-frame" onClick={open} aria-label={`Ver el video: ${title}`}>
				<img className="cm-video-thumb" src={poster} alt="" decoding="async" />
				<span className="cm-video-play">{icon(PLAY, 34, true)}</span>
				<span className="cm-video-pill">
					{icon(PLAY, 12, true)}
					Video tutorial
				</span>
				{duration && <span className="cm-video-duration">{duration}</span>}
			</button>
			{caption && <figcaption className="cm-video-caption">{caption}</figcaption>}
			<dialog ref={dialog} className="cm-overlay" aria-label={title} onClose={onClose} onClick={event => {
    if (!event.target.closest('video, button, a')) close();
  }}>
				<div className="cm-theater">
					<div className="cm-overlay-bar">
						<span className="cm-overlay-title">{title}</span>
						<span className="cm-overlay-tools">
							<button type="button" className="cm-tool" onClick={fullscreen} aria-label="Pantalla completa" title="Pantalla completa">
								{icon(MAXIMIZE)}
							</button>
							<button type="button" className="cm-tool" onClick={close} aria-label="Cerrar" title="Cerrar (Esc)">
								{icon(CLOSE)}
							</button>
						</span>
					</div>
					<video ref={player} className="cm-theater-video" src={src} poster={poster} controls playsInline preload="none" tabIndex={-1}>
						Tu navegador no puede reproducir este video.
					</video>
				</div>
			</dialog>
		</figure>;
};

Cuando la terminal dice **Acerca o inserta tu tarjeta**, el cobro ya solo depende de la tarjeta de tu cliente. Esta guía recorre lo que la terminal muestra desde ese momento hasta el pago aprobado, y qué hacer cuando pide el PIN.

<GuideVideo src="https://docs-media.compago.com/manual/terminal/leer-la-tarjeta/video.mp4" poster="/media/manual/terminal/leer-la-tarjeta/poster.webp" title="Cómo acercar o insertar la tarjeta" duration="1:37" caption="Mira el paso a paso y síguelo en tu terminal." />

## Dónde está en la app

* Es el último paso de un cobro. Aparece después de escribir el monto y tocar **Cobrar**, y de confirmar la propina, el plan de pago y la cuenta de depósito cuando tu negocio los usa.
* No se abre desde ningún menú: la terminal llega sola a esta pantalla.

## Antes de empezar

* Necesitas un cobro en curso, con su monto. Si todavía no haces uno, empieza por [Cobrar con tarjeta](/manual/terminal/cobrar-con-tarjeta).
* La terminal lee tarjetas sin contacto y tarjetas con chip, además de celulares con pago sin contacto.
* La terminal necesita conexión a internet para cobrar.
* Cualquier vendedor con la sesión iniciada en la terminal puede cobrar.

## Paso a paso

<Steps titleSize="h3">
  <Step title="Acerca la tarjeta" id="paso-1">
    <GuideImage variant="terminal" src="/media/manual/terminal/leer-la-tarjeta/paso-1.webp" preview="/media/manual/terminal/leer-la-tarjeta/paso-1-vista.webp" width={1341} height={2860} alt="Paso 1: la terminal muestra «Acerca o inserta tu tarjeta» con el total de $1,000.00; el símbolo de pago sin contacto, arriba de la terminal, está marcado" />

    Después del monto y el plan de pago, la terminal dice **Acerca o inserta tu tarjeta**. Para pagar sin contacto, tu cliente acerca su tarjeta o su celular al símbolo de arriba de la terminal.

    <Tip>La terminal espera la tarjeta 20 segundos. Si no llega, avisa **Tarjeta no detectada** y te deja volver a intentar.</Tip>
  </Step>

  <Step title="Insértala por el chip" id="paso-2">
    <GuideImage variant="terminal" src="/media/manual/terminal/leer-la-tarjeta/paso-2.webp" preview="/media/manual/terminal/leer-la-tarjeta/paso-2-vista.webp" width={1341} height={2860} alt="Paso 2: la misma pantalla «Acerca o inserta tu tarjeta»; la ranura del chip, en la parte de abajo de la terminal, está marcada" />

    La otra forma es con chip, en la misma pantalla: tu cliente inserta la tarjeta en la ranura de abajo de la terminal y la deja ahí hasta que la terminal pida retirarla.
  </Step>

  <Step title="Espera la lectura" id="paso-3">
    <GuideImage variant="terminal" src="/media/manual/terminal/leer-la-tarjeta/paso-3.webp" preview="/media/manual/terminal/leer-la-tarjeta/paso-3-vista.webp" width={1341} height={2860} alt="Paso 3: la terminal muestra «Leyendo tarjeta» y «No retires la tarjeta», con el total del cobro abajo" />

    En cuanto detecta la tarjeta, la terminal dice **Leyendo tarjeta**. No hay nada que tocar: la tarjeta se queda donde está.
  </Step>

  <Step title="Pide el PIN" id="paso-4">
    <GuideImage variant="terminal" src="/media/manual/terminal/leer-la-tarjeta/paso-4.webp" preview="/media/manual/terminal/leer-la-tarjeta/paso-4-vista.webp" width={1341} height={2860} alt="Paso 4: la terminal muestra «Ingresa tu PIN» y cuatro asteriscos; en la mitad de abajo, el espacio donde aparece el teclado del PIN" />

    Si la tarjeta lo pide, la terminal dice **Ingresa tu PIN**. Acércale la terminal a tu cliente: su teclado seguro aparece en la mitad de abajo de la pantalla y ahí escribe su PIN.

    <Tip>Tu cliente tiene un minuto para escribir su PIN, de cuatro dígitos. Nadie más necesita verlo.</Tip>
  </Step>

  <Step title="Espera el resultado" id="paso-5">
    <GuideImage variant="terminal" src="/media/manual/terminal/leer-la-tarjeta/paso-5.webp" preview="/media/manual/terminal/leer-la-tarjeta/paso-5-vista.webp" width={1341} height={2860} alt="Paso 5: la terminal muestra «Procesando pago» y «No retires la tarjeta»; abajo, el total y «Visa •••• 4242 · Pago único»" />

    Con la tarjeta leída, la terminal dice **Procesando pago** y abajo muestra el total y la tarjeta. Sigue sin haber nada que tocar.
  </Step>

  <Step title="Retira la tarjeta" id="paso-6">
    <GuideImage variant="terminal" src="/media/manual/terminal/leer-la-tarjeta/paso-6.webp" preview="/media/manual/terminal/leer-la-tarjeta/paso-6-vista.webp" width={1341} height={2860} alt="Paso 6: la terminal muestra «Retira la tarjeta», con el total y la tarjeta abajo" />

    Cuando la terminal dice **Retira la tarjeta**, tu cliente la saca de la ranura. Si pagó sin contacto, este aviso sale antes de **Procesando pago**, en cuanto la terminal termina de leerla.
  </Step>

  <Step title="Revisa el pago aprobado" id="paso-7">
    <GuideImage variant="terminal" src="/media/manual/terminal/leer-la-tarjeta/paso-7.webp" preview="/media/manual/terminal/leer-la-tarjeta/paso-7-vista.webp" width={1341} height={2860} alt="Paso 7: la pantalla «Pago aprobado» con el total; la tarjeta «Visa •••• 4242 · Pago único» está marcada" />

    La terminal imprime el comprobante y muestra **Pago aprobado**, con la marca y los últimos cuatro dígitos de la tarjeta que se leyó.
  </Step>
</Steps>

## Qué pasa después

* Desde **Pago aprobado**, con **Imprimir** sacas otra copia del comprobante y con **Nuevo cobro** vuelves al teclado para la siguiente venta.
* El cobro queda en **Transacciones**, con la marca y los últimos cuatro dígitos de la tarjeta. Ahí puedes [ver su detalle](/manual/terminal/ver-el-detalle-de-un-cobro).
* Si el banco de tu cliente no aprueba el pago, la terminal muestra **Pago rechazado** y no hace ningún cargo. Te lo explicamos en [Qué hacer con un pago rechazado](/manual/terminal/pago-rechazado).
* Si la terminal no logra leer la tarjeta, muestra un aviso con **Volver a intentar** y **Cancelar pago**. Los avisos están en [Qué hacer si la tarjeta no se lee](/manual/terminal/la-tarjeta-no-se-lee).

## Preguntas frecuentes

<AccordionGroup>
  <Accordion title="¿Mi cliente puede pagar con su celular?">
    Sí. La pantalla dice **Acerca tu tarjeta o celular**: se acerca al mismo símbolo de arriba de la terminal, igual que una tarjeta sin contacto.
  </Accordion>

  <Accordion title="¿Por qué la terminal pide PIN con unas tarjetas y con otras no?">
    Depende de la tarjeta de tu cliente. Cuando lo requiere, la terminal muestra **Ingresa tu PIN**; cuando no, pasa sola a **Procesando pago**.
  </Accordion>

  <Accordion title="¿Dónde se escribe el PIN? No veo el teclado en las imágenes">
    El teclado del PIN es de la propia terminal, por seguridad, y por eso no sale en las imágenes de esta guía. Aparece en la mitad de abajo de la pantalla mientras dice **Ingresa tu PIN**, y arriba se marca un asterisco por cada dígito. Solo tu cliente debe escribirlo.
  </Accordion>

  <Accordion title="¿Qué significa «Esta tarjeta tiene dos cuentas»?">
    Algunas tarjetas traen más de una cuenta, por ejemplo crédito y débito. Mientras lee la tarjeta, la terminal muestra la lista y pide **Elige con cuál se paga.** Tu cliente toca la cuenta y después **Continuar**. Con **Cancelar pago** el cobro se cancela sin ningún cargo y vuelves a **Nuevo cobro**.
  </Accordion>

  <Accordion title="¿Puedo cancelar mientras la terminal lee la tarjeta?">
    Mientras dice **Leyendo tarjeta** o **Procesando pago** no hay nada que tocar. Antes de acercar la tarjeta sí puedes salir: toca **Cancelar**, arriba a la derecha. Te lo explicamos en [Cancelar un cobro a medias](/manual/terminal/cancelar-un-cobro).
  </Accordion>
</AccordionGroup>

## Errores comunes

### «Tarjeta no detectada»

Pasaron 20 segundos sin que la terminal detectara una tarjeta. Toca **Volver a intentar** y acerca o inserta la tarjeta otra vez.

### «PIN incorrecto»

El PIN que escribió tu cliente no es el de la tarjeta. La terminal dice cuántos intentos quedan, por ejemplo «Tienes 2 intentos más. Vuelve a intentarlo o utiliza otra tarjeta.». Toca **Volver a intentar** para que lo escriba de nuevo.

### «PIN bloqueado»

Se acabaron los intentos del PIN. La terminal dice «Por favor, utiliza otra tarjeta o contacta a tu banco.»: tu cliente tiene que pagar con otra tarjeta y revisar la suya con su banco.

### «Tiempo de espera agotado»

Pasó un minuto sin que se escribiera el PIN. La terminal dice «El tiempo para ingresar el PIN ha expirado. Por favor, vuelve a intentarlo.». Toca **Volver a intentar**: la terminal lee la tarjeta y pide el PIN otra vez.

### «Inserta la tarjeta con chip»

La tarjeta se acercó, pero este pago necesita el chip. La terminal dice «Para completar el pago, inserta en la ranura del chip la misma tarjeta que acercaste. Déjala insertada hasta que termine el cobro.». Al insertarla, el cobro sigue solo. También puedes tocar **Pagar con otra tarjeta** o **Cancelar pago**.

Los demás avisos del lector están en [Qué hacer si la tarjeta no se lee](/manual/terminal/la-tarjeta-no-se-lee).

## Guía en una imagen

Todos los pasos en una sola imagen, para tenerla a mano o compartirla con tu equipo.

<GuideImage variant="guide" src="/media/manual/terminal/leer-la-tarjeta/guia.webp" preview="/media/manual/terminal/leer-la-tarjeta/guia-vista.webp" width={4560} height={10819} alt="Cómo acercar o insertar la tarjeta: todos los pasos en una imagen" caption="Ábrela para acercarte a cada paso o descárgala." />

## Guías relacionadas

<CardGroup cols={2}>
  <Card title="Cobra con tarjeta" icon="credit-card" href="/manual/terminal/cobrar-con-tarjeta">
    El cobro completo, del monto al pago aprobado.
  </Card>

  <Card title="La tarjeta no se lee" icon="triangle-exclamation" href="/manual/terminal/la-tarjeta-no-se-lee">
    Qué significa cada aviso del lector y cómo seguir.
  </Card>

  <Card title="Pago rechazado" icon="circle-xmark" href="/manual/terminal/pago-rechazado">
    Por qué se rechaza un pago y cómo intentarlo de nuevo.
  </Card>

  <Card title="Cancela un cobro a medias" icon="ban" href="/manual/terminal/cancelar-un-cobro">
    Sal de un cobro antes de pasar la tarjeta, sin cobrar nada.
  </Card>
</CardGroup>

## ¿Necesitas ayuda?

<SupportBox />


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.