Curl Bad Request Enviar Json

  • Autor Autor Prospero
  • Fecha de inicio Fecha de inicio
Prospero

Prospero

Eta
Verificación en dos pasos activada
Hola amigos estoy enviando post a una api, pero solo recibo Bad Request que estoy haciendo mal? alguien puede orientarme?

Esto es lo que le tengo que enviar:
Insertar CODE, HTML o PHP:
{"product":"CREDITO","client":"onboarding","brand":"MANGO_AR","country":"AR","lead_info":{"tracking_id":null,"adgroup":"onboarding-default","lead_source":"onboarding-default","utm_source":"onboarding-default","utm_medium":"onboarding-default","utm_campaign":"onboarding-default","campaign_type":"onboarding-default","campaign":"onboarding-default","utm_term":"onboarding-default","aff_sub":"onboarding-default","aff_sub2":"onboarding-default","national_id":"onboarding-default"},"fingerprint":{"ip":"181.171.95.74","user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36","language":"es-ES","device_memory":8,"timezone_offset":180,"resolution":"[1920,1080]","available_resolution":"[1920,1040]"}}

Yo Probe Opcion 1 y no funciono. asi:

Insertar CODE, HTML o PHP:
$data = [
        "product" =>
            [
                "brand" => "MANGO_AR",
                "client" => "onboarding",
                "country" => "AR",
              
                "fingerprint" => [
                    "available_resolution" => "[1920,1040]",
                    "device_memory" => "8",
                    "ip" => "181.171.95.74",
                    "language" => "es-ES",
                    "resolution" => "[1920,1080]",
                    "timezone_offset" => "180",
                    "user_agent" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36",
                    ],
                  
                    "lead_info" => [
                        "adgroup" => "onboarding-default",
                        "aff_sub" => "onboarding-default",
                        "aff_sub2" => "onboarding-default",
                        "campaign" => "onboarding-default",
                        "campaign_type" => "onboarding-default",
                        "lead_source" => "onboarding-default",
                        "national_id" => "onboarding-default",
                        "tracking_id" => "",
                        "utm_campaign" => "onboarding-default",
                        "utm_medium" => "onboarding-default",
                        "utm_source" => "onboarding-default",
                        "utm_term" => "onboarding-default",
                      
                     ],
                   
                     "product" => "CREDITO",
            ]
          
     

];

La segunda Prueba de envio la hice asi y tampoco:

Insertar CODE, HTML o PHP:
$data = array("product" =>array (
    "brand" => "MANGO_AR",
                "client" => "onboarding",
                "country" => "AR",
                "fingerprint" =>array (
                    "available_resolution" => "[1920,1040]",
                    "device_memory" => "8",
                    "ip" => "181.171.95.74",
                    "language" => "es-ES",
                    "resolution" => "[1920,1080]",
                    "timezone_offset" => "180",
                    "user_agent" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36",
                    ),
                    "lead_info" =>array (
                         "adgroup" => "onboarding-default",
                        "aff_sub" => "onboarding-default",
                        "aff_sub2" => "onboarding-default",
                        "campaign" => "onboarding-default",
                        "campaign_type" => "onboarding-default",
                        "lead_source" => "onboarding-default",
                        "national_id" => "onboarding-default",
                        "tracking_id" => "",
                        "utm_campaign" => "onboarding-default",
                        "utm_medium" => "onboarding-default",
                        "utm_source" => "onboarding-default",
                        "utm_term" => "onboarding-default",
                        ),
                        "product" => "CREDITO",
                        ));

No creo que sea el codigo curl ya que creo hacer bien esa parte:

Insertar CODE, HTML o PHP:
$payload = json_encode($data);

curl_setopt($ch, CURLOPT_POST, true);

curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);


curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));



Espero que alguna alma bondadoza con un buen craneo me tire una mano.. jaja graciiias!
 
Última edición:
Hola amigos estoy enviando post a una api, pero solo recibo Bad Request que estoy haciendo mal? alguien puede orientarme?

Esto es lo que le tengo que enviar:
Insertar CODE, HTML o PHP:
{"product":"CREDITO","client":"onboarding","brand":"MANGO_AR","country":"AR","lead_info":{"tracking_id":null,"adgroup":"onboarding-default","lead_source":"onboarding-default","utm_source":"onboarding-default","utm_medium":"onboarding-default","utm_campaign":"onboarding-default","campaign_type":"onboarding-default","campaign":"onboarding-default","utm_term":"onboarding-default","aff_sub":"onboarding-default","aff_sub2":"onboarding-default","national_id":"onboarding-default"},"fingerprint":{"ip":"181.171.95.74","user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36","language":"es-ES","device_memory":8,"timezone_offset":180,"resolution":"[1920,1080]","available_resolution":"[1920,1040]"}}

