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

PHP Curl请求无法触发Apex REST WebService问题求助

排查PHP Curl调用Salesforce Apex REST无响应问题

我之前也碰到过类似的情况,结合你的描述,咱们一步步来定位问题:

1. 先解决307重定向遗留问题

你提到之前出现过307临时重定向,Postman默认会自动跟进重定向,但PHP Curl默认是关闭这个功能的——这很可能是请求没触达Salesforce端点的核心原因。给Curl加上重定向跟随配置:

// 允许自动跟随重定向
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
// 设置最大重定向次数,防止死循环
curl_setopt($ch, CURLOPT_MAXREDIRS, 5);

2. 开启Curl错误日志,抓请求细节

现在你看不到任何错误信息,根本不知道请求到底卡在了哪里。在curl_exec之后加上错误检查和请求详情打印,帮你定位问题:

$result = curl_exec($ch);
// 检查Curl执行层面的错误
if(curl_errno($ch)) {
    echo 'Curl执行错误: ' . curl_error($ch);
}
// 打印请求的完整元数据,比如实际返回的HTTP状态码、最终请求的URL、发送的Header等
var_dump(curl_getinfo($ch));
curl_close($ch);

通过curl_getinfo返回的内容,你可以和Postman的请求详情做对比,很快就能找到差异点。

3. 对齐Postman的Header配置

Postman自动添加了Cache-Control: no-cache和Postman-Token,虽然这些不是强制要求,但有时候Salesforce的端点会对请求的Header完整性有隐性要求。另外,手动设置Content-Length可以避免Curl自动计算时出现的偏差:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Authorization: Bearer '.$accessToken,
    'Cache-Control: no-cache',
    'Content-Length: ' . strlen($jsonDataEncoded)
));

同时别忘了确认$ret_res变量是否有有效数据——如果它是空的,发送的JSON就是空内容,也可能导致Salesforce端无日志。可以先var_dump($jsonDataEncoded)看看结果。

4. 再确认Access Token的有效性(虽然Postman能用,但多一层验证)

有时候PHP代码获取的token和Postman使用的可能不是同一个环境的?可以在PHP里打印$accessToken和Postman的对比,或者调用Salesforce的身份端点验证token:

$identityUrl = 'https://login.salesforce.com/services/oauth2/userinfo';
$ch2 = curl_init($identityUrl);
curl_setopt($ch2, CURLOPT_HTTPHEADER, array('Authorization: Bearer '.$accessToken));
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
$userInfo = json_decode(curl_exec($ch2));
var_dump($userInfo);

如果能返回用户信息,说明token是有效的。

修改后的完整代码示例

$rAuth = json_decode(file_get_contents('https://dare.net/wpsf_auth.php/'));
$accessToken = $rAuth->access_token;
$url = 'https://dev2193--tfdev.cs47.my.salesforce.com/services/apexrest/wordpress/registration';
$ch = curl_init($url);

// 先确认要发送的数据是否有效
var_dump($ret_res);
$jsonDataEncoded = json_encode($ret_res);

curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Authorization: Bearer '.$accessToken,
    'Cache-Control: no-cache',
    'Content-Length: ' . strlen($jsonDataEncoded)
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
// 开启重定向跟随
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 5);

$result = curl_exec($ch);

// 错误排查环节
if(curl_errno($ch)) {
    echo 'Curl执行错误: ' . curl_error($ch);
}
var_dump(curl_getinfo($ch));
curl_close($ch);

$resultData = json_decode($result);
var_dump($resultData);

先按这个步骤排查,重点看curl_getinfo返回的HTTP状态码和最终请求URL,应该能快速找到问题所在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 18:57:55