Cześć,
Czy ktoś z Was próbował w PHP połączyć się z webservice SZOI i przesłać plik?
Mam taki kod, ale po zalogowaniu nie mogę przesłać pliku: Błąd przesyłania pliku: SOAP-ERROR: Parsing WSDL: 'executeServiceRequestMsg' already defined
<?php
// Konfiguracja
$brokerWsdlUrl = "https://www-2.nfz-lublin.pl/ws-broker-server-dostep/services/ServiceBroker?wsdl";
$authWsdlUrl = "https://www-2.nfz-lublin.pl/kaas/services/Auth?wsdl"; // Usługa logowania
$username = "*****";
$password = "*****";
$domain = "03"; // Domena
$filePath = "*****.xml"; // Ścieżka do pliku
// Weryfikacja pliku
die("Plik $filePath nie istnieje."); }
// Funkcja konwersji obiektu do tablicy
function objectToArray($object) {
return json_decode(json_encode($object), true);
}
// Funkcja logowania
function login($authWsdlUrl, $username, $password, $domain) {
try {
$arrContextOptions = [
"ssl" => [
"verify_peer" => false,
"verify_peer_name" => false,
]
];
$options = [
'soap_version' => SOAP_1_2,
'exceptions' => true,
'trace' => true,
'cache_wsdl' => WSDL_CACHE_NONE,
];
$params = [
'credentials' => [
['name' => 'domain', 'value' => ['stringValue' => $domain]],
['name' => 'login', 'value' => ['stringValue' => $username]]
],
'password' => $password
];
$clientAuth = new SoapClient($authWsdlUrl, $options);
$loginHeaders = null;
$clientAuth->__soapCall('login', [$params], null, null, $loginHeaders);
// Debug: Wyświetlenie nagłówków
echo "Nagłówki logowania:\n";
$loginHeadersArray = objectToArray($loginHeaders);
// Pobranie sessionId i authToken
$sessionId = $loginHeadersArray['session']['id']
null; $authToken = $loginHeadersArray['authToken']['id']
null;
if (!$sessionId || !$authToken) {
die("Logowanie nie powiodło się: brak sessionId lub authToken.\n"); }
echo "Zalogowano pomyślnie!\n"; echo "Session ID: $sessionId\n"; echo "Auth Token: $authToken\n";
return [
'sessionId' => $sessionId,
'authToken' => $authToken
];
} catch (SoapFault $e) {
echo "Błąd logowania SOAP:\n"; echo "Kod błędu: " . $e->faultcode . "\n"; echo "Opis błędu: " . $e->getMessage() . "\n"; }
}
// Funkcja przesyłania pliku
function putFile($brokerWsdlUrl, $sessionId, $authToken, $filePath) {
try {
$arrContextOptions = [
"ssl" => [
"verify_peer" => false,
"verify_peer_name" => false,
]
];
$options = [
'soap_version' => SOAP_1_2,
'exceptions' => true,
'trace' => true,
'cache_wsdl' => WSDL_CACHE_NONE,
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false,
]
]),
];
$client = new SoapClient($brokerWsdlUrl, $options);
$date = date('Y-m-d\TH:i:s');
$headers = [
new SoapHeader("http://xml.kamsoft.pl/ws/common", "session", $sessionId),
new SoapHeader("http://xml.kamsoft.pl/ws/common", "authToken", $authToken),
];
$client->__setSoapHeaders($headers);
$response = $client->__soapCall("executeService", [
[
'location' => [
'localname' => "putFile",
'version' => "1.2",
],
'date' => $date,
'params' => [
['name' => 'obszar', 'value' => 'LIOCZ'],
['name' => 'id_ow', 'value' => '03'],
['name' => 'id_swiad', 'value' => '******'],
],
'payload' => [
'textload' => <<<XML
<put-file xmlns="http://xml.kamsoft.pl/ws/broker/put-file/v1.2" typ="LIOCZ">
<content>$fileContent</content>
</put-file>
XML
]
]
]);
echo "Plik przesłany pomyślnie:\n"; } catch (SoapFault $e) {
echo "Błąd przesyłania pliku: " . $e->getMessage() . "\n"; }
}
// Logowanie
$tokens = login($authWsdlUrl, $username, $password, $domain);
// Przesyłanie pliku
putFile($brokerWsdlUrl, $sessionId, $authToken, $filePath);
?>
Ten post edytował marekpulawy 4.12.2024, 12:02:10