如何使用php curl发送XML soap请求
我正在使用php通过soap发送请求以获取java异常。 当我请求响应时,我得到了错误。我在这方面做了很多尝试,但问题并没有解决如何使用php curl发送XML soap请求,php,web-services,curl,soap,Php,Web Services,Curl,Soap,我正在使用php通过soap发送请求以获取java异常。 当我请求响应时,我得到了错误。我在这方面做了很多尝试,但问题并没有解决 $soap_request = "<?xml version=\"1.0\"?>"; $soap_request .= "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"; $soap_request .= " <soap:B
$soap_request = "<?xml version=\"1.0\"?>";
$soap_request .= "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n";
$soap_request .= " <soap:Body>\n";
$soap_request .= " <RevodocLead xmlns='http://localhost/'>\n";
$soap_request .= " <inode>\n";
$soap_request .= " <version>1.0</version>\n";
$soap_request .= " <sourceuserid>test@test.in</sourceuserid>\n";
$soap_request .= " <sourceid>18641254455</sourceid>\n";
$soap_request .= " <dealercode>1458445284</dealercode>\n";
$soap_request .= " <created>18-12-2015 13:45EST</created>\n";
$soap_request .= " <browser>Android Browser</browser>\n";
$soap_request .= " <os>Macintosh</os>\n";
$soap_request .= " <agent>atinek@gmail.com</agent>\n";
$soap_request .= " <product>mortgage-renewal</product>\n";
$soap_request .= " <name>success</name>\n";
$soap_request .= " <address>success</address>\n";
$soap_request .= " <email>success</email>\n";
$soap_request .= " <phone>success</phone>\n";
$soap_request .= " <propertyvalue>325000</propertyvalue>\n";
$soap_request .= " <mortgage>300000</mortgage>\n";
$soap_request .= " <referralcode>F3S2A2</referralcode>\n";
$soap_request .= " <note>value</note>\n";
$soap_request .= " <futurecontact>yes</futurecontact>\n";
$soap_request .= " </inode>\n";
$soap_request .= " </RevodocLead>\n";
$soap_request .= " </soap:Body>\n";
$soap_request .= "</soap:Envelope>";
$header = array(
"Content-type: text/xml;charset=\"utf-8\"",
"Accept: text/xml",
"Cache-Control: no-cache",
"Pragma: no-cache",
"SOAPAction: myactionMethod",
"Content-length: ".strlen($soap_request),
);
$soap_do = curl_init();
curl_setopt($soap_do, CURLOPT_URL, $url );
curl_setopt($soap_do, CURLOPT_HEADER, false);
curl_setopt($soap_do, CURLOPT_CONNECTTIMEOUT, 100);
curl_setopt($soap_do, CURLOPT_TIMEOUT, 100);
curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, true );
curl_setopt($soap_do, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($soap_do, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($soap_do, CURLOPT_POST, true );
curl_setopt($soap_do, CURLOPT_POSTFIELDS, $soap_request);
curl_setopt($soap_do, CURLOPT_HTTPHEADER, $header);
if(curl_exec($soap_do) === false) {
$err = 'Curl error: ' . curl_error($soap_do);
curl_close($soap_do);
print $err;
} else {
$result = curl_exec($soap_do);
echo '<pre>';
print_r($result);
curl_close($soap_do);
//print 'Operation completed without any errors';
}
$soap_request=”“;
$soap\u请求=“\n”;
$soap\u请求=“\n”;
$soap\u请求=“\n”;
$soap\u请求=“\n”;
$soap\u请求=“1.0\n”;
$soap_请求=”test@test.in\n”;
$soap_request.=“1864125445\n”;
$soap_request.=“1458445284\n”;
$soap_请求=“18-12-2015 13:45东部时间\n”;
$soap\u请求=“Android浏览器\n”;
$soap\u请求=“Macintosh\n”;
$soap_请求=”atinek@gmail.com\n”;
$soap\u请求=“抵押贷款续期\n”;
$soap\u请求=“成功\n”;
$soap\u请求=“成功\n”;
$soap\u请求=“成功\n”;
$soap\u请求=“成功\n”;
$soap\u请求=“325000\n”;
$soap\u请求=“300000\n”;
$soap_请求=“F3S2A2\n”;
$soap\u请求=“值\n”;
$soap\u请求=“是\n”;
$soap\u请求=“\n”;
$soap\u请求=“\n”;
$soap\u请求=“\n”;
$soap_请求=“”;
$header=数组(
“内容类型:text/xml;字符集=\“utf-8\”,
“接受:文本/xml”,
“缓存控制:无缓存”,
“Pragma:无缓存”,
“SOAPAction:myactionMethod”,
“内容长度:”.strlen($soap_请求),
);
$soap\u do=curl\u init();
curl_setopt($soap_do,CURLOPT_URL,$URL);
curl_setopt($soap_do,CURLOPT_头,false);
curl_setopt($soap_do,CURLOPT_CONNECTTIMEOUT,100);
curl_setopt($soap_do,CURLOPT_TIMEOUT,100);
curl_setopt($soap_do,CURLOPT_RETURNTRANSFER,true);
curl_setopt($soap_do,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($soap_do,CURLOPT_SSL_VERIFYHOST,false);
curl_setopt($soap_do,CURLOPT_POST,true);
curl\u setopt($soap\u do,CURLOPT\u POSTFIELDS,$soap\u request);
curl_setopt($soap_do,CURLOPT_HTTPHEADER,$header);
if(curl\u exec($soap\u do)==false){
$err='Curl error:'.Curl\u error($soap\u do);
卷曲关闭($soap\u-do);
打印$err;
}否则{
$result=curl\u exec($soap\u do);
回声';
打印(结果);
卷曲关闭($soap\u-do);
//打印“操作已完成,无任何错误”;
}
我犯了一个错误
soap:Serverjava.lang.ClassCastException:java.lang.String不能为
转换为javax.xml.bind.JAXBElement
请检查下面的代码。它工作得很好
class RevodocLeadSoapClient扩展了SoapClient{
函数构造($wsdl$options){
父项::_构造($wsdl,$options);
$this->server=newsoapserver($wsdl,$options);
}
公共函数uu doRequest($request,$location,$action,$version){
$result=parent::u doRequest($request、$location、$action、$version);
返回$result;
}
函数\uuu另一个请求($call,$params){
$location='1https://www.t1.revodoc.com/ws/services/RevoLeadWebService';
$action='1http://localhost/“.$call;
$request='1
';
$request.=$params;
$request.='
';
$result=$this->_doRequest($request,$location,$action,'1');
返回$result;
}
}
//创建新的SOAP客户端
$wsdl=https://www.t1.revodoc.com/ws/services/RevoLeadWebService?wsdl';
$client=new RevodocLeadSoapClient($wsdl,数组(
'cache\u wsdl'=>wsdl\u cache\u NONE,
'cache_ttl'=>86400,
'trace'=>true,
“例外情况”=>true,
));
$operations=“RevodocLead”;
$soap_请求=“”;
$soap_请求=“1.0”;
$soap_请求=”test@test.in";
$soap_request.=“1864125445”;
$soap_请求=“1458445284”;
$soap_请求=“18-12-2015 13:45东部时间”;
$soap_请求=“Android浏览器”;
$soap_请求=“Macintosh”;
$soap_请求=”atinek@gmail.com";
$soap_请求=“抵押贷款续期”;
$soap_请求=“成功”;
$soap_请求=“成功”;
$soap_请求=“成功”;
$soap_请求=“成功”;
$soap_请求=“325000”;
$soap_请求=“300000”;
$soap_请求=“F3S2A2”;
$soap_请求=“值”;
$soap_请求=“是”;
$soap_请求=“”;
//提出请求
试一试{
$request=$client->\u另一个请求($operations,$soap\u request);
}捕获(SoapFault$e){
echo“Last request:.htmlentities($client->\uu getLastRequest())”;
退出();
}
//打印响应#反转录反应
echo“”,htmlentities($request),“”;
我想您必须在问题中添加$header
和$soap\u请求
,由于该错误非常清楚地表明存在一些意外的字符串,其中需要一个xml元素hi hexere,因此我添加了$header和$soap\u requestHi jayson,在我的情况下authenticationin not required您可以直接调用\u soapCall
方法,而无需SoapHeader
和\u setSoapHeaders
“SOAPAction:myactionMethod”,在标题数组中定义。$wsdl='mysite?wsdl';$client=新的SoapClient($wsdl);$soap_请求['inode']=array('version'=>'1.0','sourceuserid'=>'test@test.in“,”sourceid'=>”1564435843584“,”dealercode'=>”41358-21“,”created'=>”18-04-2015 13:45EST“,”browser'=>”chrome“,”os'=>”linux“)$result=$client->soapCall(“RevodocLead”,$soap_请求);print_r($result);?>致命错误:未捕获的SoapFault异常:[soap:Server]java.lang.NullPointerException位于/var/www/html/webservice/04.php:16堆栈跟踪:#0/var/www/html/webservice/04.php(16):SoapClient->soapCall(“RevodocLead”,Array)#1{main}在第16行的/var/www/html/webservice/04.php中抛出
class RevodocLeadSoapClient extends SoapClient {
function __construct($wsdl, $options) {
parent::__construct($wsdl, $options);
$this->server = new SoapServer($wsdl, $options);
}
public function __doRequest($request, $location, $action, $version) {
$result = parent::__doRequest($request, $location, $action, $version);
return $result;
}
function __anotherRequest($call, $params) {
$location = 'https://www.t1.revodoc.com/ws/services/RevoLeadWebService';
$action = 'http://localhost/'.$call;
$request = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:typens="https://secure.maventa.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<SOAP-ENV:Body>
<RevodocLead xmlns="http://localhost/">';
$request .= $params;
$request .= '</RevodocLead>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>';
$result =$this->__doRequest($request, $location, $action, '1');
return $result;
}
}
// Create new SOAP client
$wsdl = 'https://www.t1.revodoc.com/ws/services/RevoLeadWebService?wsdl';
$client = new RevodocLeadSoapClient($wsdl, array(
'cache_wsdl' => WSDL_CACHE_NONE,
'cache_ttl' => 86400,
'trace' => true,
'exceptions' => true,
));
$operations = "RevodocLead";
$soap_request .= "<inode>";
$soap_request .= "<version>1.0</version>";
$soap_request .= "<sourceuserid>test@test.in</sourceuserid>";
$soap_request .= "<sourceid>18641254455</sourceid>";
$soap_request .= "<dealercode>1458445284</dealercode>";
$soap_request .= "<created>18-12-2015 13:45EST</created>";
$soap_request .= "<browser>Android Browser</browser>";
$soap_request .= "<os>Macintosh</os>";
$soap_request .= "<agent>atinek@gmail.com</agent>";
$soap_request .= "<product>mortgage-renewal</product>";
$soap_request .= "<name>success</name>";
$soap_request .= "<address>success</address>";
$soap_request .= "<email>success</email>";
$soap_request .= "<phone>success</phone>";
$soap_request .= "<propertyvalue>325000</propertyvalue>";
$soap_request .= "<mortgage>300000</mortgage>";
$soap_request .= "<referralcode>F3S2A2</referralcode>";
$soap_request .= "<note>value</note>";
$soap_request .= "<futurecontact>yes</futurecontact>";
$soap_request .= "</inode>";
// Make the request
try {
$request = $client->__anotherRequest($operations, $soap_request);
} catch (SoapFault $e ){
echo "Last request:<pre>" . htmlentities($client->__getLastRequest()) . "</pre>";
exit();
}
//Print Response. #RevodocLeadResponse
echo '<pre><b>', htmlentities($request), '</b></pre>';