Sistema B2B profesional para Magento 2 Open Source

Kowal B2B Suite es un paquete de módulos Magento 2 diseñado para empresas que quieren vender en B2B sobre Magento Open Source sin renunciar al catálogo nativo, carrito, checkout, MSI, store view, website scope y mecanismos de integración de la plataforma.
SKU
M2-B2B
922,50 €
Escribir correo electrónico a un amigo

Consultar sobre este producto

Descripción / Sistema B2B profesional para Magento 2 Open Source

MAGENTO 2 · MAGENTO OPEN SOURCE · EMPRESAS · COMERCIO B2B

Conecta la venta B2B y B2C en una única instalación de Magento.

Kowal B2B Suite

Desarrolla un portal para clientes profesionales con empresas, roles, precios, catálogos, RFQ, límites, documentos e integraciones. Activa la lógica B2B para los website seleccionados y adapta el proceso a tus reglas comerciales.

16 módulos y tema · Website scope · REST y GraphQL

CÓMO FUNCIONA EN LA PRÁCTICA

01 · Defines el modelo comercial
Defines empresas, canales, precios y fuentes de datos.

02 · Configuras el proceso B2B
Asignas roles, catálogo, condiciones y aprobaciones.

03 · Conectas sistemas e implementas
Seleccionas adaptadores y compruebas escenarios completos.

¿Qué gana tu tienda?

Conoce las funciones, el uso y los ajustes del módulo.

Conoce el módulo

KOWAL B2B SUITE · MAGENTO 2 OPEN SOURCE

Sistema B2B profesional sin migrar a Adobe Commerce

Kowal B2B Suite amplía Magento 2 Open Source con funciones necesarias para la venta mayorista y contractual.

Gestiona empresas, usuarios, precios individuales, pedidos rápidos, límites de crédito comercial, aprobaciones, ofertas, documentos e integraciones en un único entorno Magento.

Empresas y roles · Precios y catálogos · RFQ · Crédito comercial · Documentos · Integraciones

Venta B2B adaptada a tus reglas comerciales

Cada cliente profesional puede recibir sus propios precios, catálogo, condiciones de pago, límites y usuarios con distintos permisos.

El sistema admite tanto un modelo mayorista sencillo como procesos de compra avanzados con aprobación en varias etapas e integración con ERP, PIM, WMS o CRM.

Áreas clave de la plataforma B2B

Traslada la gestión diaria de clientes profesionales desde correos, hojas de cálculo y acuerdos manuales directamente a Magento.

Empresas, usuarios y roles de compra

Una empresa puede tener muchos usuarios, direcciones y personas responsables de las compras. Los roles determinan quién puede realizar pedidos, aprobarlos o consultar datos.

Precios y catálogos individuales

Cada cliente profesional puede recibir su propio catálogo, precios contractuales, tramos por cantidad y reglas de compra. El cliente ve la oferta destinada a su empresa.

Pedidos rápidos y listas de compra

Los clientes pueden realizar grandes pedidos de forma eficiente por SKU, utilizar listas de compra e importar posiciones en lugar de buscar cada producto por separado.

RFQ, ofertas y aprobaciones

El proceso de oferta puede incluir precios negociados, fecha de validez y condiciones individuales. Los pedidos pueden pasar por una aprobación dependiente del valor o del rol del usuario.

Control financiero sin trabajar en hojas de cálculo

Los límites de crédito comercial, el uso del crédito y los plazos de pago ayudan a controlar la venta con pago aplazado.

El cliente tiene acceso a documentos, y el equipo ve las condiciones comerciales y el estado del proceso en un único lugar.

Documentos en el portal del cliente

  • facturas y abonos,
  • albaranes y confirmaciones,
  • ofertas PDF,
  • documentos desde Magento o desde el sistema ERP.

¿Cómo es la implementación?

La plataforma puede implementarse por etapas. Primero ordenamos las reglas comerciales, después las reflejamos en Magento y las integramos con los sistemas de la empresa.

1. Modelo de venta

Definimos clientes, canales, tarifas, pagos, restricciones y fuentes de datos.

2. Reglas para empresas

Configuramos usuarios, precios, catálogo, direcciones, límites y roles de compra.

3. Proceso de compra

Implementamos pedidos rápidos, ofertas, aprobaciones, documentos y reglas de checkout.

4. Integraciones y pruebas

Conectamos ERP, PIM, WMS o CRM, probamos escenarios y preparamos al equipo para trabajar.

Integraciones con los sistemas de la empresa

Los datos de clientes, precios, productos, pedidos y documentos pueden intercambiarse con ERP, PIM, WMS, CRM, EDI y sistemas de compra de los clientes profesionales.

La sincronización puede incluir límites de crédito comercial, condiciones de pago, estados de pedidos y documentos. El historial de tareas y errores facilita el control del proceso.

B2B que crece con el negocio

Kowal B2B Suite es una solución para mayoristas, distribuidores, fabricantes y empresas que realizan ventas contractuales.

Puedes empezar con empresas, precios y catálogo, y después ampliar la plataforma con pedidos rápidos, RFQ, límites, aprobaciones, documentos e integraciones.

Un Magento. Un catálogo. Un proceso de venta B2C y B2B.

Un paquete, arquitectura modular

kowal/metapackage-b2b-suite proporciona los archivos de 16 módulos B2B y del tema frontend/Kowal/b2b. El paquete principal los registra en autoload y sustituye los nombres de los subpaquetes, por lo que la instalación de la suite no requiere un repositorio independiente para cada módulo.

La implementación está diseñada para Magento Open Source 2.4.9 y PHP 8.3. El alcance de los módulos activados, la compatibilidad del tema y los escenarios del proceso deben verificarse en la instalación de destino.

Website y modelo de acceso de empresa

Las funciones B2B actúan en el contexto del website_id seleccionado. La empresa debe tener una relación activa con ese canal, y los roles determinan el acceso a compras, usuarios, ofertas y documentos.

El primer modelo de empresa presupone un único website asignado. La venta B2C puede utilizar la misma instalación, pero la activación B2B y el acceso de las empresas permanecen separados mediante la configuración de canales.

Quick Order, aprobaciones e implementación por etapas

El pedido rápido comprueba SKU, cantidad, asignación al website, visibilidad para la empresa y precio B2B. Las listas de compra y los logs de importación ayudan a gestionar pedidos recurrentes.

