1、引用nusoap.php,初始化並調用里面的call方法
require_once(ROOT_PATH . '/' . ADMIN_PATH. "/nusoap/nusoap.php");
class JR_OA{ private $url = 'http://192.168.0.3:8088/services/WorkflowService?wsdl'; //正式環境 private $type= "WSDL"; //正式環境 private $charset="utf-8"; private $WorkflowRequestInfo=array();//工作流請求信息 private $WorkflowMainTableInfo=array();// 主表信息 private $WorkflowDetailTableInfo=array();//明細表信息 private $workflowBaseInfo=array();//明細表信息 private $MainWorkflowRequestTableField=array();//明細表信息
public function doCreateWorkflowRequest($orderinfo_data,$ordergoods_data){ $this->setworkflowBaseInfo(); $this->setWorkflowMainTableInfo($orderinfo_data); $this->setWorkflowDetailTableInfo($ordergoods_data); $this->setWorkflowRequestInfo(); $param=array( 'in0'=>$this->WorkflowRequestInfo, 'in1'=> $this->userid,//賬戶 ); $res=$this-> getver("doCreateWorkflowRequest",$param); dump($res);exit; return $res; }
//webservice調用 function getver($option,$param) { $client = new nusoap_client($this->url,$this->type); if($err = $client->getError()) exit($err); $client->soap_defencoding = $this->charset; $client->decode_utf8 = false; $client->xml_encoding = $this->charset; $result = $client->call($option,$param,'','',false,true); return $result; }
}
遇到的問題
1、string(74) "phpType is struct, but value is not an array: see debug output for details"
解決辦法:對於要求傳遞的數組,必須是用$arr=array('name'=>'1111') 直接賦值,不能使用$arr[''name]="111",即使數組里面套數組,也每個必須用array方法賦值
2、php調用java webservice接口 返回null( 我們要用php調用java的OA接口,按照他們的數據要求生成了xml,但java那邊還是一直收不到數據)
解決:
1、下載一個工具 SOAPUI,建立SOAP項目.
2、創建完之后,在左邊欄會出現一系列你可以調用的方法
3、選擇你要使用的方法,點擊“Request”,在右邊框就會出現,正確的xml格式
4、這時我終於找到問題所在,原來他們使用了命名空間。所以我在php生成xml的時候,也加上了命名空間。
5、大功告成。