curl - La publicación con el cliente HTTP Symfony 4.4 no funciona, código de estado 422

CorePress2024-01-25  8

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

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare