El número de seguimiento en PrestaShop 8: order_carrier y la @
Al adaptar los módulos de un transportista a PrestaShop 8, un compañero vio que grababan el seguimiento en shipping_number, ya obsoleto. Dónde va ahora el número, cómo grabarlo desde código y cómo configurar la URL de seguimiento con @ para que el cliente siga su paquete.
Un compañero de la comunidad estaba actualizando los módulos oficiales de un transportista nacional para PrestaShop 8 y vio que fallaban con el modo depuración activado. La causa: escribían el número de seguimiento en shipping_number, una propiedad del pedido obsoleta desde hace años que en PrestaShop 8 ya no existe en la clase Order. En PrestaShop 8 el número de seguimiento va en la tabla ps_order_carrier, campo tracking_number. Y para que el cliente pueda seguir su paquete, el transportista necesita además una URL de seguimiento con @.
Dónde se guarda el número de seguimiento
Un pedido tiene uno o varios transportistas asociados. Cada asociación es una fila de ps_order_carrier, con su peso, sus costes y su tracking_number. Es lo que rellenas en el back-office cuando editas el transportista de un pedido y escribes el número de seguimiento.
En la 1.7, Order::$shipping_number ya estaba marcada como obsoleta (desde la 1.5.0.4) y remitía a OrderCarrier->tracking_number. En PrestaShop 8 se quitó de la clase Order y solo queda como campo del webservice, que por debajo lee y escribe en OrderCarrier. La FAQ de envíos de la documentación de PrestaShop 8 enseña a leer y grabar el número ahí. Un módulo que siga escribiendo en shipping_number no guarda el número donde PrestaShop lo busca, y con el modo depuración activado falla.
Cómo grabarlo desde un módulo
$order = new Order((int) $idOrder);
$orderCarrier = new OrderCarrier((int) $order->getIdOrderCarrier());
if (Validate::isLoadedObject($orderCarrier) && Validate::isTrackingNumber($tracking)) {
$orderCarrier->tracking_number = $tracking;
$orderCarrier->update();
}getIdOrderCarrier() devuelve la primera fila del pedido. Si tus pedidos pueden ir con varios transportistas, recorre todas las filas de ps_order_carrier de ese pedido y graba el número en la que corresponda.
Grabar el número no avisa al cliente. Si quieres que reciba el correo de «en tránsito», como cuando lo haces desde el back-office, tu módulo tiene que enviarlo también. En la 8 y la 9, OrderCarrier tiene para eso el método sendInTransitEmail($order), el mismo que usa el back-office.
La URL de seguimiento con @
En Transporte → Transportistas, al editar un transportista, hay un campo URL de seguimiento. Ahí va la dirección de la página de seguimiento del transportista, con una @ en el lugar del número. PrestaShop sustituye la @ por el tracking_number del pedido. El formato es este:
URL_DEL_TRANSPORTISTA/seguimiento?envio=@Con eso, el enlace aparece en el detalle del pedido de la cuenta del cliente y en el correo de envío.
Otro miembro del grupo se dedicó a reunir y probar las URL de seguimiento de las principales empresas de paquetería españolas, y de ahí salieron unas cuantas lecciones:
- Pruébala con un envío real antes de dejarla puesta: los transportistas cambian sus URL y las antiguas dejan de funcionar.
- Algunos transportistas piden más datos que el número (el código postal, la agencia, un código de cliente) y su URL no se puede montar solo con la
@. Ahí necesitas el módulo del transportista o un desarrollo. - Las marcas cambian: en julio de 2023 una red de paquetería conocida pasó a otra marca y sus URL antiguas iban a dejar de funcionar. Revisa de vez en cuando que los enlaces siguen vivos.
Si actualizas a PrestaShop 8 y usas módulos de transportista
- Activa el modo depuración en una copia de la tienda y haz un envío completo: etiqueta, número de seguimiento y cambio de estado.
- Si salen avisos sobre
shipping_numbero variables sin definir, el módulo no está adaptado. - Avisa a quien lo mantiene. El compañero de este caso arregló los fallos en su tienda y le pasó los cambios al desarrollador para que los publicara para todos.
Esto salió en @PrestashopEsp, la mayor comunidad PrestaShop de España en Telegram. Ver la conversación