PHP SoapClient возвращает статус 200 без ответа - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть некоторые проблемы при попытке выполнить запрос мыла к api salesforce из кода php, развернутого на сервере apache 2.4 (Centos 7).

Мой запрос мыла отлично работает на localhost, работающем с phpвстроенный сервер (php -S 0.0.0.0:8080).Он также отлично работает, когда я запускаю встроенный php-сервер на своем удаленном хосте Centos (php -S 0.0.0.0:8080 -c path-to-my-ini / php.ini).Но не работает на Apache.Проблема в том, что я не получаю никакого сообщения об ошибке, он просто возвращает ноль со статусом 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;
    }

А вот моя функция контроллера, которая выполняет запрос мыла:

 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 голосов
/ 13 мая 2019

Наконец-то мы это выяснили. Причина, по которой он работает со встроенным сервером php и не работает на apache, заключалась в том, что мы отключили tls и ssl в нашем composer.json

"config": {
        "process-timeout": 0,
        "sort-packages": true,
        "secure-http" : true,
        "disable-tls" : false
    },

И поскольку встроенный сервер php использует composer.json, он обходит проверки tls / ssl. Поэтому мы просто устанавливаем сертификат salesforce на наш сервер apache и настраиваем его на использование soap, и теперь он работает.

Спасибо всем за ваши ответы!

...