我一直试图从我的 nginx服务器用php 向asp.net webservice拨打肥皂。目前的php版本是5.5。我们正在与之通信的服务使用https和(出于测试目的)我们的服务器暂时使用http。 它们位于防火墙后面,相关的IP地址已列入白名单。我正在使用php内置的soapclient来发出请求。 当我在浏览器中访问wsdl链接或者如果我在php中打印出来时,我可以看到xml,这样我就可以确认该部分是否正常工作。我尝试使用SoapUI,但他们不支持SNI。 我已经创建了一个Web服务方签署的ssl密钥,然后我将其与我的私钥组合成一个.pfx证书,这样我就可以用来创建帐户的soap调用。当我尝试使用soapcall创建一个帐户时,我收到错误soapfault:forbidden
以下是我创建soapclient的代码:
//页面顶部的设置
ini_set("soap.wsdl_cache_enabled", "0");
ini_set('default_socket_timeout', 180);
$this->options = array(
'local_cert'=> file_get_contents($this->smartcard_cert),
'passphrase'=> $this::pass,
'trace' => 1,
'exceptions' => 1,
'keep_alive' => 0,
'connection_timeout' => 20
);
$this->soap = new SoapClient($this::protected_wsdl, $this->options);
这是我打电话的功能:
public function create_current_acccount_get($reference = 233423) {
$values = $this->transaction_handler->createCurrentAccount($reference);
try {
$response = $this->soap->CreateCurrentAccount($values);
}
catch(Exception $e){
$response = $e->getMessage();
}
log_message('error', print_r("code4554 ".$response, TRUE));
$this->response($response);
}
我无法遗憾地显示xml,因为它是保密的。 我知道nginx使用.pem而不是.pfx,但webservice只接受.pfx。
如果有人知道为什么禁止使用肥皂泡沫会导致我永远感到高兴,因为这已经困扰了我4天而且我无法提出解决方案。
答案 0 :(得分:0)
https://github.com/goetas-webservices/soap-client完全是PHP SOAP客户端,不依赖于PHP的ext-soap
。
它已经支持PSR7,多客户端,并允许通过IDE为类型提示生成类。
https://github.com/goetas-webservices/soap-client-demo是一个演示项目,它允许您了解如何使用客户端来使用通用的SOAP Web服务。
由于是多客户端,您可以使用Guzzle(或任何https://github.com/php-http兼容客户端)选项来提供传输层