You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Salesforce平台RemedyForce服务请求POST调用出现类型转换报错

接口类型转换异常修复方案

核心报错触发原因

  • 最核心的致命逻辑错误:初始化$params时,直接把带PHP数组语法的纯文本字符串作为单元素传入数组,执行json_encode后生成的请求体是顶层被[]包裹的数组,数组内容是一段无意义的PHP语法字符串,与BMC Apex接口期望的顶层JSON对象(对应Apex侧Map<String, Object>类型)完全不匹配,直接触发类型转换报错。
  • curl执行逻辑存在冗余错误:在curl_close($ch)销毁句柄后,又重复调用curl_exec($ch),此时获取的响应为空,完全无法拿到接口真实返回,干扰问题定位。

接口要求的标准请求体结构

BMC RemedyForce创建服务请求的REST接口,要求顶层JSON为对象格式,包含两个一级字段:

  • Fields:数组类型,每个元素为包含Name、Value键的对象,存储服务请求基础属性值
  • Answers:数组类型,每个元素为包含QuestionId、Values键的对象,存储表单答题项内容

修正后的可运行代码

<?php 
$url = 'https://YOUR_INSTANCE.my.salesforce.com/services/apexrest/BMCServiceDesk/1.0/ServiceRequest/';
$ch = curl_init($url);
$sf_auth = 'Bearer YOUR_VALID_OAUTH_TOKEN';

// 直接构建与JSON结构对应的多维数组,禁止传入带PHP语法的字符串
$params = [
  'Fields' => [
    [
      'Name' => 'requestDefinitionId',
      'Value' => 'a3Hf0000000lTNaEAM',
    ],
    [
      'Name' => 'client',
      'Value' => '0053j00000A7rWLAAZ',
    ],
  ],
  'Answers' => [
    [
      'QuestionId' => 'a3Df0000000qI63EAE',
      'Values' => ['Reclamação'],
    ],
    [
      'QuestionId' => 'a3Df0000000qHvsEAE',
      'Values' => ['Solicitação de Serviço aberta por qualquer integração web'],
    ],
    [
      'QuestionId' => 'a3Df0000000qHwREAU',
      'Values' => ['Web'],
    ],
  ],
];

// 编码时保留非英文字符,避免乱码
$data_string = json_encode($params, JSON_UNESCAPED_UNICODE);

curl_setopt_array($ch, [
  CURLOPT_HTTPHEADER => [
    'Accept: application/json',
    'Content-type: application/json',
    'Authorization: ' . $sf_auth,
  ],
  CURLOPT_URL => $url,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => $data_string,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_TIMEOUT => 5,
  CURLOPT_CONNECTTIMEOUT => 5,
]);

$result = curl_exec($ch);
$errNo = curl_errno($ch);
$errMsg = curl_error($ch);

// 句柄销毁需放在所有curl操作完成后
curl_close($ch);

echo "Curl错误码:{$errNo}<br/>";
echo "Curl错误信息:{$errMsg}<br/>";
var_dump($result);
?>

后续排查验证要点

  • 编码完成后先打印$data_string确认:顶层结构为{}包裹的对象,而非[]包裹的数组,保证与Apex端期望的Map类型匹配
  • 检查子元素结构:Fields数组下的每个条目必须是带Name、Value键的对象,Answers数组下的每个条目必须是带QuestionId、Values键的对象,避免结构错位

内容的提问来源于stack exchange,提问作者Barcat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.25 09:24:04