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

PHP对接Dynamic 365提交记录后如何获取返回的记录GUID

问题原因

Dynamics 365 Web API默认创建记录(POST请求)成功后会返回204 No Content状态码,响应体为空,所以你直接读取$response无法拿到内容。想要获取新创建记录的GUID,有两种常用实现方案:


方案1:从响应头提取GUID(性能最优)

创建成功后响应头会自带OData-EntityId字段,值为新记录的完整资源路径,其中包含GUID,无需额外配置返回实体内容,性能开销更低。
修改后代码示例:

$curl = curl_init();

$URL_String = $_SESSION['crm365']['rest_api_url'] . 'my individual entity';
curl_setopt_array($curl, array(
  CURLOPT_URL => $URL_String,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_SSL_VERIFYPEER => false,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST', 
  CURLOPT_POSTFIELDS => json_encode($add_indivudual),
  // 开启获取响应头
  CURLOPT_HEADER => true,
  CURLOPT_HTTPHEADER => array(
    'OData-MaxVersion: 4.0',
    'OData-Version: 4.0',
    'Content-Type: application/json',
    'Accept: application/json',
    // 注意确认token格式,必须拼接Authorization: Bearer前缀
    'Authorization: Bearer ' . $_SESSION['crm365']['access_token']
  ),
));

$response = curl_exec($curl);
// 拆分响应头和响应体
$header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
$headers = substr($response, 0, $header_size);

// 正则提取OData-EntityId中的GUID
preg_match('/OData-EntityId: .*\((.*?)\)/i', $headers, $matches);
$new_record_guid = $matches[1] ?? '';

curl_close($curl);

方案2:配置请求返回创建的实体内容

在请求头中添加Prefer: return=representation,请求成功后响应体就会返回完整的实体数据,直接解析即可拿到GUID和其他字段值,适合需要同时获取多个新生成字段的场景。
修改后代码示例:

$curl = curl_init();

$URL_String = $_SESSION['crm365']['rest_api_url'] . 'my individual entity';
curl_setopt_array($curl, array(
  CURLOPT_URL => $URL_String,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_SSL_VERIFYPEER => false,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST', 
  CURLOPT_POSTFIELDS => json_encode($add_indivudual), 
  CURLOPT_HTTPHEADER => array(
    'OData-MaxVersion: 4.0',
    'OData-Version: 4.0',
    'Content-Type: application/json',
    'Accept: application/json',
    // 新增Prefer头要求接口返回创建的实体内容
    'Prefer: return=representation',
    // 注意补全Authorization前缀
    'Authorization: Bearer ' . $_SESSION['crm365']['access_token']
  ),
));

$response = curl_exec($curl);
$response_data = json_decode($response, true);
// 实体主键字段格式通常为「实体名+id」,例如实体为my_individual,主键就是my_individualid,可根据实际情况调整
$new_record_guid = $response_data['my_individualid'] ?? '';

curl_close($curl);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:06:02