Las reglas de approval tienen en cuenta la empresa, el website, la moneda y el umbral. El request pending actual se cierra con la decisión approve, reject o cancel. El flujo en varias etapas debe acordarse y verificarse como alcance concreto de la implementación.

Documentos y acceso seguro

Los documentos están asignados a una empresa y a un website. Los archivos PDF se encuentran en var/kowal_b2b_documents y se descargan mediante un controlador que verifica el acceso.

La fuente puede ser Magento Sales o el modo híbrido Magento + API. El paquete incluye documentos de pedidos, facturas, envíos y abonos, así como un renderer PDF común; la sincronización de documentos desde un sistema externo requiere el adaptador adecuado.

Las integraciones requieren adaptadores y fuentes de datos

La capa Integration proporciona perfiles, mapeo de identificadores, tareas, retry, logs y dead letter queue. Un ERP, PIM, WMS o CRM concreto se conecta mediante un adaptador que implementa SyncAdapterInterface.

Antes de empezar, define la fuente de verdad para empresas, precios, stocks, pedidos y documentos. REST y GraphQL son puntos de integración; la instalación del paquete no conecta automáticamente todos los sistemas de la empresa.

Instalación mediante Composer

Paquete kowal/metapackage-b2b-suite, módulo Kowal_B2BBase. Tras configurar el acceso al repositorio Kowal, instala el paquete, activa el módulo, actualiza Magento y limpia la cache. En producción, incluye la compilación y el despliegue de contenido estático conforme al proceso de la tienda.

De la configuración al resultado

1. Defines el modelo comercial
Defines empresas, canales, precios y fuentes de datos.

2. Configuras el proceso B2B
Asignas roles, catálogo, condiciones y aprobaciones.

3. Conectas sistemas e implementas
Seleccionas adaptadores y compruebas escenarios completos.

Portal de pedidos para el cliente profesional

La empresa está asignada al website B2B activo. Su usuario utiliza el catálogo y el precio conforme a las condiciones acordadas, añade posiciones por SKU y realiza el pedido.

Según la configuración, el proceso tiene en cuenta el límite y la aprobación. Los documentos y las integraciones permanecen vinculados a la empresa y al canal de venta correspondiente.

Planifica una implementación B2B adaptada a la empresa

¿Quieres adaptar el módulo a tu tienda? Pregunta por la implementación de Kowal B2B Suite y comenta la configuración o las extensiones necesarias.

Más Información

Conformidad con la plantilla Luma / Blank, KOWAL

Configuración de la integración

Kowal B2B API — documentación REST completa

Versión del contrato: V1 · Fuente de verdad: Kowal_B2BApi/etc/webapi.xml · Destinatarios: administradores de tiendas, partners de implementación y equipos que integran ERP, PIM, WMS o sistemas de compra.

1. Finalidad y límites de la API

Kowal B2B API expone datos y procesos B2B que funcionan en Magento 2: empresas, catálogo y precios individuales, compras rápidas, documentos, límite de crédito comercial, aprobaciones, RFQ y colas de integración. Es una REST API para integraciones de sistemas; no sustituye los endpoints estándar de Magento para catálogo, carrito, checkout y cuenta de cliente.

El documento describe únicamente los endpoints expuestos actualmente por el módulo. No promete operaciones que el contrato V1 no ofrece, por ejemplo creación de pedidos por REST, CRUD de tarifas o edición de configuración de website.

2. Obtención de acceso y normas de colaboración

2.1. Proceso de puesta en marcha de la integración

  1. El integrador comunica al administrador de la tienda el objetivo de la integración, entorno (pruebas/producción), sistema fuente, alcance de datos y lista de áreas API requeridas.
  2. El administrador crea o configura la integración Magento, le asigna permisos ACL mínimos y transmite por un canal seguro: baseUrl, token, websiteId, companyId cuando proceda, moneda y datos de prueba.
  3. El integrador ejecuta la prueba GET /V1/kowal-b2b/websites/:websiteId/config y después pruebas funcionales en el entorno de pruebas.
  4. Antes de producción, ambas partes acuerdan el calendario de sincronización, tamaño máximo de datos, retry, propietario de los datos y método de notificación de errores.
  5. Los tokens se guardan únicamente en un vault de secretos; el administrador los rota o revoca ante un cambio de proveedor, usuario o alcance de integración.

2.2. Responsabilidades

ParteResponsabilidad
Administrador de la tiendaConfiguración del website B2B, empresa y relación de la empresa con el website, token y ACL; entrega de datos de prueba; decisión sobre acceso a datos.
IntegradorAlmacenamiento seguro del token, uso correcto del contexto websiteId/companyId, validación de datos, gestión de errores y reintentos, no divulgación de datos de otras empresas.
Propietario del proceso de negocioAcuerdo sobre la fuente de verdad para precios, documentos, RFQ, límites y estados de sincronización.

No se debe usar el token de administrador en una aplicación cliente ni compartir un único token entre sistemas independientes. Cada integración debe tener su propio token y solo las ACL necesarias.

2.3. Permisos

Magento verifica el token Bearer y las ACL asignadas al usuario administrativo o a la integración. Los endpoints B2B requieren uno de los siguientes grupos de permisos:

ACLAlcance
configWebsites y feature flags
companies, company_save, company_users, batchEmpresas, sus usuarios e importación por lotes de empresas
products, prices, catalog_permissionsCatálogo, disponibilidad, precios y visibilidad
import_export, quick_order, documentsPerfiles de importación/exportación, listas de compra y documentos
credit_limits, approvals, orders, quotesLímite, workflow de aprobación, contexto de pedidos y RFQ
system_integrationsPerfiles, mapeos y jobs de integración

El alcance debe derivarse de la finalidad de la integración. Ejemplo: un sistema de compra suele necesitar products, prices, catalog_permissions, quick_order y quotes; un ERP que gestiona documentos — documents y, si es propietario de la sincronización, system_integrations.

3. Convenciones técnicas

Dirección, cabeceras y parámetros

La dirección base tiene el formato https://b2b.example.com/rest/V1. Todas las rutas posteriores en el documento se indican desde /V1; la dirección completa del endpoint es BASE_URL + ruta.

Authorization: Bearer Accept: application/jsonContent-Type: application/json

La API usa JSON. Los nombres en URL son camelCase (websiteId, companyId) y los campos JSON corresponden a los nombres de parámetros de los contratos Magento. :companyId, :quoteId, :sku, etc. son parámetros de ruta. En los ejemplos, ? indica un parámetro opcional.

