Quiero publicar información en una API externa pero recibo el error 422 todo el tiempo. Obtener información y autorización funciona bien. Estoy usando Symfony Http Client, la autorización y los encabezados están definidos en framework.yaml por ahora.
Fragmento de documentación API:
curvate "https://business.untappd.com/api/v1/locations/3/custom_menus"
-X PUBLICACIÓN
-H "Autorización: Básica bmlja0BuZXh0Z2xhc3MuY286OW5kTWZESEJGcWJKeTJXdDlCeC0="
-H "Tipo de contenido: aplicación/json"
-d '{ "menú_personalizado": { "nombre": "Selección de vinos" } }'
Mi fragmento de servicio:
public function customMenu(): int
{
$response = $this->client->request(
'POST',
'https://business.untappd.com/api/v1/locations/'.$this->getLocationId().'/custom_menus',
[
'json' => [
['custom_menu' => ['name' => 'Wine selection']],
],
]
);
¿Has intentado comprobar qué contiene la respuesta?
- Nico Haase
28/03/2021 a las 11:05
Lo intenté, pero realmente no sé qué buscar. Obtengo la autenticación, el tipo de contenido, el método y la URL correctos.
-dofado
28 de marzo de 2021 a las 12:57
------------------------------------
Intenta codificar json "manualmente" antes de enviarlo. Así de simple
//$jsonData = '{ "custom_menu": { "name": "Wine selection" } }';
$jsonData = json_encode(["custom_menu" => ["name" => "Wine selection"]]);
$response = $client->request(
'POST',
'https://business.untappd.com/api/v1/locations/'.$this->getLocationId().'/custom_menus',
[
'headers' => [
'Content-Type' => 'application/json',
],
'body' => $jsonData,
]
);
------------------------------------
Hay un error y faltan algunos parámetros que no incluiste:
Lo más importante: Autorización (si no la agregó a su archivo framework.yaml en el parámetro 'http_client').
Su enlace termina con 'menús_personalizados', no con 'menús'.
El tipo de contenido.
Puedes probar esta corrección:
public function customMenu(): int
{
$response = $this->client->request(
'POST',
'https://business.untappd.com/api/v1/locations/'.$this->getLocationId().'/custom_menus', //corrected '/custom_menus'
[
'auth_basic' => ['bmlja0BuZXh0Z2xhc3MuY286OW5kTWZESEJGcWJKeTJXdDlCeC0='], // To add
'headers' => [ // To add
'Content-Type' => 'application/json',
],
'json' => [
['custom_menu' => ['name' => 'Wine selection']],
],
]
);
// .....
}
1
1
Como escribí en mi pregunta, el tipo de contenido y la autenticación se definen en framework.yaml. Probé la autorización y la obtención de información del formulario API, eso funciona. Por seguridad, probé agregar autenticación y encabezados al servicio antes de publicar la pregunta, y eso no cambió nada. Sí, mi URL aquí es incorrecta, edité mi pregunta a la correcta, pero ahí no está el problema. Intenté hacer lo mismo con otras URL de la documentación y el problema persiste.
-dofado
28 de marzo de 2021 a las 12:52