GUS udostępnił nam coś takiego: TERYT
Wysłałem maila, przysłali mi dane logowania z linkami do WSDL i SVC. Jest tylko jeden problem - przykład, jaki podali na połączenie się z tą usługą jest w C#. Oto on:
try {
var proxy = new ChannelFactory < ServiceReferenceWCF.ITerytWs1 > ("custom");
proxy.Credentials.UserName.UserName = login;
proxy.Credentials.UserName.Password = haslo;
var result = proxy.CreateChannel();
var test = result.CzyZalogowany();
} catch (Exception ex) {}
Dali też "Przykładowy fragment pliku konfiguracyjnego":
<client>
<endpoint address="https://host/TerytWs1.svc" binding="customBinding" bindingConfiguration="custom" contract="ServiceReference1.ITerytWs1" name="custom" />
</client>
<bindings>
<customBinding>
<binding name="custom">
<security defaultAlgorithmSuite="Default" authenticationMode="UserNameOverTransport" requireDerivedKeys="true" includeTimestamp="true" messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10">
<localClientSettings detectReplays="false" />
<localServiceSettings detectReplays="false" />
</security>
<textMessageEncoding messageVersion="Soap11WSAddressing10" />
<httpsTransport maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647" />
</binding>
</customBinding>
</bindings>
Próbowałem na wszelkie sposoby połączyć się z tym przez SOAP, niestety bez powodzenia. Poniżej to, co już próbowałem:
$wsdl_proto = 'https';
$wsdl_host = 'host';
$wsdl_host_path = '/terytws1.wsdl';
$wsdl_url = $wsdl_proto.'://'.$wsdl_host.$wsdl_host_path;
$connectionPG = new SoapClient($wsdl_url, array(
'login' => "login",
'password' => "haslo",
'trace' => 1,
));
try{
$logged_in = $connectionPG->CzyZalogowany();
} catch (SoapFault $fault) {
echo $fault->getMessage()."\n\n";
echo "REQUEST HEADERS:\n" . $connectionPG->__getLastRequestHeaders() . "\n";
echo "REQUEST:\n" . $connectionPG->__getLastRequest() . "\n";
echo "Response headers:\n" . $connectionPG->__getLastResponseHeaders() . "\n";
echo "Response:\n" . $connectionPG->__getLastResponse() . "\n";
}
$functions = $connectionPG->__getFunctions();
var_dump($functions);
Skrypt zawiesza się podczas próby wykonania funkcji CzyZalogowany(). Kiedy przekroczy timeout, wchodzi do sekcji catch. Response headers są puste. Kombinowałem z ustawieniem parametru location
. Doszedłem do momentu, w którym dostałem odpowiedź, że metoda POST nie jest dopuszczalną metodą odwoływania się do tego pliku svc (dostępna była m.in GET). Ściągnąłem SoapUI. Tam udało mi się zajść jeszcze dalej. W odpowiedzi otrzymywałem błąd An error occurred when verifying security for the message
.
No i na tym sprawa stanęła. Ma ktoś jakiś pomysł jak do tego podejść?