websiteId es obligatorio en operaciones dependientes del canal de venta. Debe indicar un website existente con B2B activado. companyId indica una empresa que debe tener una relación activa con ese website cuando la operación funciona en su contexto. La API no selecciona website ni empresa predeterminados.

Request body e idempotencia

Magento serializa el objeto DTO bajo el nombre del parámetro del método: la mayoría de escrituras acepta {'request': {...}}; la creación de empresa usa {'company': {...}}; el batch de empresas — {'companies': [...]}. Los endpoints con argumentos simples aceptan campos sin wrapper, por ejemplo {'websiteId': 1, 'currency': 'PLN', 'items': [...]}.

La cabecera Idempotency-Key (máx. 128 caracteres) actualmente está soportada por POST /companies: un reintento con la misma clave devolverá la empresa creada previamente. Para un job de integración usa el campo request.idempotencyKey. No asumas idempotencia automática de otros endpoints de escritura; reinténtalos solo después de determinar el estado de la operación.

Respuestas y errores

Las respuestas de éxito son objetos o arrays de contratos Magento. Los campos devueltos por los objetos pueden ampliarse de forma compatible; la integración debe ignorar campos desconocidos. Un error de negocio puede contener:

{ 'code': 'b2b.company.not_assigned_to_website', 'message': 'B2B company is not assigned to website.', 'website_id': 1, 'trace_id': 'request-correlation-id', 'details': {'company_id': 10}, 'field_errors': []}
HTTPSignificadoReacción del integrador
400 / 422Datos incorrectos o validación de dominioCorrige los datos; no reintentes sin cambiar el payload.
401 / 403Token/ACL ausente o insuficienteNo reintentes; comunica al administrador el alcance del token.
404El recurso o la relación no existe en el contexto dadoVerifica identificadores y contexto del website.
409Conflicto de estado o duplicadoLee el estado actual antes de decidir un reintento.
5xx / timeoutError técnicoAplica retry limitado con backoff y conserva trace_id.

No registres tokens, datos personales completos ni secretos de configuración. La incidencia al equipo de la tienda debe incluir hora, método, ruta sin secretos, estado HTTP, trace_id y payload anonimizado.

4. Esquemas de datos de entrada

Los siguientes esquemas son comunes para los endpoints de referencia. Un campo sin ? es obligatorio por contrato; ? indica un valor opcional. Los campos metadata, config, configuration y payload son objetos JSON.

DTO / wrapperCampos
companywebsiteId, name, taxId, externalId?, status?, salesRepresentativeId?, customerGroupId?, websiteActive?
companyUserwebsiteId, roleId, active
request — RFQwebsiteId, companyId, customerId?, externalId?, title, currency, validUntil?, customerNote?, salesNote?, metadata?
request — posición RFQquoteId, sku, productId?, name?, qty, requestedPrice?, offeredPrice?, comment?, metadata?
request — decisión RFQcustomerId?, adminUserId?, message?
request — comentario RFQquoteId, customerId?, adminUserId?, authorType, message, visibleForCustomer
request — documentowebsiteId, companyId, orderId?, orderIncrementId?, invoiceId?, invoiceIncrementId?, creditmemoId?, creditmemoIncrementId?, externalId?, documentNumber, documentType, status, issueDate?, dueDate?, grandTotal?, currency?, metadata?
request — archivo de documentodocumentId, fileName, filePath, mimeType, fileSize, checksum?, primary
request — límitewebsiteId, companyId, termsId?, creditLimit, currency, active, status, metadata?
request — exposición del límitewebsiteId, companyId, sourceType, sourceId, sourceIncrementId?, amount, currency, dueDate?, metadata?
request — condiciones de pagowebsiteId, code, name, daysDue, active, description?
request — regla de aprobaciónwebsiteId, companyId, name, thresholdAmount, currency?, priority, active, metadata?
request — aprobadorruleId, customerId, sortOrder, active
request — decisión de aprobaciónapproverCustomerId?, comment?
request — solicitud de aprobaciónwebsiteId, companyId, orderId?, orderIncrementId?, requesterCustomerId?, grandTotal, currency, comment?, metadata?
request — perfil import/exportwebsiteId, code, name, direction, entityType, format, behavior, active, configuration?
request — perfil de integraciónwebsiteId, code, name, systemType, adapterCode, direction, active, maxAttempts, config?
request — mapeowebsiteId, systemType, entityType, localId, externalId, metadata?
request — job de integraciónprofileId, direction?, entityType, operation, idempotencyKey?, maxAttempts?, payload?, scheduledAt?

5. Referencia de endpoints

En las tablas, ACL indica el recurso mínimo de permiso Magento. Resultado define el tipo de respuesta de éxito.

5.1. Websites y configuración

Método y endpointACLEntradaResultado y uso
GET /V1/kowal-b2b/websitesconfig—Array de website (websiteId, código, nombre, flag B2B). Obténlo antes de configurar la integración.
GET /V1/kowal-b2b/websites/:websiteId/configconfigpath: websiteIdConfiguración B2B del website (entre otros enabled/debug/retención de logs). Ejecútalo como prueba de acceso.
GET /V1/kowal-b2b/websites/:websiteId/featuresconfigpath: websiteIdFeature flags activas para el website; úsalo para activar funciones del cliente de forma condicional.

5.2. Empresas y usuarios de empresa

Método y endpointACLEntradaResultado y uso
GET /companies?websiteId=companiesquery: websiteIdArray de empresas asignadas al website.
POST /companiescompany_savebody: companyCrea una empresa y relación con el website; usa Idempotency-Key en reintentos. Devuelve la empresa.
POST /companies/batchbatchbody: companies — array de companyCrea varias empresas y devuelve el resultado por elemento, incluidos errores.
GET /companies/:companyId?websiteId=companiespath: companyId; query: websiteIdEmpresa verificada en el contexto del website.
PUT /companies/:companyIdcompany_savepath: companyId; body: companyActualiza los datos y la relación de la empresa para company.websiteId.
POST /companies/:companyId/activate?websiteId=company_savepath: companyId; query: websiteIdActiva la empresa en el website indicado y devuelve la empresa.
POST /companies/:companyId/block?websiteId=company_savepath: companyId; query: websiteIdBloquea la empresa en el website indicado y devuelve la empresa.
GET /companies/:companyId/users?websiteId=company_userspath: companyId; query: websiteIdArray de asignaciones de clientes a la empresa.
PUT /companies/:companyId/users/:customerIdcompany_userspath: companyId, customerId; body: companyUserAsigna/actualiza el rol y la actividad del cliente en la empresa; devuelve la asignación.