Yo Probe Opcion 1 y no funciono. asi:

Insertar CODE, HTML o PHP:
$data = [
        "product" =>
            [
                "brand" => "MANGO_AR",
                "client" => "onboarding",
                "country" => "AR",
              
                "fingerprint" => [
                    "available_resolution" => "[1920,1040]",
                    "device_memory" => "8",
                    "ip" => "181.171.95.74",
                    "language" => "es-ES",
                    "resolution" => "[1920,1080]",
                    "timezone_offset" => "180",
                    "user_agent" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36",
                    ],
                  
                    "lead_info" => [
                        "adgroup" => "onboarding-default",
                        "aff_sub" => "onboarding-default",
                        "aff_sub2" => "onboarding-default",
                        "campaign" => "onboarding-default",
                        "campaign_type" => "onboarding-default",
                        "lead_source" => "onboarding-default",
                        "national_id" => "onboarding-default",
                        "tracking_id" => "",
                        "utm_campaign" => "onboarding-default",
                        "utm_medium" => "onboarding-default",
                        "utm_source" => "onboarding-default",
                        "utm_term" => "onboarding-default",
                      
                     ],
                   
                     "product" => "CREDITO",
            ]
          
     

];

La segunda Prueba de envio la hice asi y tampoco:

Insertar CODE, HTML o PHP:
$data = array("product" =>array (
    "brand" => "MANGO_AR",
                "client" => "onboarding",
                "country" => "AR",
                "fingerprint" =>array (
                    "available_resolution" => "[1920,1040]",
                    "device_memory" => "8",
                    "ip" => "181.171.95.74",
                    "language" => "es-ES",
                    "resolution" => "[1920,1080]",
                    "timezone_offset" => "180",
                    "user_agent" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36",
                    ),
                    "lead_info" =>array (
                         "adgroup" => "onboarding-default",
                        "aff_sub" => "onboarding-default",
                        "aff_sub2" => "onboarding-default",
                        "campaign" => "onboarding-default",
                        "campaign_type" => "onboarding-default",
                        "lead_source" => "onboarding-default",
                        "national_id" => "onboarding-default",
                        "tracking_id" => "",
                        "utm_campaign" => "onboarding-default",
                        "utm_medium" => "onboarding-default",
                        "utm_source" => "onboarding-default",
                        "utm_term" => "onboarding-default",
                        ),
                        "product" => "CREDITO",
                        ));

No creo que sea el codigo curl ya que creo hacer bien esa parte:

Insertar CODE, HTML o PHP:
$payload = json_encode(array("user" => $data));


curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);


curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));



Espero que alguna alma bondadoza con un buen craneo me tire una mano.. jaja graciiias!
Agregaste curl_setopt($ch, CURLOPT_POST, true); ?
 
Amigooo!! si lo agregue recien pero no pasa nada aun sigue con el bad request

Pero estás armando mal el body, tienes la mayor parte de la info dentro de product. Cosa que ese atributo solo lleva "CREDITO". Te muestro un ejemplo como debería ser:

PHP:
$data  = [
    "product" => "CREDITO",
    "brand" => "MANGO_AR",
    "client" => "onboarding",
    "country" => "AR",
    "fingerprint" => [
        "available_resolution" => "[1920,1040]",
        "device_memory" => "8",
        "ip" => "181.171.95.74",
        "language" => "es-ES",
        "resolution" => "[1920,1080]",
        "timezone_offset" => "180",
        "user_agent" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36",
    ],
    "lead_info" => [
        "adgroup" => "onboarding-default",
        "aff_sub" => "onboarding-default",
        "aff_sub2" => "onboarding-default",
        "campaign" => "onboarding-default",
        "campaign_type" => "onboarding-default",
        "lead_source" => "onboarding-default",
        "national_id" => "onboarding-default",
        "tracking_id" => null,
        "utm_campaign" => "onboarding-default",
        "utm_medium" => "onboarding-default",
        "utm_source" => "onboarding-default",
        "utm_term" => "onboarding-default",
    ],
];
 
Última edición:
Pero estás armando mal el body, tienes la mayor parte de la info dentro de product. Cosa que ese atributo solo lleva "CREDITO". Te muestro un ejemplo como debería ser:

