Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用php curl发送XML soap请求_Php_Web Services_Curl_Soap - Fatal编程技术网

如何使用php curl发送XML soap请求

如何使用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

我正在使用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: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>';