5.3. Productos, precio y visibilidad del catálogo

Método y endpointACLEntradaResultado y uso
GET /products?websiteId=productsquery: websiteIdArray de productos Magento básicos para el website.
GET /products/:sku?websiteId=productspath: sku codificado; query: websiteIdProducto (id, sku, nombre, tipo, estado, websites).
GET /products/:sku/availability?websiteId=productspath: sku; query: websiteIdDisponibilidad y cantidad vendible MSI para el SKU.
GET /products/:sku/b2b-status?websiteId=productspath: sku; query: websiteIdEstado B2B: asignación al website, traducciones y datos stock.
GET /reports/products/missing-translations?websiteId=productsquery: websiteIdInforme de SKU sin traducciones requeridas, con reason/details.
GET /reports/products/missing-stock?websiteId=productsquery: websiteIdInforme de SKU sin datos stock requeridos.
GET /companies/:companyId/products/:sku/price?websiteId=&currency=&qty=pricespath: companyId, sku; query: websiteId, currency, opc. qty (por defecto 1)Explicación del precio correspondiente para empresa, moneda y cantidad; consúltalo antes de comprar.
GET /companies/:companyId/products/:sku/visibility?websiteId=catalog_permissionspath: companyId, sku; query: websiteIdResultado de visibilidad/compra del SKU para la empresa.
GET /companies/:companyId/catalog-visibility?websiteId=catalog_permissionspath: companyId; query: websiteIdArray de posiciones del índice de catálogo visible de la empresa.
POST /companies/:companyId/catalog-visibility/reindex?websiteId=catalog_permissionspath: companyId; query: websiteIdReconstruye el índice y devuelve el número de posiciones indexadas. Operación administrativa.

5.4. Importación y exportación de archivos

Método y endpointACLEntradaResultado y uso
GET /import-export/profiles?websiteId=import_exportquery: websiteIdArray de perfiles de importación/exportación del website.
POST /import-export/profilesimport_exportbody: request — perfil import/exportGuarda el perfil y devuelve sus datos.
POST /import-export/import/:profileId?sourceFile=&dryRun=import_exportpath: profileId; query: sourceFile, opc. dryRun=falseInicia la importación del archivo indicado en el entorno Magento; devuelve job. No envía multipart.
POST /import-export/export/:profileId?resultFile=import_exportpath: profileId; opc. query: resultFileCrea job de exportación, opcionalmente con ruta de archivo de destino.
GET /import-export/jobs?websiteId=import_exportquery: websiteIdArray de jobs import/export para el website.
GET /import-export/jobs/:jobIdimport_exportpath: jobIdEstado, resultado y datos de un job individual.
GET /import-export/jobs/:jobId/logsimport_exportpath: jobIdLogs de diagnóstico del job.

5.5. Pedido rápido y listas de compra

Método y endpointACLEntradaResultado y uso
POST /companies/:companyId/quick-order/validatequick_orderpath: companyId; body: websiteId, currency, items (sku, qty)Valida múltiples SKU en el contexto de la empresa: disponibilidad, visibilidad y precio; devuelve resultado agregado.
GET /companies/:companyId/shopping-lists?websiteId=quick_orderpath: companyId; query: websiteIdArray de listas de compra de la empresa.
POST /companies/:companyId/shopping-listsquick_orderpath: companyId; body: websiteId, name, opc. customerId, isDefault=falseCrea una lista de compra y la devuelve.
GET /shopping-lists/:listId/itemsquick_orderpath: listIdArray de posiciones de la lista indicada.
POST /shopping-lists/:listId/itemsquick_orderpath: listId; body: currency, items (sku, qty)Añade posiciones a la lista y devuelve las posiciones guardadas.

5.6. Documentos y archivos

Método y endpointACLEntradaResultado y uso
GET /companies/:companyId/documents?websiteId=&documentType=documentspath: companyId; query: websiteId, opc. documentTypeDocumentos de la empresa, opcionalmente filtrados por tipo.
GET /documents/:documentId?companyId=&websiteId=documentspath: documentId; query: companyId, websiteIdDetalles del documento tras comprobar la pertenencia a la empresa.
POST /documentsdocumentsbody: request — documentoCrea o guarda metadatos del documento y devuelve el documento.
POST /documents/filesdocumentsbody: request — archivo de documentoRegistra un archivo existente en el storage de Magento (nombre, ruta, MIME, tamaño), no envía binarios.
GET /documents/:documentId/files?companyId=&websiteId=documentspath: documentId; query: companyId, websiteIdArray de metadatos de archivos del documento.
GET /documents/:documentId/sync-logsdocumentspath: documentIdLogs de sincronización del documento; destinados a integración administrativa.

5.7. Límite de crédito comercial y condiciones de pago

Método y endpointACLEntradaResultado y uso
GET /companies/:companyId/credit/status?websiteId=&currency=credit_limitspath: companyId; query: websiteId, currencyEstado del límite, uso e importe disponible de la empresa.
POST /credit-limitscredit_limitsbody: request — límiteCrea/actualiza el límite de la empresa y devuelve el límite.
POST /credit/exposurescredit_limitsbody: request — exposiciónReserva exposición del límite para una fuente, por ejemplo un pedido, y la devuelve.
POST /credit/exposures/:exposureId/releasecredit_limitspath: exposureId; opc. body: messageLibera la exposición; devuelve su estado.
GET /payment-terms?websiteId=credit_limitsquery: websiteIdArray de condiciones de pago activas/conocidas del website.
POST /payment-termscredit_limitsbody: request — condiciones de pagoGuarda las condiciones de pago y las devuelve.

5.8. Workflow de aprobación

