3

いくつかのフォームデータをJSONオブジェクトとしてForce.comのサンプルアプリに送信しようとしています。jQueryを使用してフォームデータを取得し、サーバー上のPHPファイルにPOSTしてから、上記のリンク先のサンプルアプリに送信します。ただし、サンプルアプリから得られる応答は、途中でいくつかの間違いを犯していることを示しています。

サンプルのForce.comアプリと通信するPHPファイル:

<?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;

?>

フォームデータをPHPファイルに投稿するクライアント側のjQueryコード:

var sample_form_data = {"attributes":{"type":"Generic_App__c"},"Application_Type__c":"iPay","Return_Email__c":"lsmith@cmsrep.com","Name":"Bus Test","ACHRejectFee__c":"123456789","ApplicationDate__c":"2000-01-01","BusinessPhone__c":"(555) 123-4567","Email__c":"thetest@testemail.com","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 );
});

Force.comアプリからの応答:

"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]"

望ましい「成功」応答:

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

これはvar_dump($data)、phpコードの出力です(読みやすくするために改行が追加されています:

string(405)
    "{\"attributes\":
        {\"type\":\"Generic_App__c\"},
    \"Application_Type__c\":\"iPay\",
    \"‌​Return_Email__c\":\"lsmith@cmsrep.com\",
    \"Name\":\"Bus Test\",
    \"ACHRejectFee__c\":\"123456789\",
    \"ApplicationDate__c\":\"2000-01-01\",
    \"B‌​usinessPhone__c\":\"(555) 123-4567\",
    \"Email__c\":\"thetest@testemail.com\",
    \"InternetPercentage2__c\":\"0\"‌​,
    \"MailingState__c\":\"CA\",
    \"MOTO7__c\":\"true\",
    \"NumOfLocations__c\":\"15\"
    }" 

汎用アプリは、適切なフィールドを持つJSONオブジェクトを取得することを期待しています。RESTクライアントを介して以下を送信すると、意図したとおりに機能します(ここでも、読みやすくするために改行が追加されています)。

{"attributes":
    {"type":"Generic_App__c"},
"Application_Type__c":"iPay",
"Return_Email‌​__c":"test@example.org",
"Name":"Bus Test",
"ACHRejectFee__c":"123456789",
"ApplicationDate__c":"2000-01-01",
"BusinessPho‌​ne__c":"(555) 123-4567",
"Email__c":"thetest@testemail.com",
"InternetPercentage2__c":"0",
"Mailing‌​State__c":"CA",
"MOTO7__c":"true",
"NumOfLocations__c":"15"} 

誰かがこれを解決する方法についてのアイデアを持っていますか?

4

2 に答える 2

2

これらの var_dumps の外観から、使用する前に $data からこれらのスラッシュを削除する必要があると思います。ストリップスラッシュを試してください。

于 2013-03-01T19:57:38.360 に答える
0

http_build_queryも配列を想定しています。あなたのデータはすでにjson文字列なので、おそらく省略すべきだと思います。URL エンコードが必要になる場合がありますが、そのためには通常のurlencode関数を使用する必要があります。

また、私はあなたが使用しているphpコンテキストメカニズムに精通しておらず、php.netのドキュメントに非常に満足していませんが'content' => $data、単にコンテンツを設定する以上のことをしているというこのしつこい気持ちを揺るがすことはできません. オプションを実際に使用しているストリーム コンテキストの適切なドキュメント リンクはあり'content'ますか?

于 2013-03-01T20:03:29.740 に答える