PHP SoapClient 返回状态 200 没有任何响应
PHP SoapClient returning status 200 without any response
尝试从部署在 apache 2.4 服务器 (Centos 7) 上的 php 代码向销售人员 api 执行 soap 请求时遇到一些问题。
我的 soap 请求在本地主机 运行 php 内置服务器 (php -S 0.0.0.0:8080) 上运行良好。当我在我的远程 Centos 主机上启动内置 php 服务器时,它也能正常工作 (php -S 0.0.0.0:8080 -c path-to-my-ini/php.ini)。但不适用于apache。问题是我没有得到任何错误响应,它只是 returns 状态为 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;
}
这是我执行 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 - Extension permettant les echanges clients/serveurs SOAP.
extension = soap.so
我是不是做错了什么?
我们终于搞清楚了。
它与 php built-in 服务器一起工作而在 apache 上不起作用的原因是我们在 composer.json
中禁用了 tls 和 ssl
"config": {
"process-timeout": 0,
"sort-packages": true,
"secure-http" : true,
"disable-tls" : false
},
并且由于 php built-in 服务器使用 composer.json,它绕过了 tls/ssl 验证。
所以我们只需在我们的 apache 服务器上安装 salesforce 证书并设置 soap 来使用它,它现在可以工作了。
感谢大家的回复!
尝试从部署在 apache 2.4 服务器 (Centos 7) 上的 php 代码向销售人员 api 执行 soap 请求时遇到一些问题。
我的 soap 请求在本地主机 运行 php 内置服务器 (php -S 0.0.0.0:8080) 上运行良好。当我在我的远程 Centos 主机上启动内置 php 服务器时,它也能正常工作 (php -S 0.0.0.0:8080 -c path-to-my-ini/php.ini)。但不适用于apache。问题是我没有得到任何错误响应,它只是 returns 状态为 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;
}
这是我执行 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 - Extension permettant les echanges clients/serveurs SOAP.
extension = soap.so
我是不是做错了什么?
我们终于搞清楚了。 它与 php built-in 服务器一起工作而在 apache 上不起作用的原因是我们在 composer.json
中禁用了 tls 和 ssl"config": {
"process-timeout": 0,
"sort-packages": true,
"secure-http" : true,
"disable-tls" : false
},
并且由于 php built-in 服务器使用 composer.json,它绕过了 tls/ssl 验证。 所以我们只需在我们的 apache 服务器上安装 salesforce 证书并设置 soap 来使用它,它现在可以工作了。
感谢大家的回复!