Php 如何解析json在Salesforce平台上发表文章?

Php 如何解析json在Salesforce平台上发表文章?,php,arrays,rest,curl,php-curl,Php,Arrays,Rest,Curl,Php Curl,更新代码后,现在我可以看到错误字符串(148)“[{”errorCode:“APEX_error”,“message:“System.TypeException:从运行时类型列表到映射的转换无效\n\n(BMCServiceDesk)”}]” 只是解释一下:我正在创建一个集成,以便在我的salesforce实例(remedyforce应用程序)中打开一个服务请求 我创建了下面的文件,我有几个错误,并纠正了它,直到我没有给出任何更多的错误,但现在我只能看到无效的转换。也许是因为我的json <

更新代码后,现在我可以看到错误字符串(148)“[{”errorCode:“APEX_error”,“message:“System.TypeException:从运行时类型列表到映射的转换无效\n\n(BMCServiceDesk)”}]”

只是解释一下:我正在创建一个集成,以便在我的salesforce实例(remedyforce应用程序)中打开一个服务请求

我创建了下面的文件,我有几个错误,并纠正了它,直到我没有给出任何更多的错误,但现在我只能看到无效的转换。也许是因为我的json

<?php 

$url = 'https://URL.my.salesforce.com/services/apexrest/BMCServiceDesk/1.0/ServiceRequest/';
$ch = curl_init($url);

$sf_auth = 'Bearer XXXXXX';

$params = array("[
  'Fields' => [
    0 => [
      'Name' => 'requestDefinitionId',
      'Value' => 'a3Hf0000000lTNaEAM',
    ],
    1 => [
      'Name' => 'client',
      'Value' => '0053j00000A7rWLAAZ',
    ],
  ],
  'Answers' => [
    0 => [
      'QuestionId' => 'a3Df0000000qI63EAE',
      'Values' => [
        0 => 'Reclamação',
      ],
    ],
    1 => [
      'QuestionId' => 'a3Df0000000qHvsEAE',
      'Values' => [
        0 => 'Solicitação de Serviço aberta por qualquer integração web',
      ],
    ],
    2 => [
      'QuestionId' => 'a3Df0000000qHwREAU',
      'Values' => [
        0 => 'Web',
      ],
    ],
  ],
]");
           
    $data_string = json_encode($params);
    
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Accept: application/json',
        'Content-type: application/json',
        'Authorization:' . $sf_auth,
    ));

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
    //execute post
    $result = curl_exec($ch);
    
    //close connection
    curl_close($ch);
    
    $response = curl_exec($ch);
    
    echo curl_errno($ch) . '<br/>';
    echo curl_error($ch) . '<br/>';

    var_dump($result);
    
?>

更改后,现在就可以了

如果任何使用Remedyforce的人需要一个基础来开始这种集成,我将留下这段代码

<?php 
    // Inicia
$url = 'https://MYURL--trnmnto.my.salesforce.com/services/apexrest/BMCServiceDesk/1.0/ServiceRequest/';
$ch = curl_init($url);

$sf_auth = 'Bearer XXXXXXXXX';

$params = ("{\"Fields\":[{\"Name\":\"requestDefinitionId\",\"Value\":\"a3Hf0000000lTNaEAM\"},{\"Name\":\"client\",\"Value\":\"0053j00000A7rWLAAZ\"}],\"Answers\":[{\"QuestionId\":\"a3Df0000000qI63EAE\",\"Values\":[\"Reclama\u00e7\u00e3o\"]},{\"QuestionId\":\"a3Df0000000qHvsEAE\",\"Values\":[\"Solicita\u00e7\u00e3o de Servi\u00e7o aberta por qualquer integra\u00e7\u00e3o web\"]},{\"QuestionId\":\"a3Df0000000qHwREAU\",\"Values\":[\"Web\"]}]}");
           
    $data_string = json_encode($params);
    
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Accept: application/json',
        'Content-type: application/json',
        'Authorization:' . $sf_auth,
    ));
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
    //execute post
    $result = curl_exec($ch);
    //close connection
    curl_close($ch);
    
    $response = json_decode(curl_exec($ch), true);

    echo $response;
    
    echo curl_errno($ch) . '<br/>';
    echo curl_error($ch) . '<br/>';

    var_dump($result);
    
?>


那么您的
$params
对象必须与下面的格式相匹配,它目前甚至还没有接近。它实际上必须编码为JSON,这不是
http\u build\u query
所做的。我更改了删除http_build_查询并对json数据使用json编码。但是零效果!当然,仅仅是JSON编码(一开始仍然是一种完全不同的数据结构)并不能解决问题。您需要修复$params中的数据结构,以匹配所需JSON的结构。