Daniel Suszczyński

Daniel Suszczyński Head of Software
Engineering

Temat: SOAP i WSDL od DPD

Witam,
potrzebuję skorzystać z usług WebService pod tym WSDL: https://ucsweb.dpd.com.pl/UnisoftCustomerServices/Parce... a dokładnie ParcelInfo. Niestety ciągle otrzymuję informacje o błędzie: "Message: Unable to handle request without a valid action parameter. Please supply a valid soap action." W czym może tkwić problem?

Proszę, pomóżcie.

Pozdrawiam,
Daniel

konto usunięte

Temat: SOAP i WSDL od DPD

Wklej odpowiedni fragment kodu.
Daniel Suszczyński

Daniel Suszczyński Head of Software
Engineering

Temat: SOAP i WSDL od DPD

$Client = new SoapClient($wsdl);
$Client->ParcelInfo('user','password','123456');

lub

$client = new Zend_Soap_Client($wsdl);
$parcel_info_result = $client->ParcelInfo('user','password','123456');

konto usunięte

Temat: SOAP i WSDL od DPD

$Client = new SoapClient($wsdl);
$Client->ParcelInfo('user','password','123456');

O ile dobrze pamiętam, bo chwilę temu bawiłem się ostatnio tymi rzeczami, wywoływałem odpowiednie funkcje na zasadzie:

$Client->__soapCall('NazwaFunkcji', array(JakiesParametry));
Marcin Molga

Marcin Molga Senior Solution
Architect, IBM.

Temat: SOAP i WSDL od DPD

Jak sama nazwa wskazuje: "Message: Unable to handle request without a valid action parameter. Please supply a valid soap action.", problem tkwi w typie parametru przekazanego do metody.

Wg WSDLa metoda ParcelInfo przyjmuje:

<wsdl:message name="ParcelInfoSoapIn">
<wsdl:part name="parameters" element="tns:ParcelInfo"/>
</wsdl:message>


czyli:


<s:element name="ParcelInfo">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="User" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="Password" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="ParcelNumber" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>


Zatem nie przekazuj trzech parametrów typu string, tylko obiekt klasy ParcelInfo, w najprostszym przypadku takiej:


class ParcelInfo {
public $user;
public $password;
public $parcelNumber;
}


a metodę zawołaj tak:


$client = new SoapClient($wsdl, array('login' => $username,
'password' => $password));

$parcelInfo = new ParcelInfo();
//tu ustaw swoje parametry w obiekcie $parcelInfo
print_r($client->ParcelInfo($parcelInfo));


Mam nadzieję, że pomogłem. Pozdrawiam.
Daniel Suszczyński

Daniel Suszczyński Head of Software
Engineering

Temat: SOAP i WSDL od DPD

Marcin dziękuje Ci bardzo, oto chodziło!
Co prawda próbowałem wcześniej podobnie, ale z użyciem stdClass ale nie działało.

Pozdrawiam,
Daniel

Następna dyskusja:

Problem z wsdl i SOAP




Wyślij zaproszenie do