如果要将对象发送到Web方法以将其用作prameter: 示例:发送一个对象,该对象将在服务器中表示为类,如下所示:
$creditCard = new stdClass();
$creditCard->number="705";
$creditCard->expiryDate="03/10/2019";
$creditCard->controlNumber=9;
$param = array("creditCard" => $creditCard);
$Response = $client->__soapCall('valider', array($param));
你不会得到服务器中CreditCard类的任何属性来工作,每次你执行creditClass.getNumber((或尝试使用访问器时,你都会得到一个空指针错误,因为你的对象没有真正创建。
要解决此问题,您必须修改服务器 Web 服务而不是客户端:您必须添加简单的 JAX-WS 注释@webParam:
public String valider(@WebParam(name = "creditCard")CreditCard creditCard){ ... }
你的PHP soap客户端代码非常简单:(如果你想要更高的安全性,你必须对你的凭据进行编码或使用其他方式进行身份验证,如摘要式身份验证或其他jax ws安全实现(
try {
$opts = array (
'http' => [
'header' => "username: myrealnamern".
'password: pass1myrealpassword']
);
$par= array(
'trace' => 1,
'exceptions' =>0,
'soap_version' => SOAP_1_1,
'connection_timeout' => 1800,
'stream_context' => stream_context_create($opts),
);
$client = new SoapClient($wsdl,$par);
//...... and call your service method as you do