我正在尝试与eWay服务器通信,并且一切正常,直到我们最终需要切换到不同的API。问题是SoapClient正在为主体(包括身份验证)创建一个不同的命名空间,然后从主体创建,这显然不会给我任何结果。相反,我让eWay的服务器说它必须有身份验证信息。
这是我的代码:
$client = new SoapClient($url.'?WSDL', array('trace'=>TRUE));
// Set our SOAP Headers for authentication
$header_body = array(
'eWAYCustomerID' => $gateway['customer_id'],
'Username' => $gateway['username'],
'Password' => $gateway['password']
);
$header_var = new SoapVar($header_body, SOAP_ENC_OBJECT);
$header = new SOAPHeader('http://www.eway.com.au/gateway/managedpayment', 'eWAYHeader', $header_body);
//$client->__setSoapHeaders($header);
try {
$response = $client->__soapCall($action, $xml, null, $header);
} catch (SoapFault $e)
{
echo 'SOAP Fault: '. $e->getMessage()."<br>\n";
}
正如你所看到的,我已经尝试过使用和不使用SoapVar作为标题,但都没有运气。
这是正在创建的XML请求:
<soap-env:envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="https://www.eway.com.au/gateway/managedpayment" xmlns:ns2="http://www.eway.com.au/gateway/managedpayment">
<soap-env:header>
<ns2:ewayheader>
<ewaycustomerid>87654321</ewaycustomerid>
<username>test@eway.com.au</username>
<password>test123</password>
</ns2:ewayheader>
</soap-env:header>
<soap-env:body>
<ns1:createcustomer>...</ns1:createcustomer>
答案 0 :(得分:0)
这可能是一个显而易见的问题,但您是否尝试在SoapVar()调用中指定typename和type命名空间?