Buen día comunidad, soy de la UTN de Buenos Aires, actualmente usamos Guarani 3.16.2.
Necesito comunicarme con un sitema interno de la facultad para pasar datos de personas, esto lo hago mediante una API que me exponen usando curl.
private function makeQuery($url, $method = null, $datosParaGuardar = null) {
$host = $this->urlBase . $url;
$conexion = curl_init();
curl_setopt($conexion, CURLOPT_URL, $host);
curl_setopt($conexion, CURLOPT_VERBOSE, 0);
curl_setopt($conexion, CURLOPT_RETURNTRANSFER, 1);
if($method == "POST") {
curl_setopt($conexion, CURLOPT_POST, true);
curl_setopt($conexion, CURLOPT_HTTPHEADER, array(
'Content-Type:application/json; charset=utf-8',
'Connection: Keep-Alive'));
curl_setopt($conexion, CURLOPT_POSTFIELDS, $datosParaGuardar);
}
$datos = curl_exec($conexion);
$status = curl_getinfo($conexion, CURLINFO_HTTP_CODE);
$resultado = [
"status" => $status,
"datos" => json_decode($datos, true) ? json_decode($datos, true) : $datos
];
curl_close($conexion);
return $resultado;
}
Tengo un problema cuando tengo que hacer un POST y en los datos hay caracteres especiales (tildes, ñ, etc).
Para transformar un array a json tengo que encodearlos en UTF-8, eso lo hago con array_a_utf8, pero a los caracteres especiales quedan en formato unicode (por ejemplo \u0062, esto pasa aunque ponga el flag JSON_UNESCAPED_UNICODE en el json_encode) y no me sirve que se mandarlo así.
Si decodeo el json los campos se ven bien, si caracteres en unicode, pero cuando hago el POST los datos no salen, no llega nada al sistema externo. Probé con POSTMAN usando el mismo json y ahí si le llegan datos, osea que el problema está solo cuando hago el post desde php.
Alguién sabe cómo puedo hacer? Gracias.
PD: Ya estuve googleando en stack overflow y demás lugares pero las respuestas que me dan no me sirvieron