Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Having trouble POSTing nested JSON using PHP

I'm trying to send some form data as a JSON object to a sample app on Force.com. I get the form data using jQuery and POST it to a PHP file on my server which then sends it to the sample app linked above. The response I get from the sample app however tells me that I'm making some mistakes along the way.

The PHP file that talks to the sample Force.com app:

<?php

    $url = 'https://cmsamp.secure.force.com/GenericApp/services/apexrest/GenericApp';
    $data = $_POST[ 'data'];

    $options = array('http' => array('method'  => 'POST','content' => http_build_query($data)));
    $context  = stream_context_create($options);
    $result = file_get_contents($url, false, $context);

    echo $result;

?>

Client-side jQuery code that posts form data to the PHP file:

var sample_form_data = {"attributes":{"type":"Generic_App__c"},"Application_Type__c":"iPay","Return_Email__c":"[email protected]","Name":"Bus Test","ACHRejectFee__c":"123456789","ApplicationDate__c":"2000-01-01","BusinessPhone__c":"(555) 123-4567","Email__c":"[email protected]","InternetPercentage2__c":"0","MailingState__c":"CA","MOTO7__c":"true","NumOfLocations__c":"15"};

$.post( url, { data: JSON.stringify( sample_form_data ) }, function( result ) { 
    console.log( result );
});

The response from I get from the Force.com app:

"No content to map to Object due to end of inputInsert failed. 
First exception on row 0; 
first error: REQUIRED_FIELD_MISSING, 
Required fields are missing: [Name]: [Name]"

Desired "success" response:

"Success: 
Generic App Object: Bus Test; was successfully created and inserted"

This is the output of var_dump($data) in the php code (line breaks added for readability:

string(405)
    "{\"attributes\":
        {\"type\":\"Generic_App__c\"},
    \"Application_Type__c\":\"iPay\",
    \"‌​Return_Email__c\":\"[email protected]\",
    \"Name\":\"Bus Test\",
    \"ACHRejectFee__c\":\"123456789\",
    \"ApplicationDate__c\":\"2000-01-01\",
    \"B‌​usinessPhone__c\":\"(555) 123-4567\",
    \"Email__c\":\"[email protected]\",
    \"InternetPercentage2__c\":\"0\"‌​,
    \"MailingState__c\":\"CA\",
    \"MOTO7__c\":\"true\",
    \"NumOfLocations__c\":\"15\"
    }" 

The generic app just expects to get a JSON object with the proper fields. When I submit the following through a REST client it works as intended (again, line breaks added for readability):

{"attributes":
    {"type":"Generic_App__c"},
"Application_Type__c":"iPay",
"Return_Email‌​__c":"[email protected]",
"Name":"Bus Test",
"ACHRejectFee__c":"123456789",
"ApplicationDate__c":"2000-01-01",
"BusinessPho‌​ne__c":"(555) 123-4567",
"Email__c":"[email protected]",
"InternetPercentage2__c":"0",
"Mailing‌​State__c":"CA",
"MOTO7__c":"true",
"NumOfLocations__c":"15"} 

Anyone have ideas on how to solve this?

like image 582
Lindsey Wilson Avatar asked Jan 28 '26 10:01

Lindsey Wilson


1 Answers

From the looks of those var_dumps, I'd say you need to strip those slashes out of $data before you use it. Try stripslashes.

like image 182
user1618143 Avatar answered Jan 29 '26 23:01

user1618143



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!