Método y endpointACLEntradaResultado y uso
GET /companies/:companyId/approval/rules?websiteId=&currency=approvalspath: companyId; query: websiteId, opc. currencyReglas de aprobación de la empresa para canal/moneda.
POST /approval/rulesapprovalsbody: request — reglaCrea/actualiza una regla de umbral y la devuelve.
GET /approval/rules/:ruleId/approversapprovalspath: ruleIdArray de aprobadores asignados, en orden sortOrder.
POST /approval/approversapprovalsbody: request — aprobadorGuarda la asignación del cliente como aprobador.
GET /companies/:companyId/approval/required?websiteId=&grandTotal=&currency=approvalspath: companyId; query: websiteId, grandTotal, currencyBoolean: si el importe requiere aprobación.
POST /approval/requestsapprovalsbody: request — solicitud de aprobaciónCrea request para un pedido y lo devuelve.
GET /companies/:companyId/approval/requests?websiteId=&status=approvalspath: companyId; query: websiteId, opc. statusArray de requests de aprobación de la empresa.
POST /approval/requests/:requestId/approveapprovalspath: requestId; body: request — decisiónAprueba el request; devuelve su estado actual.
POST /approval/requests/:requestId/rejectapprovalspath: requestId; body: request — decisiónRechaza el request; devuelve su estado actual.
POST /approval/requests/:requestId/cancelapprovalspath: requestId; body: request — decisiónCancela el request; devuelve su estado actual.
GET /approval/requests/:requestId/decisionsapprovalspath: requestIdHistorial de decisiones del request.

5.9. Contexto B2B de pedidos

Método y endpointACLEntradaResultado y uso
GET /orders/:orderId/b2b-contextorderspath: orderIdContexto B2B de un pedido nativo Magento individual, por ejemplo empresa, estado de aprobación, límite, exportación.
GET /companies/:companyId/orders/b2b-context?websiteId=&approvalStatus=orderspath: companyId; query: websiteId, opc. approvalStatusArray de contextos de pedidos de la empresa, opcionalmente filtrado por estado de aprobación.

5.10. RFQ y ofertas comerciales

Método y endpointACLEntradaResultado y uso
GET /companies/:companyId/quotes?websiteId=&status=quotespath: companyId; query: websiteId, opc. statusRFQ y ofertas de la empresa, opcionalmente por estado.
POST /quotesquotesbody: request — RFQCrea un RFQ en borrador y lo devuelve. Añade posiciones con otro endpoint.
GET /quotes/:quoteIdquotespath: quoteIdDetalles del RFQ/oferta.
GET /quotes/:quoteId/itemsquotespath: quoteIdArray de posiciones RFQ.
POST /quotes/itemsquotesbody: request — posición RFQAñade SKU y cantidad, precio solicitado/de oferta opcional y comentario.
GET /quotes/:quoteId/commentsquotespath: quoteIdComentarios RFQ. El cliente ve solo los comentarios marcados como visibles.
POST /quotes/commentsquotesbody: request — comentario RFQAñade mensaje; authorType y visibleForCustomer definen autor y visibilidad.
GET /quotes/:quoteId/historyquotespath: quoteIdHistorial de cambios de estado y eventos RFQ.
POST /quotes/:quoteId/submitquotespath: quoteId; body: request — decisión RFQEnvía el RFQ en borrador a valoración.
POST /quotes/:quoteId/make-offerquotespath: quoteId; body: request — decisión RFQEl comercial crea/envía una oferta; antes de llamar, define los precios de las posiciones.
POST /quotes/:quoteId/acceptquotespath: quoteId; body: request — decisión RFQAcepta la oferta actual. Este contrato no crea pedido REST.
POST /quotes/:quoteId/rejectquotespath: quoteId; body: request — decisión RFQRechaza la oferta/RFQ.
POST /quotes/:quoteId/cancelquotespath: quoteId; body: request — decisión RFQCancela el RFQ si el estado actual lo permite.

5.11. Perfiles y jobs de integración

Método y endpointACLEntradaResultado y uso
GET /integrations/profiles?websiteId=&systemType=system_integrationsquery: websiteId, opc. systemTypePerfiles de integración para el website.
POST /integrations/profilessystem_integrationsbody: request — perfil de integraciónGuarda el perfil ERP/PIM/WMS, etc. y lo devuelve.
POST /integrations/mappingssystem_integrationsbody: request — mapeoGuarda el par ID local ↔ ID externo.
GET /integrations/mappings/local?websiteId=&systemType=&entityType=&localId=system_integrationsquery: todos los parámetros requeridosBusca el mapeo por identificador Magento.
GET /integrations/mappings/external?websiteId=&systemType=&entityType=&externalId=system_integrationsquery: todos los parámetros requeridosBusca el mapeo por identificador del sistema externo.
POST /integrations/jobssystem_integrationsbody: request — jobPublica un job para su ejecución; idempotencyKey identifica la operación de negocio.
GET /integrations/jobs?websiteId=&status=system_integrationsquery: websiteId, opc. statusArray de jobs de integración.
GET /integrations/jobs/:jobIdsystem_integrationspath: jobIdEstado y detalles de un job individual.
POST /integrations/jobs/:jobId/processsystem_integrationspath: jobIdProcesa el job y devuelve su estado actual.
POST /integrations/jobs/:jobId/retrysystem_integrationspath: jobIdReintenta el job tras un error, conforme a su límite de intentos.
GET /integrations/jobs/:jobId/logssystem_integrationspath: jobIdLogs de ejecución del job.
GET /integrations/jobs/:jobId/errorssystem_integrationspath: jobIdErrores de dominio/técnicos del job.

6. Ejemplos de llamadas

export BASE_URL='https://b2b.example.com/rest/V1'export TOKEN='token-przekazany-przez-administratora'export WEBSITE_ID=1 COMPANY_ID=10 SKU='B2B-SKU-001' CURRENCY='PLN'# Test dostępu i konfiguracji kanałucurl -sS '$BASE_URL/kowal-b2b/websites/$WEBSITE_ID/config' \ -H 'Authorization: Bearer $TOKEN' -H 'Accept: application/json'# Cena kontraktowa firmy dla konkretnej ilościcurl -sS '$BASE_URL/kowal-b2b/companies/$COMPANY_ID/products/$SKU/price?websiteId=$WEBSITE_ID&currency=$CURRENCY&qty=5' \ -H 'Authorization: Bearer $TOKEN' -H 'Accept: application/json'# Walidacja koszyka po SKUcurl -sS -X POST '$BASE_URL/kowal-b2b/companies/$COMPANY_ID/quick-order/validate' \ -H 'Authorization: Bearer $TOKEN' -H 'Content-Type: application/json' \ --data '{'websiteId':1,'currency':'PLN','items':[{'sku':'B2B-SKU-001','qty':5}]}'# Utworzenie RFQcurl -sS -X POST '$BASE_URL/kowal-b2b/quotes' \ -H 'Authorization: Bearer $TOKEN' -H 'Content-Type: application/json' \ --data '{'request':{'websiteId':1,'companyId':10,'customerId':25,'title':'Dostawa kwartalna','currency':'PLN','externalId':'ERP-RFQ-2026-001'}}'

