簡體   English   中英

如何使用php curl發送XML soap請求

[英]How to send XML soap request using php curl

我正在使用php curl通過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:Serverjava.lang.ClassCastException:無法將java.lang.String強制轉換為javax.xml.bind.JAXBElement

請檢查以下代碼。 效果很好。

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>';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM