El enlace al que mandar al usuario, en los proveedores con connect_link. Sólo esos:
pedirlo para el RSS devuelve el error 2201.
redirect_uri con un code en la query, y ese code es lo que se pasa a connect.
Es de un solo uso.url. La tienda se
comprueba YA y sin claves (https, un cortafuegos delante, que haya WooCommerce), para que lo
que va a fallar falle con el usuario todavía delante. Tras aprobar, la tienda nos manda la
clave directamente y el usuario vuelve con id_integration en la query. No te fíes de
success: lee esa integración con get. Un 2200 es que la clave no llegó (canceló);
error_code 2219, que se está comprobando (unos segundos: vuelve a leerla); otro código, lo
que falló; ninguno, conectada. El enlace dura 15 minutos y vale una vez. Con enlaces
permanentes "simples" la tienda no tiene botón (2216 plain_permalinks): conéctala con claves.Una integración.
Las integraciones de la organización, encadenando páginas.
Las integraciones de la organización, de la más reciente a la más antigua.
Sin limit no hay límite: vuelven todas. Es la única lista de esta API que se comporta
así — las demás cortan en 10.
Lo que el navegador necesita para abrir el selector del proveedor. Sólo Google Drive: en cualquier otro devuelve el error 2201.
Lleva un access_token VIVO y de vida corta. No lo guardes, no lo registres en un log y no lo
mandes a ningún sitio que no sea el Picker; se pide justo antes de abrirlo.
app_id es el NÚMERO del proyecto de Google Cloud, no su identificador de texto: con el scope
drive.file el permiso sobre el fichero elegido se concede al proyecto que lo eligió, así que
tiene que ser el mismo que el del cliente OAuth.
Una página del catálogo de una tienda conectada (un proveedor con catalog), para elegir los
productos de un plan from_catalog: sus external_id son lo que va en source.products. En
cualquier otro proveedor, error 2207; con la integración deshabilitada, 2209.
Se lee EN VIVO de la tienda en cada llamada, y por eso no hay un iterateProducts: cada página
es una petición al hosting del cliente, y recorrer diez mil productos para encontrar tres es
trabajo de search.
next_cursor se devuelve tal cual en cursor, y sin él era la
última página.available: false: se enseña marcado y no se deja elegir, o el plan da 2112.price es texto para copiar literal. Ausente es "sin precio", y también lo es en los
productos con impuesto de una tienda con config.tax_location_missing.error_code hasta reconectarla;
un cortafuegos (2212) o una tienda que no contesta (2213), no.const page = await pv.integrations.products(orgId, storeId, { search: "taza" });
const choosable = page.items.filter((product) => product.available);
El catálogo de proveedores: cómo se conecta cada uno, qué aporta y qué campos lleva su formulario.
Es la única fuente de verdad de esa información. No copies el formulario del RSS a tu
código: config_fields lo describe, y cambia con el servidor.
No lleva autenticación de organización: es una constante del despliegue.
Renueva las credenciales de una integración que ya existe —caducó el token, el usuario revocó el permiso— o revalida la configuración de un feed, sin cambiar de documento.
Mismo cuerpo que connect, porque quien lo interpreta es el mismo código del proveedor.
No vuelve a ocupar cupo y va por permiso de update, no de create.
Borra la integración y revoca en el proveedor cuando éste sabe hacerlo.
WooCommerce no sabe: una app no puede borrar su propia clave. Tras desconectar una tienda
hay que decirle al usuario que la borre él en WooCommerce → Ajustes → Avanzado → API REST; es
la que acaba en config.key_ending (léela ANTES de borrar la integración).
Lo que ya se importó se queda: los ficheros son de la biblioteca de la organización, no de la integración.
Cambia el nombre, la configuración o el interruptor.
enabled: false la deja conectada pero fuera de juego: no la barre el job y deja de contar
cupo. Es lo que hay que usar para pausar un feed en vez de borrarlo.
Conecta una integración nueva. Ocupa cupo del plan (error 1404 si no queda).
El cuerpo depende del proveedor:
{provider: "google_drive", code}para el OAuth, o el formulario deconfig_fieldsPLANO —no dentro de unconfig— para el resto. Elconfiges lo que el servidor construye y devuelve, no lo que se manda.Una tienda con claves creadas a mano (con permiso de lectura) va igual; las claves se prueban contra la tienda antes de guardar nada, y una organización puede conectar varias tiendas.