7. Escenarios de integración recomendados

Compra por SKU

  1. Lee la configuración del website y guarda el websiteId, companyId y la moneda proporcionados.
  2. Usa quick order para la validación conjunta de SKU, cantidad, visibilidad y disponibilidad.
  3. Para las posiciones aceptadas, obtiene el precio desde price con el qty correcto.
  4. Crea un RFQ, añade posiciones y envíalas mediante submit si la compra requiere oferta.
  5. Sigue el estado y el historial de RFQ; tras la aceptación, actúa según el proceso de pedido Magento acordado, porque V1 no expone endpoint de creación de order.

Documentos y liquidaciones

  1. Obtén la lista de documentos de la empresa, filtrando opcionalmente por documentType.
  2. Para el documento seleccionado, obtén los metadatos y la lista de archivos; la ruta del archivo no es automáticamente una URL pública — acuerda con el administrador de la tienda la forma de descargar el binario.
  3. Consulta el estado del límite antes del proceso de compra; solo una integración con ACL credit_limits puede gestionarlo.

Operaciones asíncronas

  1. Guarda el perfil de integración y los mapeos de identificadores.
  2. Publica un job con idempotencyKey de negocio y conserva jobId.
  3. Consulta el job y sus logs/errores; llama a retry solo tras analizar el error y eliminar su causa.

8. Lista de aceptación antes de producción

  • El token tiene únicamente las ACL requeridas y no es el token de administrador utilizado por la UI.
  • El integrador gestiona correctamente 401, 403, 404, validación 422, conflicto 409 y timeouts.
  • Cada request en contexto B2B transmite el websiteId correcto, y los datos de empresa usan el companyId correcto.
  • Precios, visibilidad y disponibilidad se comprueban antes de crear el proceso de compra.
  • La creación de empresa usa Idempotency-Key; los jobs de integración tienen un idempotencyKey estable en el body.
  • Los logs no contienen tokens ni datos sensibles, y el procedimiento de soporte transmite trace_id.
  • Las pruebas se han realizado en el entorno de pruebas con una empresa que tiene relación activa con el website B2B.

9. Compatibilidad

El contrato se versiona mediante /V1. Ampliar la respuesta con nuevos campos es compatible; el integrador debe tolerar campos desconocidos. Un cambio que elimine un campo, significado de campo o endpoint requiere una nueva versión de API. En caso de discrepancia entre el documento y la instalación operativa, prevalece el contrato activo webapi.xml de la versión correspondiente del módulo.

Instrucciones de instalación del módulo

Instalación y configuración de Kowal B2B Suite

Este manual está destinado a la persona que ha comprado Kowal B2B Suite y debe ponerlo en marcha en una instalación existente de Magento Open Source. Guía a través de dos etapas:

  1. instalación técnica — realizada por un desarrollador o administrador del servidor;
  2. configuración de negocio — realizada en el panel de Magento por el administrador de la tienda.

Antes de empezar, realiza una copia de la base de datos y de los archivos de Magento. Recomendamos hacer la primera puesta en marcha en un entorno de pruebas y solo después desplegar en producción.

1. Qué recibes y qué necesitas

Kowal B2B Suite se entrega como paquete Composer kowal/metapackage-b2b-suite. Contiene módulos B2B y el theme frontend/Kowal/b2b.

Requisitos

ElementoRequisito
MagentoMagento Open Source 2.4.9
PHP8.3
ComposerComposer 2
Acceso al servidorSSH y posibilidad de ejecutar bin/magento
Magentocatálogo, clientes, checkout, Sales, MSI y cron operativos
PDFposibilidad de escritura en var/ por el proceso PHP

De Kowal recibirás:

  • dirección del repositorio privado Composer — en adelante REPOSITORY_URL;
  • nombre de usuario o identificador de acceso — USERNAME;
  • token de acceso — ACCESS_TOKEN;
  • rango permitido de versiones del paquete.

No guardes el token en el repositorio Git, en tickets ni en el historial de shell compartido con otras personas.

2. Instalación técnica

Ejecuta todos los comandos en el directorio raíz de la instalación existente de Magento, como usuario con acceso a los archivos y al comando bin/magento.

2.1. Preparación

  1. Asegúrate de que Magento funciona correctamente antes del cambio.
  2. Guarda el estado del despliegue y realiza backup de la base de datos y de los directorios app/etc, pub/media y var.
  3. En producción, activa el modo maintenance durante la actualización:
bin/magento maintenance:enable

2.2. Añadir el repositorio privado

Añade el repositorio Composer de Kowal y configura los datos de acceso recibidos.

Recibirás por correo electrónico los datos de acceso al repositorio Composer, es decir, la dirección de e-mail del cliente y el token de licencia, después de la compra. También están disponibles en el panel del cliente tras iniciar sesión en kowal.store. Sustituye TWOJ_EMAIL_KLIENTA por la dirección de e-mail de tu cuenta y TWOJ_TOKEN por el token recibido. Ejecuta los comandos en el directorio raíz de Magento.

composer config repositories.kowal composer https://repo.kowal.storecomposer config http-basic.repo.kowal.store 'TWOJ_EMAIL_KLIENTA' 'TWOJ_TOKEN'

Composer suele guardar las credenciales en el auth.json local; no añadas este archivo a Git.

2.3. Instalación del paquete

Instala la versión entregada con la licencia. Para la línea actual del paquete, el comando de ejemplo es:

composer require kowal/metapackage-b2b-suite:^0.2 --with-all-dependencies

Después de descargar las dependencias, actualiza el esquema y la configuración de Magento:

bin/magento setup:upgradebin/magento cache:clean

En modo de producción, ejecuta además:

bin/magento setup:di:compilebin/magento setup:static-content:deploy -f pl_PL en_USbin/magento cache:flush

Usa solo los locale que están activos en la tienda. Si la instalación utiliza otro proceso de deployment, incorpora los comandos anteriores a su procedimiento estándar.

2.4. Verificación de la instalación

