【发布时间】:2019-04-26 14:20:44
【问题描述】:
我在尝试从部署在 apache 2.4 服务器 (Centos 7) 上的 php 代码向 salesforce api 执行 soap 请求时遇到一些问题。
我的soap请求在使用php内置服务器(php -S 0.0.0.0:8080)运行的本地主机上运行良好。当我在远程 Centos 主机(php -S 0.0.0.0:8080 -c path-to-my-ini/php.ini)上启动内置 php 服务器时,它也可以正常工作。但不适用于apache。问题是我没有收到任何错误响应,它只是返回 null 状态为 200,所以我无法深入调试。
这是我的 Soap 客户端配置:
public function getClient(){
ini_set('soap.wsdl_cache_enabled',0);
ini_set('soap.wsdl_cache_ttl',0);
$wsdl = PUBLIC_PATH.'/wsdl-metadata.xml'; // le fichier wsdl
// creation de l'objet SOAP avec proxy et trace à TRUE
$service = new SoapClient($wsdl, array( 'proxy_host' => "xxx.proxy.xxx.fr",
'proxy_port' => 3130,
'trace' => 1) );
return $service;
}
这是执行soap请求的控制器函数:
public function editMock( Request $request, Response $response, $arg){
$token = base64_decode($request->getQueryParams()['token']);
$explodeToken = explode ('!', $token);
$sandboxUrl = $this->getSandboxUrl($arg['sandbox']);
$serviceName = $_POST['service'];
$valueUseMock = $_POST['isMock'];
$soapService = new SoapService($token);
$client = $soapService->getClient();
$soapService->updateServiceMock($serviceName, $valueUseMock);
$xmlReq = $soapService->getXml();
//url
$location = "https://".$sandboxUrl."/services/Soap/m/44.0/" . $explodeToken[0];
// appel soap avec la requete créée
return $client->__doRequest($xmlReq, $location, null, 44, 0);
}
请注意,我已经在我的 php_ini 中激活了 soap
; SOAP - Extension permettant les echanges clients/serveurs SOAP.
extension = soap.so
我做错了吗?
【问题讨论】:
-
我不知道它在 Centos 上如何,但在 Ubuntu、cli、fpm 和 Apache 上都有不同的 php.ini 文件。确保您编辑的是正确的。
-
也许响应的主体应该是空的。你检查响应头了吗?
-
@Magnus 我将我的 apache 和我的 cli 设置为使用相同的 php.ini 文件。由于它与 cli 一起工作,因此问题不可能来自 ini 文件。
-
@blupointmedia no 响应不为空。在我的 centos 服务器上使用 php cli 而不是 apache 时,我得到了一个非空响应
-
我不确定 Apache 将如何更改在 PHP 中发出的 API 请求的结果。 Soap 请求不通过 Web 服务器。它位于 PHP 和 Soap 服务器之间。您是否检查过错误日志以查看是否有任何错误?
标签: php apache soap salesforce soap-client