PHP SoapClient返回状态200,没有任何响应

时间:2019-04-26 14:20:45

标签: php apache soap salesforce soap-client

当尝试从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

我做错什么了吗?

1 个答案:

答案 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服务器上,并设置肥皂使用它即可,并且现在可以使用。

感谢您的答复!