bin/magento module:status | grep Kowalbin/magento indexer:status

En el panel de administración debería aparecer el menú B2B y la pestaña Stores > Configuration > Kowal > B2B. Si no aparecen, comprueba el resultado de setup:upgrade, la cache y los roles ACL del usuario administrador.

2.5. Permisos de archivos PDF

Los PDF generados por B2B utilizan mPDF y directorios bajo var/, incluidos var/tmp/kowal_b2b_mpdf y var/kowal_b2b_documents. El proceso PHP debe poder crearlos y escribir en ellos. La falta de estos permisos se manifiesta como un error al generar el documento o el PDF.

Tras finalizar el despliegue en producción, desactiva maintenance:

bin/magento maintenance:disable

3. Configuración de la estructura de la tienda B2B

3.1. Website y store view

La suite funciona en el ámbito de website, no de forma global. Puedes gestionar B2C y B2B en la misma instalación de Magento, pero B2B debería funcionar en un website independiente o en un website de venta empresarial elegido de forma consciente.

  1. En Stores > Settings > All Stores, crea o selecciona el website B2B, su store y su store view.
  2. Recuerda el website_id: lo utilizan empresas, precios, documentos, API e integraciones.
  3. En Content > Design > Configuration, asigna el theme frontend/Kowal/b2b solo al B2B store view.
  4. Comprueba que las monedas activas, impuestos, métodos de envío y métodos de pago estén configurados para el mismo scope.

No asignes el theme B2B al store view B2C si no quieres cambiar su capa de presentación. La mera instalación de los módulos no activa la lógica B2B para todos los website.

3.2. Activación de B2B

  1. Abre Stores > Configuration > Kowal > B2B.
  2. En el conmutador de scope, elige el Website correcto.
  3. En la sección General, establece Enable B2B en Yes.
  4. Durante la implementación puedes activar Debug Mode; desactívalo después de las pruebas.
  5. En el scope Default Config, define el periodo de retención de logs.
  6. Guarda la configuración y limpia la cache.

Tras la activación, todos los store view pertenecientes a ese website se tratan como B2B. Una empresa sin relación activa con ese website no obtendrá acceso a él.

3.3. Datos del vendedor

Completa los datos de la empresa vendedora en Stores > Configuration > General > Store Information: nombre, dirección, teléfono y NIF. Se utilizan en documentos y PDF RFQ. Completa también la dirección de e-mail general del remitente en la configuración de Sales Emails y el logo de e-mail si debe aparecer en los PDF.

4. Configuración del primer cliente B2B

Aplica el siguiente orden para cada empresa. Ayuda a evitar situaciones en las que el cliente tiene cuenta, pero no ve la oferta o no puede pasar por checkout.

4.1. Empresa, personas y direcciones

  1. Abre B2B > Companies y crea una empresa.
  2. Introduce el nombre, NIF, identificador externo si la empresa se sincroniza con ERP, estado Active y asignación al website B2B.
  3. Añade un usuario de empresa o asigna un cliente Magento existente. Asígnale el rol correcto y activa la asignación.
  4. En B2B > Company Addresses, añade las direcciones de la empresa; marca la dirección de facturación y envío predeterminada para el website B2B.
  5. En B2B > Company Contacts, añade un contacto principal activo con e-mail y teléfono.

La dirección de facturación y el contacto principal también se utilizan en el PDF RFQ. La falta de datos no bloquea el PDF, pero el documento será menos completo.

4.2. Roles de empresa

Concede a los usuarios solo los permisos necesarios. Una división típica es:

RolTareas de ejemplo
Administrador de empresausuarios, roles, direcciones, documentos e historial de la empresa
Compradorcatálogo, pedido rápido, carrito, RFQ y pedidos
Aprobadordecisiones en el workflow de aprobación
Contabilidaddocumentos e información de facturación

Prueba la cuenta de cada tipo, especialmente el permiso para realizar pedidos y aprobaciones. No utilices una cuenta común para toda la empresa.

5. Oferta, precios y checkout

5.1. Catálogo y precios

  1. Asegúrate de que los productos Magento estén asignados al website B2B, activos y tengan datos MSI correctos.
  2. Configura tarifas o precios contractuales para la empresa en el área B2B > Pricing (Price Lists, Price List Assignments o Contract Prices).
  3. Configura las reglas de visibilidad del catálogo para la empresa según el modelo de permisos implementado y después comprueba la visibilidad en la cuenta del cliente.
  4. Prueba en la cuenta de empresa: búsqueda de SKU, visibilidad del producto y precio para la cantidad 1 y para el tramo por cantidad.

El precio B2B depende de la empresa, el website, la moneda y la cantidad. Un producto visible en B2C no tiene por qué estar disponible para el cliente B2B.

5.2. Envío y pago

  1. Activa los métodos de envío y pago requeridos en la configuración estándar de Magento para el B2B store view.
  2. En B2B > Checkout, añade reglas de métodos disponibles para empresa/website si quieres limitar la selección.
  3. Realiza una prueba de carrito con las direcciones predeterminadas de la empresa.

Si la creación de pedidos desde RFQ debe funcionar automáticamente desde el lado del administrador, la empresa debe tener direcciones predeterminadas inequívocas y un método de pago y envío activo. De lo contrario, la suite cargará los datos en el Backend Order Create nativo, donde el administrador completa los elementos faltantes.

5.3. Límites y aprobaciones

Estas funciones son opcionales, pero deberían configurarse antes de activarlas para los clientes.

  1. En B2B > Credit > Payment Terms, añade plazos de pago.
  2. En B2B > Credit > Credit Limits, asigna a la empresa un límite, moneda, estado y plazo de pago.
  3. En B2B > Approvals > Rules, crea una regla de umbral de importe para la empresa y el website.
  4. En B2B > Approvals > Approvers, asigna las personas aprobadoras.
  5. Prueba el carrito por debajo y por encima del umbral y comprueba si la decisión del aprobador cambia el proceso posterior.

6. Documentos, PDF y RFQ

6.1. Documentos Magento

En Stores > Configuration > Kowal > B2B > Documents, elige la fuente de documentos y decide qué documentos deben generarse automáticamente: confirmaciones de pedidos, facturas, albaranes y abonos. Define también el estado de destino del documento.

