Nunca he usado PHPs SOAP a hacer nada, así que estoy seriamente familiarizado con el formato de una llamada correcta de SOAP. Solicitar la documentación en el servidor que estoy usando Estados que tengo que hacer primero un "inicio de sesión" y, a continuación, recibiré mi "símbolo" que necesito para utilizar para el resto de mis transacciones con este servidor.
Lo primera, la función de inicio de sesión; La documentación indica que la llamada debe tener el siguiente aspecto:
POST /poswebservice/V3DataAccess.asmx HTTP/1.1
Host: <!-- m --><span class="postlink">http://www.ticketbreak.co.za</span><!-- m -->
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://www.ticketbreak.com/poswebservice/V3DataAccess.asmx/Login"
<?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>
<Login xmlns="http://www.ticketbreak.com/poswebservice/V3DataAccess.asmx">
<UserName>string</UserName>
<Password>string</Password>
</Login>
</soap:Body>
</soap:Envelope>
- POST /poswebservice/V3DataAccess.asmx HTTP/1.1
- Host: <!-- m --><span class="postlink">http://www.ticketbreak.co.za</span><!-- m -->
- Content-Type: text/xml; charset=utf-8
- Content-Length: length
- SOAPAction: "http://www.ticketbreak.com/poswebservice/V3DataAccess.asmx/Login"
-
- <?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>
- <Login xmlns="http://www.ticketbreak.com/poswebservice/V3DataAccess.asmx">
- <UserName>string</UserName>
- <Password>string</Password>
- </Login>
- </soap:Body>
- </soap:Envelope>
WSDL para esta función es como sigue:
<s:element name="Login">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="UserName" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="Password" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="LoginResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="LoginResult">
<s:complexType>
<s:sequence>
<s:any minOccurs="0" maxOccurs="unbounded" namespace="http://www.w3.org/2001/XMLSchema" processContents="lax"/>
<s:any minOccurs="1" namespace="urn:schemas-microsoft-com:xml-diffgram-v1" processContents="lax"/>
</s:sequence>
<s:attribute fixed="http://www.ticketbreak.com/Accounts.xsd" name="namespace"/>
<s:attribute fixed="AccountsDataTable" name="tableTypeName"/>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>
- <s:element name="Login">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1" name="UserName" type="s:string"/>
- <s:element minOccurs="0" maxOccurs="1" name="Password" type="s:string"/>
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:element name="LoginResponse">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1" name="LoginResult">
- <s:complexType>
- <s:sequence>
- <s:any minOccurs="0" maxOccurs="unbounded" namespace="http://www.w3.org/2001/XMLSchema" processContents="lax"/>
- <s:any minOccurs="1" namespace="urn:schemas-microsoft-com:xml-diffgram-v1" processContents="lax"/>
- </s:sequence>
- <s:attribute fixed="http://www.ticketbreak.com/Accounts.xsd" name="namespace"/>
- <s:attribute fixed="AccountsDataTable" name="tableTypeName"/>
- </s:complexType>
- </s:element>
- </s:sequence>
- </s:complexType>
- </s:element>
Llama a la función de inicio de sesión con éxito con el siguiente código:
$client = new SoapClient('http://www.ticketbreak.co.za/poswebservice/V3DataAccess.asmx?WSDL');
$result = $client->login(
array(
'UserName' => 'username@email.extension',
'Password' => 'password'
)
);
$temp_return = $result->LoginResult->any;
$end_stripping = strpos($temp_return,'</xs:schema>')+12;
$temp_return = substr($temp_return,$end_stripping,(strlen($temp_return) - $end_stripping));
$xml = simplexml_load_string($temp_return);
$token = $xml->DocumentElement->Accounts->AuthUserID;
- $client = new SoapClient('http://www.ticketbreak.co.za/poswebservice/V3DataAccess.asmx?WSDL');
- $result = $client->login(
- array(
- 'UserName' => 'username@email.extension',
- 'Password' => 'password'
- )
- );
- $temp_return = $result->LoginResult->any;
- $end_stripping = strpos($temp_return,'</xs:schema>')+12;
- $temp_return = substr($temp_return,$end_stripping,(strlen($temp_return) - $end_stripping));
- $xml = simplexml_load_string($temp_return);
- $token = $xml->DocumentElement->Accounts->AuthUserID;
La siguiente función, a continuación, tengo que llamar es GetEventInformation y es donde tengo problemas, la documentación indica que la llamada debe ser similar al siguiente:
POST /poswebservice/V3DataAccess.asmx HTTP/1.1
Host: <!-- m --><span class="postlink">http://www.ticketbreak.co.za</span><!-- m -->
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://www.ticketbreak.com/poswebservice/V3DataAccess.asmx/GetEventInformation"
<?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>
<GetEventInformation xmlns="http://www.ticketbreak.com/poswebservice/V3DataAccess.asmx">
<Token>
<UserName>string</UserName>
<Token>string</Token>
</Token>
<EventID>int</EventID>
</GetEventInformation>
</soap:Body>
</soap:Envelope>
- POST /poswebservice/V3DataAccess.asmx HTTP/1.1
- Host: <!-- m --><span class="postlink">http://www.ticketbreak.co.za</span><!-- m -->
- Content-Type: text/xml; charset=utf-8
- Content-Length: length
- SOAPAction: "http://www.ticketbreak.com/poswebservice/V3DataAccess.asmx/GetEventInformation"
-
- <?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>
- <GetEventInformation xmlns="http://www.ticketbreak.com/poswebservice/V3DataAccess.asmx">
- <Token>
- <UserName>string</UserName>
- <Token>string</Token>
- </Token>
- <EventID>int</EventID>
- </GetEventInformation>
- </soap:Body>
- </soap:Envelope>
El WSDL en esta función es como sigue:
<s:element name="GetEventInformation">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="Token" type="tns:SecurityToken"/>
<s:element minOccurs="1" maxOccurs="1" name="EventID" type="s:int"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetEventInformationResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="GetEventInformationResult">
<s:complexType>
<s:sequence>
<s:any minOccurs="0" maxOccurs="unbounded" namespace="http://www.w3.org/2001/XMLSchema" processContents="lax"/>
<s:any minOccurs="1" namespace="urn:schemas-microsoft-com:xml-diffgram-v1" processContents="lax"/>
</s:sequence>
<s:attribute fixed="http://www.ticketbreak.com/Events.xsd" name="namespace"/>
<s:attribute fixed="EventsDataTable" name="tableTypeName"/>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>
- <s:element name="GetEventInformation">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="1" maxOccurs="1" name="Token" type="tns:SecurityToken"/>
- <s:element minOccurs="1" maxOccurs="1" name="EventID" type="s:int"/>
- </s:sequence>
- </s:complexType>
- </s:element>
- <s:element name="GetEventInformationResponse">
- <s:complexType>
- <s:sequence>
- <s:element minOccurs="0" maxOccurs="1" name="GetEventInformationResult">
- <s:complexType>
- <s:sequence>
- <s:any minOccurs="0" maxOccurs="unbounded" namespace="http://www.w3.org/2001/XMLSchema" processContents="lax"/>
- <s:any minOccurs="1" namespace="urn:schemas-microsoft-com:xml-diffgram-v1" processContents="lax"/>
- </s:sequence>
- <s:attribute fixed="http://www.ticketbreak.com/Events.xsd" name="namespace"/>
- <s:attribute fixed="EventsDataTable" name="tableTypeName"/>
- </s:complexType>
- </s:element>
- </s:sequence>
- </s:complexType>
- </s:element>
Actualmente estoy utilizando el código siguiente:
$result_tickets = $client->GetEventInformation(
array(
'Token' => array(
'Username' => 'username@email.extension',
'Token' => $token
),
'EventID' => 1140
)
);
echo '<pre>',print_r($result_tickets),'</pre><br /><br />';
- $result_tickets = $client->GetEventInformation(
- array(
- 'Token' => array(
- 'Username' => 'username@email.extension',
- 'Token' => $token
- ),
- 'EventID' => 1140
- )
- );
- echo '<pre>',print_r($result_tickets),'</pre><br /><br />';
Pero todo este código devuelve un objeto vacío:
¿Se siente me como el formato de la matriz que estoy enviando a la GetEventInformation no tiene el formato correcto...? O se supone que enviar los encabezados con??? ¿Y si es necesario enviar los encabezados, cómo sería que dar formato?
Let's leave all our *plum* where it is and go live in the jungle ...