Enviar React Native - PHP

Estoy enviando la variable clienteide en mi proyecto React-native. Estoy enviando el cuerpo usando el método de correo al publicar. Pero ahora la variable clienteide no va a php, envía un valor nulo.

React-Native Code

 let rspNew = await get3dNumber({
                clientid: "500300000",
                ...
            })


export function get3dNumber(CART){
    return fetch(`http://...php`,{
        method:'POST',
        headers: {
            'Accept': 'application/json',
                             'Content-Type': 'application/x-www-form-urlencoded',
                        },
         redirect:'follow',
        body:JSON.stringify(CART)
    })
}

PHP CODE

php

    header('Access-Control-Allow-Origin: *');
    header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
    header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, X-Requested-With");
    
    $json = json_decode(file_get_contents('php://input'), true);
    
    $myArray = array();
    $myArray['clientid'] = $json['clientid']; 
    ?

Pregunta hecha hace 3 años, 4 meses, 24 días - Por codecrusader


2 Respuestas:

  • El problema que estás experimentando es que estás enviando los datos como un objeto JSON desde React Native, pero intentando leerlos en PHP como si fueran datos codificados en formato application/x-www-form-urlencoded. Por lo tanto, la forma en que los datos se envían y se leen debe coincidir.

    Para solucionar este problema, puedes realizar los siguientes cambios:

    • En el lado de React Native, cambia el tipo de contenido a `application/json` y envía los datos como un objecto en lugar de un string JSON. Esto simplificará tu código y facilitará el manejo de los datos en PHP:

    javascript export function get3dNumber(CART){ return fetch(`http://...php`,{ method: 'POST', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json', }, body: JSON.stringify(CART) }); }

    • En el lado de PHP, simplemente lee los datos del cuerpo de la solicitud usando `file_get_contents('php://input')` y luego decodifícalos como un objeto JSON. Puedes acceder a los datos como un arreglo asociativo sin necesidad de decodificarlo nuevamente:
    php
    header('Access-Control-Allow-Origin: *');
    header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
    header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, X-Requested-With");
    
    $json = json_decode(file_get_contents('php://input'), true);
    $clientid = $json['clientid'];
    
    // Aquí puedes hacer uso de la variable $clientid como necesites
    

    Al realizar estos cambios, tus datos del cliente deben ser enviados y recibidos correctamente en formato JSON, lo que te permitirá acceder a la variable clientid en PHP sin obtener un valor nulo.

    Respondida el Dec 22, 2020 a las 09:14 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El problema es que estás enviando el cuerpo de la solicitud como JSON, pero el código PHP espera que esté en formato URL codificado. Para resolver esto, debes codificar la URL del cuerpo de la solicitud antes de enviarla.

    Aquí tienes el código React Native actualizado:

    export function get3dNumber(CART){ return fetch(`http://...php`,{ method:'POST', headers: { 'Accept': 'application/json', 'Content-Type': 'application/x-www-form-urlencoded', }, redirect:'follow', body:encodeURI(JSON.stringify(CART)) }) }

    Con este cambio, el cuerpo de la solicitud se codificará correctamente en formato URL y el código PHP podrá acceder a la variable clienteide.

    Respondida el Dec 22, 2020 a las 09:17 - por Gemini

    Votos positivos: 0 | Votos negativos: 0