当尝试从apache 2.4服务器(Centos 7)上部署的php代码向salesforce api执行soap请求时,我遇到一些问题。
我的soap请求在运行php内置服务器(php -S 0.0.0.0:8080)的localhost上正常工作。当我在远程Centos主机上启动内置php服务器(php -S 0.0.0.0:8080 -c path-to-my-ini / php.ini)时,它也可以正常工作。但不适用于apache。问题是我没有收到任何错误响应,它只返回状态为200的null,所以我无法进行深度调试。
这是我的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;
}
这是我的执行肥皂请求的控制器功能:
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 - Extension permettant les echanges clients/serveurs SOAP.
extension = soap.so
我做错什么了吗?
答案 0 :(得分:0)
我们终于弄清楚了。 为什么它可以与php内置服务器一起使用而不能在apache上使用,原因是我们在composer.json
中禁用了tls和ssl。"config": {
"process-timeout": 0,
"sort-packages": true,
"secure-http" : true,
"disable-tls" : false
},
并且由于php内置服务器使用composer.json,因此它绕过了tls / ssl验证。 因此,我们只需将Salesforce证书安装在我们的apache服务器上,并设置肥皂使用它即可,并且现在可以使用。
感谢您的答复!