Instalación
Requisitos
Magento 2.4.x — probado en 2.4.9, compatible con versiones 2.4.* anteriores. PHP 8.1–8.5. Compatible tanto con el tema Luma por defecto como con el tema Hyvä.
Pasos de configuración
- Añade las credenciales que recibirás por email a
auth.jsonen la raíz de tu proyecto Magento:{ "http-basic": { "repo.codingrow.com": { "username": "...", "password": "..." } } } composer config repositories.codingrow composer https://repo.codingrow.comcomposer require codingrow/module-b2bfatturazionebin/magento module:enable Codingrow_B2bFatturazionebin/magento setup:upgrade && bin/magento setup:di:compile && bin/magento cache:flush- Pega tu clave de licencia en Admin → Stores → Configuration → Codingrow Extensions → B2bFatturazione → License → License Key, guarda, y luego
bin/magento cache:flush. La clave está vinculada al dominio declarado en la compra — en cualquier otro dominio el módulo permanece instalado pero sus campos quedan deshabilitados. - Si el sitio se ejecuta en modo
production, vuelve a desplegar también el contenido estático:bin/magento setup:static-content:deploy -f.
Desinstalación
composer remove codingrow/module-b2bfatturazione y luego
bin/magento setup:upgrade && bin/magento setup:di:compile && bin/magento cache:flush.
Documentación
Qué hace
Este es un módulo deliberadamente pequeño y enfocado: añade cinco campos — Tipo de cliente (empresa/particular), número de IVA, código SDI, PEC (correo certificado) y Código Fiscal — a la libreta de direcciones del cliente y al checkout (facturación y envío), tanto en el tema Luma por defecto como en Hyvä. No hay ninguna configuración más allá de instalarlo y pegar la clave de licencia; funciona nada más instalarlo.
Compatibilidad con GraphQL / headless & React Checkout
Los cinco campos B2B se exponen a través de los tipos y mutations GraphQL core de Magento — no una API personalizada. Si tu storefront está basado en GraphQL (React Checkout, o cualquier otro frontend headless/GraphQL), lees y escribes estos campos exactamente igual que cualquier otro campo de dirección nativo, a través de las mutations que ya estás usando.
Leer los campos
customer_type, sdi, pec, codice_fiscale y
fattura_richiesta se añaden directamente a los tipos BillingCartAddress,
ShippingCartAddress y CustomerAddress de Magento:
{
customerCart {
billing_address {
customer_type
sdi
pec
codice_fiscale
fattura_richiesta
}
}
}
{
customer {
addresses {
customer_type
sdi
pec
codice_fiscale
fattura_richiesta
}
}
}
Escribir los campos
Los mismos cinco campos se añaden al tipo core CartAddressInput de Magento, así que
se envían junto con los campos de dirección normales en las mutations estándar del carrito — no hay que
llamar a ninguna mutation aparte:
mutation {
setShippingAddressesOnCart(
input: {
cart_id: "abc123"
shipping_addresses: [
{
address: {
firstname: "Mario"
lastname: "Rossi"
street: ["Via Roma 1"]
city: "Milano"
postcode: "20100"
country_code: "IT"
telephone: "+390000000"
customer_type: "azienda"
sdi: "ABC1234"
pec: "mario.rossi@pec.it"
codice_fiscale: "RSSMRA80A01F205X"
}
}
]
}
) {
cart { id }
}
}
Notas de implementación
- Todo esto se hace a través de los puntos de extensión oficiales de Magento (plugins
di.xmlsobre interfaces core comoMagento\QuoteGraphQl\Model\Cart\QuoteAddressFactoryyMagento\CustomerGraphQl\Model\Customer\Address\ExtractCustomerAddressData) — no se parchea ni se copia código del resolver GraphQL core. - La validación del lado del servidor (p. ej. "SDI o PEC es obligatorio para un cliente empresa") funciona de la misma manera sin importar qué storefront llame a la mutation — REST, GraphQL, o el checkout Luma por defecto.
fattura_richiesta(factura solicitada) solo se aplica a clientes particulares — los clientes empresa siempre reciben factura por ley, así que el campo tiene sentido específicamente para el caso "particular" ("privato").
Visualización precisa de la dirección en el admin
El resumen de la dirección de facturación/envío por defecto del cliente en Customers → All Customers → [customer] → Addresses, y en la pestaña Customer View, ahora incluye también los campos B2B — no solo la dirección base:
| Antes | Después |
|---|---|
| Mario Rossi Mario Rossi S.r.l. Via dei Test, 1 Roma, RM, 00100 Italia T: 333 1122334 IVA: 01234567891 |
Mario Rossi Mario Rossi S.r.l. Via dei Test, 1 Roma, RM, 00100 Italia T: 333 1122334 Tipo de cliente: azienda IVA: 01234567891 SDI: ABCDEFG PEC: mario.rossi@pec.it Código Fiscal: RSSMRA80A01H501V |
React Checkout: listo para usar, sin desarrollo adicional
Codingrow también mantiene codingrow/module-react-checkout, un pequeño paquete complementario que añade el formulario de facturación B2B real (tipo de cliente, IVA, SDI, PEC, Código Fiscal) al React Checkout de Hyvä — la interfaz sobre los campos GraphQL documentados arriba. Instala ambos juntos y el formulario de facturación funciona de inmediato, sin desarrollo personalizado.
str_getcsv() sin escapar
provocan ambos errores fatales bajo el error handler de Magento en 8.4+, no simples avisos, lo que
de otro modo haría que React Checkout fuera inutilizable en un stack PHP moderno. Este parche se aplica
automáticamente como parte de la instalación de abajo.Instalar React Checkout con soporte B2B
- Requiere ambos paquetes:
composer require hyva-themes/magento2-react-checkout codingrow/module-react-checkout - Añade el parche de compatibilidad PHP 8.4/8.5 al
composer.jsonde la raíz de tu proyecto, y luego ejecutacomposer update --lockpara que quede registrado:
(Requiere cweagans/composer-patches; ejecuta primero"extra": { "patches": { "hyva-themes/magento2-react-checkout": { "PHP 8.4/8.5 compat": "vendor/codingrow/module-react-checkout/patches/react-checkout-php84-compat.patch" } } }composer require cweagans/composer-patchessi aún no lo tienes.) - Habilita los módulos:
bin/magento module:enable Codingrow_ReactCheckout Hyva_ReactCheckout bin/magento setup:upgrade - Activa React Checkout:
bin/magento config:set hyva_react_checkout/general/enable 1 - Compila la app React:
cd vendor/codingrow/module-react-checkout/reactapp npm install npm run build - Vuelve a desplegar el contenido estático — necesario cada vez, incluso fuera del modo
production; de lo contrario el navegador puede seguir cargando un paquete obsoleto:bin/magento setup:static-content:deploy -f en_US --theme <your-theme> bin/magento cache:flush
Requisitos: Magento 2.4.9, PHP 8.1–8.5 (incluido 8.4/8.5, mediante el parche incluido).