【问题标题】:PHP SoapClient returning status 200 without any responsePHP SoapClient 返回状态 200 没有任何响应
【发布时间】: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


【解决方案1】:

我们终于弄明白了。 它与 php 内置服务器一起使用而在 apache 上不起作用的原因是我们在 composer.json 中禁用了 tls 和 ssl

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

而且由于 php 内置服务器使用 composer.json,它绕过了 tls/ssl 验证。 所以我们只需在我们的 apache 服务器上安装 salesforce 证书并设置 soap 使用它,它现在可以工作了。

感谢大家的回复!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-09
    • 2019-12-24
    • 2015-09-30
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 2022-12-02
    • 1970-01-01
    相关资源
    最近更新 更多