config = $config; $this->client = new Client([ 'base_uri' => $config['walrus']['base_url'] . '/', 'headers' => ['Content-Type' => 'application/json'], 'timeout' => 30 // Evitar que se cuelgue infinitamente ]); } private function post($endpoint, $data = []) { $payload = array_merge([ 'token' => $this->config['walrus']['token'], 'limit' => $this->config['walrus']['limit'], 'offset' => 0 ], $data); try { $response = $this->client->post($endpoint, ['json' => $payload]); return json_decode($response->getBody(), true); } catch (RequestException $e) { $msg = date('Y-m-d H:i:s') . " Error Walrus [$endpoint]: " . $e->getMessage() . "\n"; file_put_contents($this->config['files']['log_file'], $msg, FILE_APPEND); return null; } } // --- Endpoints Reales (Documentados en PDF) --- public function getClientes($fechaSinc = null) { $params = []; if ($fechaSinc) $params['p_fech_sinc'] = $fechaSinc; $res = $this->post('lista_clientes', $params); return $res['items'] ?? []; } public function getProductos($fechaSinc = null) { $params = []; if ($fechaSinc) $params['p_fech_sinc'] = $fechaSinc; $res = $this->post('lista_productos', $params); return $res['items'] ?? []; } public function createCliente($datosBitrix) { // Mapeo Bitrix -> Walrus (Página 14 PDF) $body = [ "p_clpr_ruc" => $datosBitrix['RUC'] ?? '44444401-1', "p_clr_desc" => substr($datosBitrix['TITLE'], 0, 100), "p_clpr_tele" => $datosBitrix['PHONE'] ?? '', "p_clpr_email" => $datosBitrix['EMAIL'] ?? '', "p_clpr_dire" => $datosBitrix['ADDRESS'] ?? 'Direccion no especificada', // Defaults obligatorios "p_clpr_esta_civi" => "S", "p_clpr_ciud_codi" => 1, "p_clpr_zona_codi" => 1, "p_clpr_orte_codi" => 1, "p_clpr_list_codi" => 1, "p_clpr_clie_clas1_codi" => 1 ]; return $this->post('registro_cliente', $body); } // --- Endpoints NUEVOS (Solicitados al proveedor) --- // Calcula el precio de un producto para un cliente específico public function calcularPrecio($clienteId, $prodId, $cantidad) { return $this->post('calcular_precio', [ 'p_clpr_codi_alte' => $clienteId, 'p_prod_codi' => $prodId, 'p_cantidad' => $cantidad ]); } // Envía la venta final al ERP public function crearPedido($pedidoData) { // Estructura esperada: { p_clpr_codi_alte: '...', items: [...] } return $this->post('crear_pedido', $pedidoData); } }