PHP SoapClient में SOAP प्रतिक्रिया के आरंभ और अंत में संलग्न अनचाहे स्ट्रिंग्स




xml web-services (3)

मैं सोप एपीआई सर्वर से अनुरोध प्राप्त करने का प्रयास करते समय निम्न php कोड निष्पादित कर रहा हूं

try {
    $soap = new SoapClient($wsdl, $options);
    $data = $soap->GetXYZ($params);
}
catch(Exception $e) {
    $Lastresponse = $soap->__getLastResponse();
}

मुझे मिला था "लगता है जैसे हमें कोई XML दस्तावेज़ नहीं मिला" प्रतिक्रिया कोड

लेकिन जब मैं कैच ब्लॉक में $ अंतिम पावरप्रेमी चर को देखा, तो मैंने इसे नीचे पाया:

------=_Part_1134075_393252946.1482317378966 Content-Type: application/xop+xml; charset=utf-8; type="text/xml" <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Header/> <SOAP-ENV:Body> ......all valid data ... </SOAP-ENV:Body> </SOAP-ENV:Envelope> ------=_Part_1134075_393252946.1482317378966--

नोट: मैं उपयोग कर रहा हूँ $ विकल्प पैरामीटर है:

$options = array(
    'uri'=>'http://schemas.xmlsoap.org/soap/envelope/',
    //'style'=>SOAP_RPC,
    //'use'=>SOAP_ENCODED,
    'soap_version'=>SOAP_1_1,
    'cache_wsdl'=>WSDL_CACHE_NONE,
    'connection_timeout'=>15,
    'trace'=>true,
    'encoding'=>'UTF-8',
    'exceptions'=>true
);

हालांकि मैंने XML को पार्स करने के लिए एक वैकल्पिक हल किया है, क्या किसी के पास उन अतिरिक्त---- पार्ट बिट्स के बारे में कोई विचार है? क्या कुछ है जो मैं गलत कर रहा हूँ?


नीचे क्वेरी का उपयोग करने का प्रयास करने के लिए आपको अनुरोध करना

            $headers = array(
            "POST: ".url." HTTP/1.1",
            "Host: ".domain."",
            "Accept-Encoding: gzip,deflate",
            "Content-type: text/xml;charset=UTF-8",
            "SOAPAction: \"http://tempuri.org/wsdlurl/methodname\"",
            "Connection: Keep-Alive",
            "Content-length:".strlen($xml),
            "User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
            "
            )

    $url = your url;
    $ch = curl_init();      
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_ENCODING, '');
    curl_setopt($ch, CURLOPT_POSTFIELDS, $options); // the SOAP request
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);     
    $response = curl_exec($ch);
    $err = curl_error($ch);
    $doc = new DOMDocument();
    $doc->loadXML( $response );     
    $authKey = $doc->getElementsByTagName( "fieldname" );

आप अपवाद को पकड़ने के लिए हैं:

SoapClient :: SoapClient () एक E_ERROR त्रुटि उत्पन्न करेगा यदि स्थान और uri विकल्प गैर- WSDL मोड में प्रदान नहीं किए गए हैं।

एक सोपफॉल्ट अपवाद अगर wsdl यूआरआई लोड नहीं किया जा सकता है फेंक दिया जाएगा।


उन -----Part वस्तु को समझाया गया बहुभाषी संदेशों में सीमा को समझाया और आरएफसी 2387 में परिभाषित किया गया

एक जांच के बाद, ऐसा लगता है कि सोपक्लाइंट मल्टीपार्ट संदेशों को पार्स करने में असमर्थ है, यही कारण है कि आपको यह अपवाद मिला

समाधान को रेजॉक्स या अन्य स्ट्रिंग फ़ंक्शंस के साथ XML सामग्री निकालने के लिए SoapClient का विस्तार करना है। यहां इस पृष्ठ से एक उदाहरण है:

class MySoapClient extends SoapClient {
    public function __doRequest($request, $location, $action, $version, $one_way = 0) { 
        $response = parent::__doRequest($request, $location, $action, $version, $one_way);
        $start = strpos($response,'<?xml'); 
        $end = strrpos($response,'>'); 
        return substr($response,$start,$end-$start+1);
    }
}