POC de pago fraccionado: guía de prueba y verificación
Esta guía le explica cómo verificar que cada componente funciona correctamente, en el orden en que se deben probar. Comience desde abajo (módulo Commerce) y trabaje hacia arriba (App Builder).
Paso 1: Verificación de la instalación del módulo Commerce
Después de ejecutar bin/magento setup:upgrade y bin/magento setup:di:compile:
# Confirm module is enabled
bin/magento module:status Client_SplitPayment
# Confirm db_schema columns were added
bin/magento doctrine:schema:validate
# or check directly:
mysql -u <user> -p <dbname> -e "DESCRIBE sales_order;" | grep split
Resultado esperado: cuatro columnas que comienzan con split_ visibles en sales_order.
Paso 2: Verificación de la configuración del administrador de Commerce
En Commerce Admin:
- Stores > Configuration > Sales > Payment Methods — confirmar que Cash On Delivery está habilitado con el título
Cash - Stores > Configuration > Customers > Customer Configuration > Store Credit Options — confirmación habilitada
- Confirme que el cliente de prueba tiene crédito de almacén: Customers > All Customers > [cliente] > Store Credit
Paso 3: Verificar que los puntos finales de REST sean accesibles
Utilice curl para confirmar que los puntos de conexión responden (rechazarán solicitudes no autorizadas, pero un error 401 confirma que se han enrutado correctamente):
# Should return 401 (not 404) — endpoint exists but requires auth
curl -X POST https://your-store.example.com/rest/V1/split-payment/orders/1/cash-received
# Should return 200 or session-based response — anonymous endpoint
curl -X POST https://your-store.example.com/rest/V1/split-payment/set \
-H "Content-Type: application/json" \
-d '{"storeCreditAmount": 0, "cashAmount": 0}'
Paso 4: Prueba de la IU de cierre de compra
-
Inicie sesión en la tienda como cliente de prueba (que tiene crédito de tienda)
-
Añadir un producto al carro de compras (total menos de 100 $ después del envío + impuestos)
-
Pasar al cierre de compra
-
En el paso de pago, selecciona Pago contra reembolso (o Pago contra reembolso)
-
Compruebe que aparecen los campos de pago dividido:
- Se muestra el saldo de crédito de la tienda
- Campo de importe en efectivo rellenado previamente con el total del pedido
- Campo “Crédito de tienda para este pedido” que muestra 0,00 $ (ya que efectivo = total del pedido completo)
-
Reduzca la cantidad en efectivo (por ejemplo, introduzca 10 $ para un pedido de 50 $)
-
Verificar las actualizaciones de la parte de crédito de la tienda a 40,00 $
-
Compruebe que aparece el mensaje:
"The remaining $40.00 will automatically be applied from your store credit."
Validación de prueba:
- Introduzca un importe en efectivo mayor que el total del pedido → mensaje de error
- Introduzca un importe en efectivo que requiera más crédito de tienda que el disponible → mensaje de error
- Introducir efectivo = 0 error de → (o el crédito de tienda cubre el pedido completo)
Paso 5: Probar la protección del umbral
- Agregar productos por un total de más de $100 (subtotal + envío + impuesto > $100)
- Continuar con el cierre de compra, seleccionar Efectivo
- Intento de realizar el pedido
- Compruebe que aparece el mensaje de error:
"Payment could not be processed. Please try again or contact support." - Compruebe que el carro de compras se ha conservado (el cliente aún puede ajustarlo e inténtelo de nuevo)
Paso 6: Realizar una orden de pago dividida de prueba
- Crear un carro de compras por debajo de 100 $ (cliente conectado con crédito de la tienda)
- Seleccionar Efectivo al pagar
- Introduzca un importe en efectivo menor que el total del pedido (por ejemplo, 10 $ de un pedido de 45 $)
- Confirme que aparece el mensaje de crédito de la tienda
- Haga clic en Realizar pedido
Después de realizar el pedido, compruebe en el Administrador de Commerce:
-
El pedido está en estado
pending_payment -
El pedido tiene dos comentarios del historial:
"Cash payment of $X.XX pending. Awaiting admin confirmation."(de App Builderpayment-orchestrator)"Split payment orchestration completed. Order awaiting cash confirmation."(de App Builder)
-
Los importes de los pagos fraccionados se pueden ver en el bloque de pagos del pedido
Si no aparecen comentarios de App Builder: Compruebe los registros de acciones de App Builder con
aio app logs. Es posible que el evento no se haya activado o que la acción tenga un error.
Paso 7: Prueba de aceptación mediante script de simulación
El script de simulación es la forma más rápida de probar el flujo de aceptación/rechazo sin la interfaz de usuario del operador completa.
cd commerce-checkout-starter-kit
cp commerce-backend-ui-1/.env.simulation.example commerce-backend-ui-1/.env.simulation
# Edit .env.simulation with your credentials
# List recent orders (find your test order entity_id)
node commerce-backend-ui-1/scripts/simulate-split-payment.mjs list
# Show split payment fields for a specific order
node commerce-backend-ui-1/scripts/simulate-split-payment.mjs show 42
# Accept the cash payment
node commerce-backend-ui-1/scripts/simulate-split-payment.mjs accept 42
Después de aceptar, verifique en la vista de orden de administración de Commerce:
- El estado del pedido es
processing - Comentario de historial:
"Cash payment of $X.XX received." - Factura de efectivo creada (visible en la pestaña Facturas)
- Envío creado (visible en la pestaña Envíos, si corresponde)
- Comentario de historial:
"Split payment: cash portion invoiced #XXXXXXXX." - Comentario de historial:
"Split payment: shipment created after cash was accepted (App Builder / API)."
Paso 8: Rechazo de prueba mediante script de simulación
Realice otro pedido de prueba (la misma configuración que en el paso 6) y, a continuación:
node commerce-backend-ui-1/scripts/simulate-split-payment.mjs decline <orderId>
Después del rechazo, compruebe en Administración de Commerce:
- El estado del pedido es
canceled - Comentario de historial:
"Cash payment declined (simulated fraud check)." split_cash_status=declined
Paso 9: Prueba del tablero de demostración
Después de implementar split-payment-orchestrator, aio app deploy imprime las direcciones URL de acción.
Abra la URL demo-dashboard en un explorador:
https://[runtime-host]/api/v1/web/split_payment_orchestrator/demo-dashboard
Si DEMO_UI_SECRET está establecido:
https://[runtime-host]/api/v1/web/split_payment_orchestrator/demo-dashboard?secret=<your-secret>
Con un pedido pendiente:
- El panel debe mostrar el orden en la lista de pendientes
- Haga clic en Aceptar → orden debe pasar a
processingen Commerce - Realice otro pedido; haga clic en Rechazar → el pedido debe ser
canceleden Commerce
Paso 10: Prueba de registros de acciones de App Builder
# Follow logs in real-time
aio app logs --tail
# Or view last invocations
aio runtime activation list --limit 10
aio runtime activation logs <activation-id>
Para payment-orchestrator, busque:
[INFO] Split payment orchestration finished { orderId: '42' }
Para payment-accept o payment-decline:
[INFO] Cash payment accepted on Commerce via REST { orderId: '42' }
Problemas y correcciones comunes
“La firma no es válida” desde Commerce OAuth
Causa: Diferencia de reloj entre el tiempo de ejecución de App Builder y Commerce o un error de firma de OAuth.
Corrección:
- Confirmar que
COMMERCE_BASE_URLno tiene barra diagonal - Confirme que las cuatro credenciales de OAuth son para una integración de activated
- Pruebe primero con el script de simulación: si el script funciona pero App Builder no, es probable que no se cargue una variable env (compruebe las variables env que faltan en la salida
aio app deploy)
Los campos de pago divididos no aparecen en el cierre de compra
Causa: las rutas de inyección de LayoutProcessorPlugin no coinciden con el diseño de cierre de compra.
Corrección:
- Compruebe en la consola del explorador si hay errores de RequireJS cargando
Client_SplitPayment/js/view/payment/split-payment - Comprobación
bin/magento setup:static-content:deploycompletada correctamente - Vaciar caché:
bin/magento cache:flush - Si la temática tiene una desprotección personalizada, es posible que se necesite ajustar la ruta
LayoutProcessorPluginpara insertar el componente
Crédito de tienda no aplicable / “No se pudo procesar el pago” en el pedido del lugar
Causa: Normalmente, uno de los complementos de casos extremos no funciona correctamente.
Comprobación:
- ¿Devuelve
SplitPaymentSessionlas cantidades correctas? Agregar registro de depuración temporal enPlaceOrderPlugin - ¿Se está ejecutando
FixSplitPaymentGrandTotalPluginy afecta el total de la cotización antes de llamar aBalanceManagementInterface::apply()? El marcadorbeginBalanceApply()debe suprimirlo. - ¿Está activado el módulo de saldo del cliente en Commerce?
La acción de App Builder recibe el evento pero falta orderId
Causa: La lista de campos de io_events.xml no incluye entity_id o la forma de carga útil de evento cambió.
Fix:
- Confirm
io_events.xmlincludesentity_idin the field list - In the action, log
JSON.stringify(params)temporarily to see the full payload shape - Check that the
extractValue()function is finding the right nesting level
Orders don’t show in demo dashboard
Cause: Commerce REST orders search criteria not returning orders, or split_cash_status field not in the REST response.
Fix:
- Confirm
OrderRepositoryPluginis loading extension attributes correctly - Test directly:
GET /rest/V1/orders?searchCriteria[pageSize]=5and check ifextension_attributes.split_cash_statusappears in the response - Check that
extension_attributes.xmlis correctly declaring thesplit_cash_statusattribute onOrderInterface
Verification Checklist
- [ ]
split_*columns visible insales_ordertable - [ ] REST endpoints return 401 (not 404) when called without auth
- [ ] Split payment UI renders at checkout when Cash is selected
- [ ] Validation messages work (overpayment, insufficient credit)
- [ ] Threshold guard blocks orders > $100
- [ ] Placed order has
pending_paymentstatus and App Builder comments - [ ]
simulate-split-payment.mjs listshows the test order with split amounts - [ ]
simulate-split-payment.mjs accept <id>moves order toprocessingwith invoice and shipment - [ ]
simulate-split-payment.mjs decline <id>cancels the order - [ ] Demo dashboard lists pending orders and accept/decline work from the UI
Recursos de POC de pagos fraccionados relacionados
- Crear un POC de pagos divididos: Herramientas de App Builder e IA
- Crear un POC de pago dividido: demostración completa de App Builder
- POC de pagos divididos: decisiones de arquitectura y diseño
- POC de pagos divididos: requisitos previos y configuración del entorno
- POC de pagos divididos: referencia de variables de entorno
- POC de pago dividido: petición de API del módulo Commerce
- POC de pago dividido: petición de App Builder orchestrator AI
- POC de pagos divididos: petición de API de la extensión de IU de Experience Cloud
- POC de pago fraccionado: guía de prueba y verificación
- POC de pagos divididos: pasos siguientes después de la prueba de concepto
- Split payment POC: referencia rápida del tutorial para autores