Senden von XML-string (kein array) von PHP SOAP oder nusoap zu .NET-service
Ich bin neu auf der SEIFE und habe ich Probleme, (ja, ich habe gesucht - umfangreich, aber ich kann nicht scheinen zu entsprechen, meine sehr einfache Anforderung - senden Sie eine einzelne XML-string) mit der Absendung der eine Ausgabe zu einer .NET-server übereinstimmen:
POST /someurl.asmx HTTP/1.1
Host: www.somehost.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://somehost.com/SubmitCalls"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<SubmitCalls xmlns="http://somehost/">
<request>string</request>
</SubmitCalls>
</soap:Body>
</soap:Envelope>
Meine nusoap-code sieht wie folgt aus:
<?php
require_once('../lib/nusoap.php');
$bodyxml = '<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<SubmitCalls xmlns="http://somehost/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<request>
<?xml version="1.0" encoding="UTF-8"?>
<bXML xmlns="http://somehost/Schemas" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<From>
<UserName>some username</UserName>
<Password>some password</Password>
</From>
<Calls>
<Call>
<Reference>11111</Reference>
<Name>Joe Bloggs</Name>
<Tel1>02075574200</Tel1>
<Tel2>02075574201</Tel2>
<Tel3>02075574202</Tel3>
<Tel4>02075574203</Tel4>
<Tel5>02075574204</Tel5>
<CLI>08448220640</CLI>
<CallTime>09:00</CallTime>
<FileName>02075574200_1</FileName>
</Call>
<Call>
<Reference>11111</Reference>
<Name>Joe Bloggs</Name>
<Tel1>02075574200</Tel1>
<Tel2>02075574206</Tel2>
<Tel3>02075574207</Tel3>
<Tel4>02075574208</Tel4>
<Tel5>02075574209</Tel5>
<CLI>08448220640</CLI>
<CallTime>09:00</CallTime>
<FileName>02075574200_2</FileName>
</Call>
</Calls>
</bXML>
</request>
</SubmitCalls>
</soap:Body>
</soap:Envelope>
';
$client = new nusoap_client("somehost?WSDL",true);
$err = $client->getError();
if ($err) {
echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
exit();
}
$client->soap_defencoding = 'utf-8';
$client->useHTTPPersistentConnection();
$client->setUseCurl($useCURL);
$bsoapaction = "http://somehost/SubmitCalls";
$result = $client->send($bodyxml, $bsoapaction);
//Check for a fault
if ($client->fault) {
echo '<h2>Fault</h2><pre>';
print_r($result);
echo '</pre>';
} else {
//Check for errors
$err = $client->getError();
if ($err) {
//Display the error
echo '<h2>Error</h2><pre>' . $err . '</pre>';
} else {
//Display the result
echo '<h2>Result</h2><pre>';
print_r($result);
echo '</pre>';
}
}
echo '<h2>Request</h2><pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
echo '<h2>Response</h2><pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';
echo '<h2>Client Debug</h2><pre>' . htmlspecialchars($client->debug_str, ENT_QUOTES) . '</pre>';
echo '<h2>Proxy Debug</h2><pre>' . htmlspecialchars($proxy->debug_str, ENT_QUOTES) . '</pre>';
?>
(Obiously, alle somehost und Benutzernamen korrekt sind, in das fertige Skript). Ich kann eine Verbindung zu der WSDL, Lesen Sie es, es gibt nur eine Methode, die ich bin interessiert in (SubmitCalls), die aus nur einem Teil, mit dem Namen 'Parameter', die in der WSDL-schema. Die oben wirft einen 400 Bad request Fehler - irgendwelche Ideen, wo ich bin mache ich falsch?
Habe ich versucht mit PHP SOAP anstelle, aber ich kann einfach nicht scheinen, um zu senden, eine XML-Zeichenfolge, als der Körper der SOAP-Anforderung. Ich habe schon hantieren mit diesen für den besten Teil von drei Tagen und lese eine Unmenge von Webseiten, aber ich kann immer noch nicht bekommen es richtig. Bitte helfen.... wenn Sie mir zeigen könnte, wie Sie dies tun, indem Sie entweder die Bibliothek wäre ich enorm dankbar....
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie senden von einfachen XML-Code mit der $ - client->senden () - Methode.
Sehen Sie hier das Beispiel:
http://itworkarounds.blogspot.com/2011/07/send-raw-xml-with-php-nusoap.html
Wenn das auch nicht funktioniert, können Sie versuchen, die Buchung der XML mit CURL.
versuchen, diesen-
und dann (nusoap)
Nicht genau eine Antwort auf die Frage - aber es ist nun gelöst. Der Dienstleister erstellt eine neue Methode, das war in jeder Hinsicht identisch, außer, dass es erlaubt, ein XML-Dokument statt eines Strings. Durch einige geringfügige Veränderungen an den Inhalt der $bodyxml variable, und senden zu der neuen Methode scheint gut zu funktionieren.
Übrigens - wer auf der Suche Debuggen von SOAP-Anwendungen sollten wirklich schauen, greifen SOAP-UI aus Sourceforge. Das hat mir wirklich geholfen sanity-check mein Problem, und einige nützliche Hinweise für das Update.
Können Sie immer senden Sie einfach den xml-Code als Zeichenfolge und Schrauben Sie die Bibliotheken. Nicht empfohlen, aber in einigen Fällen, die einfacher ist.
vergessen Sie nicht, die
Header("SoapAction: ...")