PHP:
$data  = [
    "product" => "CREDITO",
    "brand" => "MANGO_AR",
    "client" => "onboarding",
    "country" => "AR",
    "fingerprint" => [
        "available_resolution" => "[1920,1040]",
        "device_memory" => "8",
        "ip" => "181.171.95.74",
        "language" => "es-ES",
        "resolution" => "[1920,1080]",
        "timezone_offset" => "180",
        "user_agent" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36",
    ],
    "lead_info" => [
        "adgroup" => "onboarding-default",
        "aff_sub" => "onboarding-default",
        "aff_sub2" => "onboarding-default",
        "campaign" => "onboarding-default",
        "campaign_type" => "onboarding-default",
        "lead_source" => "onboarding-default",
        "national_id" => "onboarding-default",
        "tracking_id" => null,
        "utm_campaign" => "onboarding-default",
        "utm_medium" => "onboarding-default",
        "utm_source" => "onboarding-default",
        "utm_term" => "onboarding-default",
    ],
];
1643294868595.webp


use un visor de json me parece que tienes razon voy comprobar pero tu codigo no lo tomo. graciias!
 
Como que no tomo mi código? Te genera algún error? Si es eso debes estar usando una versión de PHP antigua y cambia [] por array()

eso hice jajaja

Insertar CODE, HTML o PHP:
$data = array(
                "product" => "CREDITO",
                "brand" => "MANGO_AR",
                "client" => "onboarding",
                "country" => "AR",
                
                "fingerprint" =>array (
                    "available_resolution" => "[1920,1040]",
                    "device_memory" => "8",
                    "ip" => "181.171.95.74",
                    "language" => "es-ES",
                    "resolution" => "[1920,1080]",
                    "timezone_offset" => "180",
                    "user_agent" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36",
                    ),
                    
                "lead_info" =>array (
                         "adgroup" => "onboarding-default",
                        "aff_sub" => "onboarding-default",
                        "aff_sub2" => "onboarding-default",
                        "campaign" => "onboarding-default",
                        "campaign_type" => "onboarding-default",
                        "lead_source" => "onboarding-default",
                        "national_id" => "onboarding-default",
                        "tracking_id" => "",
                        "utm_campaign" => "onboarding-default",
                        "utm_medium" => "onboarding-default",
                        "utm_source" => "onboarding-default",
                        "utm_term" => "onboarding-default",
                        )
                        
                );
 
Muestra tu código completo, tal vez sea más fácil ayudarte.
aqui va!

Insertar CODE, HTML o PHP:
<?php

$url = 'https://api.fintechpeople.io/wenance-api/ar/session';

$data = array(
                "product" => "CREDITO",
                "brand" => "MANGO_AR",
                "client" => "onboarding",
                "country" => "AR",
                
                "fingerprint" =>array (
                    "available_resolution" => "[1920,1040]",
                    "device_memory" => "8",
                    "ip" => "181.171.95.74",
                    "language" => "es-ES",
                    "resolution" => "[1920,1080]",
                    "timezone_offset" => "180",
                    "user_agent" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36",
                    ),
                    
                "lead_info" =>array (
                         "adgroup" => "onboarding-default",
                        "aff_sub" => "onboarding-default",
                        "aff_sub2" => "onboarding-default",
                        "campaign" => "onboarding-default",
                        "campaign_type" => "onboarding-default",
                        "lead_source" => "onboarding-default",
                        "national_id" => "onboarding-default",
                        "tracking_id" => "",
                        "utm_campaign" => "onboarding-default",
                        "utm_medium" => "onboarding-default",
                        "utm_source" => "onboarding-default",
                        "utm_term" => "onboarding-default",
                        )
                        
                );






//create a new cURL resource
$ch = curl_init($url);


$payload = json_encode($data);

//attach encoded JSON string to the POST fields
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);

//set the content type to application/json
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));



//return response instead of outputting
//curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

//execute the POST request
$result = curl_exec($ch);

//close cURL resource
curl_close($ch);

?>
 
No sé por que, siento que te falta api key
 
No sé por que, siento que te falta api key
segun lo que veo no hay apikey primero genera un tipo de session que es lo que estoy trantando de hacer recien con el id de session se puede operar dentro de la api..
 
Si te lanza un 400 bad request es porque, te falta enviar datos requeridos o esta mal formateada. (Json, multiform?).

Otro problema sería que el servidor este respondiendo en http v2.

Te recomiendo que utilices la librería Guzzle, asi te ahorras todos esos problemas con curl, y abstraes las llamadas al API de Mango (Fintech Argentina). Un saludo,
 
usa Guzzle y deja de complicarte tanto con esos problemas
 
te aseguraste que cada atributo del json este correcto?, los nombres a veces influyen
 
Atrás
Arriba