Hola @luciasevilla y @joaquindeco,
Efectivamente, el hook actionPaymentConfirmation es funcional, pero el actionValidateOrder suele ser más robusto porque se ejecuta justo después de que se crea el pedido y antes de que se redirija al usuario a la página de confirmación, y te proporciona acceso al objeto Cart que puede ser muy útil.
Para resolver tus problemas con la moneda y los IDs de producto, debes hacer lo siguiente:
- Cargar el objeto
Currency usando el id_currency del pedido para obtener su código ISO.
- Utilizar el método
getProductsDetail() del objeto Order para obtener un array con los detalles de cada producto, incluyendo sus IDs.
Aquí te muestro cómo podrías adaptar tu código para el hook actionValidateOrder (que es el más recomendado en estos casos para asegurar que el evento se dispare una única vez y con todos los datos correctos):
public function hookActionValidateOrder(array $params)
{
$order = $params['order'];
if (Validate::isLoadedObject($order)) {
$currency = new Currency($order->id_currency);
$products = $order->getProductsDetail();
$contentIds = array_map(function ($product) {
return (string)$product['product_id']; // Asegurar que sean strings
}, $products);
$tiktokData = [
Con esto, $currency->iso_code te dará 'EUR', 'USD', etc., y $contentIds contendrá un array con los IDs de todos los productos en el pedido, que es lo que la API de TikTok espera. Recuerda que $params['order'] en actionValidateOrder ya te proporciona el objeto Order completamente cargado.