En B2B > Documents > PDF Templates:

  1. comprueba la plantilla activa para cada tipo y website;
  2. realiza una vista previa;
  3. ajusta HTML/CSS solo si cuentas con una persona que conozca plantillas Magento y CSS mPDF;
  4. genera una factura o confirmación de prueba y comprueba la descarga desde la cuenta de empresa.

6.2. RFQ y oferta PDF

  1. En B2B > Quotes > RFQ, crea un RFQ de prueba para una empresa y usuario activos.
  2. Añade SKU visibles para la empresa, cantidad y precio de oferta.
  3. Define la fecha de validez, envía la oferta al cliente y genera el PDF.
  4. Comprueba la variante del cliente: datos del vendedor/comprador, posiciones, precio, total y fecha de validez.
  5. Comprueba la variante del administrador: además, notas comerciales, comentarios, historial e información interna de posiciones.

El PDF del cliente no puede contener notas del comercial ni historial interno de estados.

7. Pedidos rápidos, importaciones e integraciones

Pedidos rápidos

En B2B > Quick Order > Debug SKU, comprueba la lista SKU,qty para la empresa, website y moneda. Después crea una lista de compra y prueba su uso por el cliente en el storefront.

Importación y exportación

En B2B > Import/Export, define un perfil solo después de determinar la fuente de datos. La configuración del perfil es un objeto JSON y debe contener rutas de archivos disponibles en el servidor Magento. Primero ejecuta la importación en modo de prueba y analiza el job y los logs.

Integraciones API

Antes de crear un token de integración, define el alcance de datos y el propietario de la sincronización. Usa una integración Magento independiente para cada ERP, PIM, WMS o middleware y concédele únicamente las ACL B2B necesarias. La lista completa de endpoints, tokens y normas de seguridad se encuentra en la documentación API para integradores.

8. Checklist de aceptación

Antes del lanzamiento en producción, confirma:

  • Los módulos Kowal están activos, cron funciona, y la cache y los índices son correctos.
  • B2B está activado únicamente para el website correcto.
  • El theme B2B está asignado únicamente al B2B store view.
  • La empresa de prueba tiene estado Active, usuario, rol, contacto y direcciones predeterminadas.
  • El producto de prueba está activo, asignado al website, visible para la empresa y tiene precio B2B correcto.
  • El cliente puede iniciar sesión, buscar SKU, usar quick order y añadir el producto al carrito.
  • Checkout muestra solo los métodos de envío y pago permitidos.
  • El límite y la regla de aprobación funcionan conforme a la política de la empresa, si se utilizan estas funciones.
  • El documento y el PDF RFQ se generan y están disponibles solo para la empresa correcta.
  • El RFQ puede enviarse, aceptarse y pasar al proceso de creación del pedido.
  • Las integraciones tienen tokens separados y ACL limitadas, si se utilizan.

9. Problemas más frecuentes

SíntomaQué comprobar
No aparece el menú B2Bsetup:upgrade, estado de módulos, cache y ACL del administrador.
La empresa o el cliente no ve B2BSi B2B está activo para el website correcto y si la empresa tiene una relación activa con ese website.
El producto no es visible o no tiene precioAsignación del producto al website, actividad del SKU, datos MSI, reglas de catálogo, precio de empresa, moneda y cantidad.
Falta método de envío o pagoConfiguración estándar de Magento, scope del B2B store view y reglas B2B Checkout.
No se genera el PDFPlantilla PDF activa, paquete mPDF, permisos para var/, datos del vendedor y logs de Magento.
RFQ no crea el pedido automáticamenteDirecciones predeterminadas de la empresa, pago y envío inequívocos; en los demás casos usa Backend Order Create.
API devuelve 403El token de integración no tiene la ACL requerida; no uses el token de administrador en una aplicación externa.

Al contactar con soporte, indica la versión de Magento, versión del paquete, pasos para reproducir, hora del evento, logs anonimizados de forma segura y posible trace_id. No envíes tokens ni contraseñas.

10. Actualización del paquete

  1. Consulta la información de versión proporcionada por Kowal.
  2. Realiza primero la actualización en el entorno de pruebas.
  3. Haz backup, composer update kowal/metapackage-b2b-suite --with-all-dependencies, bin/magento setup:upgrade, y en producción también compilación DI y deployment de recursos estáticos.
  4. Repite la checklist de aceptación, prestando especial atención a precios, checkout, documentos e integraciones.

No actualices el paquete copiando archivos manualmente a app/code; esto provoca problemas con Composer y dificulta el soporte posterior.

Pulse para saltar el carrusel

Hemos encontrado otros productos que podrían gustarle.

Magento 2 BaseLinker Stock Export - synchronizacja stanów magazynowych z ERP i Magento do BaseLinker
30,75 €
Kowal Analytics para Magento 2
30,75 €
Escribe tu propia reseña
Estás revisando: Sistema B2B profesional para Magento 2 Open Source
Tu valoración:
Calidad
Precio
Asistencia
loader
Cargando...

Has enviado la reseña para moderación.

Preguntas y respuestas

Pregunta
¿Kowal B2B Suite funciona con Magento 2 Open Source?
Respuesta
Sí. Amplía Magento 2 Open Source con funciones de venta B2B, permitiendo muchos procesos mayoristas y contractuales sin pasar a Adobe Commerce.
Pregunta
¿Cada cliente B2B puede tener sus propios precios y catálogos?
Respuesta
Sí. El sistema puede representar condiciones comerciales individuales, incluidos precios, catálogos, umbrales de cantidad y reglas de compra. El alcance de la configuración se adapta al modelo comercial de la empresa.
Pregunta
¿Una empresa puede tener varios usuarios con distintos permisos?
Respuesta
Sí. Una cuenta empresarial puede tener varios usuarios y roles de compra. Permite separar pedidos, aprobaciones y acceso a datos y documentos.
Pregunta
¿El sistema B2B puede integrarse con ERP, PIM, WMS o CRM?
Respuesta
Sí. Kowal B2B Suite puede intercambiar datos con sistemas externos, incluidos ERP, PIM, WMS y CRM. La integración puede cubrir productos, precios, clientes, pedidos, documentos, estados y otros datos necesarios para el proceso empresarial concreto.
Pregunta
¿Se puede implantar una plataforma B2B por etapas?
Respuesta
Sí. Puede empezar por empresas, usuarios, precios y catálogos, y ampliar después a pedidos rápidos, RFQ, límites de crédito, aprobaciones, documentos e integraciones.
Cambiar preferencias de cookies