SOAP에 익숙하지 않고 문제가 있습니다. (예, 광범위하게 검색했지만 매우 일치하는 것처럼 보입니다. 간단한 요구 사항 - 닷넷 서버에 약간의 출력을 전송로) 하나의 XML 문자열을 보내는이 일치하도록 :PHP SOAP 또는 nusoap에서 .NET 서비스로 XML 문자열 (배열이 아님)을 전송합니다.
<?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, 모든 somehost과 :
이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>
내 nusoap 코드는 다음과 같습니다 사용자 이름은 최종 스크립트에서 정확합니다). WSDL에 연결하여 읽을 수 있습니다. WSDL 스키마에 'parameters'라는 부분이 하나만있는 (SubmitCalls) 메소드가 하나 있습니다. 위의 400 잘못된 요청 오류 던졌습니다 - 내가 잘못 가고있는 모든 아이디어?
대신 PHP SOAP을 사용해 보았습니다.하지만 XML 문자열을 SOAP 요청의 본문으로 보낼 수 없습니다. 저는 3 일 동안 가장 좋은 시간을 보냈을뿐 아니라 엄청난 웹 페이지를 읽었습니다.하지만 여전히 제대로 이해할 수는 없습니다. 제발 도와주세요 .... 만약 당신이 나에게 어느 도서관을 사용하여 이것을 어떻게 할 수 있는지 엄청나게 감사 할 것입니다 ....
SoapAction 헤더는 send 함수의 두 번째 매개 변수로 설정됩니다. (내 코드에서 var bsoapaction) 생각합니다. 내가 잘못 설정하지 않는다면 ... – odeclas
진지하게,이 포인터는 전혀 제발? 400 개의 잘못된 요청 오류가 발생하는 것처럼 보입니다.이 문맥에서 의미하는 것은 무엇입니까? 헤더 정보가 잘못되었거나 인코딩 된 것을 의미합니까? 아니면 나는 끈이있는 무언가를하고 있는가? – odeclas
필자는 .NET 클라이언트에서 작동하는 $ 요청을 사용하여 PHP SOAP 및 __doRequest를 사용해 보았지만 여전히 400 개를 얻었습니다. – odeclas