1. 程式人生 > >PHP 呼叫Java WebService

PHP 呼叫Java WebService

Java開發的Webservice 介面引數熟String型別的 第三方為php呼叫。

-<xsd:element name="EmmResut">
-<xsd:complexType>
-<xsd:sequence>
	<xsd:element name="string" type="xsd:string" nillable="true" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>

以上是java webservice的部分內容。引數是傳入string型別 其實是json的字串。
PHP中正常呼叫都是使用:

$client = new SoapClient($WSDL_URL);
1、$client->FunctionName($param1,$param2);
2、$client->__soapCall("FunctionName",array($param1,$param2));
3、$client->__soapCall("FunctionName",array("param1"=>$param1,"param2"=>$param2));

但是這樣呼叫 總是返回 空指標異常。
SoapClient正常使用方法

解決方法:

header("Content-type: text/html; charset=utf-8");  
$webservice_url = "XXXXXXXXXX/service/IWoCheck?wsdl";
$client = new SoapClient($webservice_url);

$time_ago = microtime(true);
$param = array('PK_POINTCHECK' =>'1001A110000000B39UV1','PK_POINTCHECK_B' => '1001A110000000B39UV2', 'PK_PCUSER' => 'Y14050801','PK_PCRESULT'=>'001A4100000000LUQBI','PCMEAS_RESULT'=>'webservice');
$json['string']=json_encode($param);
print_r($json);
try{
    $arr = $client->__soapCall('EmmResut', array($json));
}catch(Exception $e){
    $arr = $e->getMessage();    
}
$time_end = microtime(true);
echo 'webservice執行時間差為:'.($time_end-$time_ago).'s<br>';
print_r($arr);

指定下引數名稱 因為wsdl中:

<xsd:element name="string" type="xsd:string" nillable="true" minOccurs="0"/>

解決靈感來源於:
PHP呼叫Java Webservice