En el panel: Payments SDK for Android (Bundle ID / app package y Client ID; Client Secret solo si el portal lo muestra), webhooks y, si lo necesita, OAuth Reader Connect (opcional, enlaces de lector vía API). El cobro con TDV va en la app nativa con el SDK; Vende Fácil expone API de conector (sobre cifrado, intent, payment-result).
Para cobro con lector en Android use el Zettle Payments SDK en su APK. En Vende Fácil guarde el registro Payments SDK for Android del portal (como mínimo Bundle ID / app package y Client ID; el portal a menudo no muestra Client Secret — el login del SDK es OAuth con PKCE en el dispositivo). Si aplica, configure la signing key de webhooks Pusher. El conector VF (JWT VF-C04 y VF-C05) puede descargar un sobre cifrado con metadatos del SDK (y secret vacío si no hay), llama a prepare-sdk-payment y confirma con payment-result. Ese flujo no usa el TPV web como terminal de tarjeta. De forma opcional, si desea usar la API Reader Connect (reclamar códigos de lector, listar o desenlazar enlaces) desde el dashboard, configure otra aplicación OAuth en el portal Zettle, registre la redirect URI que muestra el panel, guarde Client ID/Secret en la misma sección Zettle y pulse Conectar cuenta Zettle; es independiente del cobro vía SDK.
En el Zettle Developer Portal existen flujos distintos (nombres según la interfaz en inglés). Reader Connect usa una app OAuth con Client ID y Client Secret en servidor. El registro Payments SDK for Android suele mostrar solo Client ID y app package; el SDK en el teléfono completa el login con PKCE.
…/api/zettle/oauth/callback), guarda Client ID/Secret en la tienda y completa el consentimiento con Conectar cuenta Zettle.Si en el futuro Zettle le asigna un Client Secret al registro SDK, no debe mostrarse en claro: puede guardarse en el panel y la app lo recibe en sobre cifrado (RSA en Keystore o modo alternativo con VF-C05). Si no hay secret, el sobre lleva el campo vacío y el SDK sigue el flujo PKCE habitual.
Portal Zettle + panel Vende Fácil + conector (APK).
| Qué | Dónde se crea | Qué obtiene | Uso en Vende Fácil |
|---|---|---|---|
| 1. Payments SDK for Android (portal Zettle) | Developer Portal → registro SDK Android | App package / Bundle ID, Client ID (y Client Secret solo si el portal lo muestra) | Se pegan en el panel de la tienda (sección Zettle). Lo que sea secreto se cifra; el APK obtiene el sobre vía POST /api/connector/zettle/sdk-envelope. |
| 2. Webhook Pusher (opcional) | Portal Zettle | URL pública + signing key | En el panel: URL del tipo …/api/webhooks/zettle/ID_DE_TIENDA y signing key. Se conservan igual que antes. |
| 3. Conector VF (Android) | Panel o login en la app conector | JWT conector + secreto HMAC (VF-C04 / VF-C05) | API Vende Fácil: sobre SDK, prepare-sdk-payment, payment-result, acuse opcional sdk-config-ack. |
| 4. OAuth Reader Connect (opcional) | Portal Zettle — aplicación OAuth distinta del registro SDK | Client ID, Client Secret; tras «Conectar cuenta», refresh en servidor | Panel → Zettle → bloque Reader Connect: redirect URI, credenciales, Conectar cuenta Zettle; modal Enlazar lector. No sustituye al SDK para cobrar en la TDV. |
El Bundle ID del portal debe coincidir con el applicationId de su APK. El cobro con lector sigue la documentación del SDK. El acceso del comercio a su cuenta Zettle/PayPal en el dispositivo ocurre dentro del flujo del SDK. El bloque OAuth Reader Connect del panel es solo para la API de enlaces de lector en servidor, no para sustituir al SDK en el cobro.
Según la guía oficial Create credentials for an SDK app:
https://, sin espacios al final, respetando mayúsculas y minúsculas):vfconnector://zettlepayawesomeapp://zettlelogin); no tiene por qué ser una URL https «pública» para el redirect nativo.client_id=…). Si Zettle le dio otro Client ID tras corregir la app, actualice el panel. (Ejemplo de client_id visto en el navegador: 7bf08524-a947-42e3-a415-d00c42e5f041 — debe coincidir con el suyo.)POST /api/connector/devices/auto-provision desde la app o token desde el panel). Guarde VF-C04 y VF-C05.POST /api/connector/zettle/sdk-envelope para recibir el payload del SDK cifrado (p. ej. clientSecret vacío si solo usa PKCE). Sin RSA, el servidor puede usar el modo PBKDF2 con VF-C05 (ver documentación técnica del proyecto).POST /api/connector/zettle/prepare-sdk-payment con orderId (pedido PENDING) y propina opcional → devuelve internalTraceId, importe en centavos, moneda y caducidad.POST /api/connector/payment-result con orderId, internalTraceId y cardPaymentUuid (firma HMAC del cuerpo si VF-C05 está configurado).POST /api/connector/zettle/sdk-config-ack para acuse de versión de configuración.Si no necesita reclamar lectores ni gestionar enlaces desde Vende Fácil, puede ignorar este bloque. Si sí: cree en el portal Zettle una aplicación OAuth adecuada para integración de servidor (no confundir con el registro Payments SDK for Android).
{su dominio VF}/api/zettle/oauth/callback). Debe coincidir carácter a carácter con la que usa el servidor al intercambiar el código.Referencia técnica: Reader Connect — enlazar lector y docs/ZETTLE_ANDROID_PHASE1_API.md (§4a).
Para notificaciones de eventos, configure en Zettle la URL de webhook que muestra el panel (forma típica …/api/webhooks/zettle/ID_DE_TIENDA) y pegue la Signing key en el campo correspondiente. Vacíe el campo solo si desea conservar el secreto ya guardado.
Vende Fácil · Documento orientativo. Marcas citadas pertenecen a sus titulares.
Ayuda para quien cobra en TPV