El servicio SOAP que deben publicar los comercios debe tener las siguientes características:
1. El servicio deberá llamarse ‘InotificacionSIS’ y ofrecer un método llamado
‘procesaNotificacionSIS’. Este método estará definido con un parámetro de entrada tipo
cadena XML y otro parámetro de salida del mismo tipo. Para más información, se adjunta
un fichero WSDL a partir del cual se puede construir el esqueleto del servidor y que
servirá para definir los tipos de datos que se intercambiarán entre cliente y servidor, de
cara a facilitar la comunicación.
2. El formato de los mensajes que se intercambiarán en este servicio deberán ajustarse a la
siguiente dtd:
a. Mensaje de notificación enviado desde el SIS con los datos de la operación
correspondiente:
<!ELEMENT Message (Request, Signature)>
<!ELEMENT Request (Fecha, Hora, Ds_SecurePayment, Ds_Amount, Ds_Currency, Ds_Order, Ds_MerchantCode, Ds_Terminal, Ds_Response, Ds_MerchantData?, Ds_Card_Type?, DS_Card_Type?, Ds_TransactionType, Ds_ConsumerLanguage, Ds_ErrorCode?, Ds_CardCountry?, Ds_AuthorisationCode?)> <!ATTLIST Request Ds_Version CDATA #REQUIRED>
<!ELEMENT Fecha (#PCDATA)> <!ELEMENT Hora (#PCDATA)>
<!ELEMENT Ds_SecurePayment (#PCDATA)> <!ELEMENT Ds_Amount (#PCDATA)>
<!ELEMENT Ds_Currency (#PCDATA)> <!ELEMENT Ds_Order (#PCDATA)> <!ELEMENT Ds_MerchantCode (#PCDATA)> <!ELEMENT Ds_Terminal (#PCDATA)> <!ELEMENT Ds_Response (#PCDATA)> <!ELEMENT Ds_MerchantData (#PCDATA)> <!ELEMENT Ds_Card_Type (#PCDATA)> <!ELEMENT Ds_TransactionType (#PCDATA)> <!ELEMENT Ds_ConsumerLanguage (#PCDATA)> <!ELEMENT Ds_ErrorCode (#PCDATA)>
<!ELEMENT Ds_CardCountry (#PCDATA)> <!ELEMENT Ds_AuthorisationCode (#PCDATA)> <!ELEMENT Signature (#PCDATA)>
<!ELEMENT DS_Card_Type (#PCDATA)>
Para generar el valor del campo Signature en el mensaje de respuesta del comercio aplicaremos un
HMAC SHA-256 de la cadena <Request...>…</Request>.
Ejemplo:
Sea el siguiente mensaje:
<Message> <Request Ds_Version="0.0"> <Fecha>01/04/2003</Fecha> <Hora>16:57</Hora> <Ds_SecurePayment>1</Ds_SecurePayment> <Ds_Amount>345</Ds_Amount> <Ds_Currency>978</Ds_Currency> <Ds_Order>165446</Ds_Order> <Ds_MerchantCode>999008881</Ds_MerchantCode> <Ds_Terminal>001</Ds_Terminal> <Ds_Card_Country>724</Ds_Card_Country> <Ds_Response>0000</Ds_Response><Ds_MerchantData>Alfombrilla para raton</Ds_MerchantData> <Ds_Card_Type>C</Ds_Card_Type>
<Ds_TransactionType>1</Ds_TransactionType> <Ds_ConsumerLanguage>1</Ds_ConsumerLanguage>
</Request> </Message>
Mensaje de respuesta del comercio a la notificación:
Ejemplo:
<!ELEMENT Message (Response, Signature)> <!ELEMENT Response (Ds_Response_Merchant)> <!ATTLIST Response Ds_Version CDATA #REQUIRED> <!ELEMENT Ds_Response_Merchant (#PCDATA)> <!ELEMENT Signature (#PCDATA)>
Los posibles valores que podrá tomar la etiqueta Ds_Response_Merchant serán:
•'OK' cuando la notificación se ha recibido correctamente.
•'KO' cuando se ha producido algún error.
Para generar el valor del campo Signature en el mensaje de respuesta del comercio
aplicaremos un HMAC SHA-256 de la cadena <Response>…</Response>.
Ejemplos de mensajes intercambiados en una notificación con Sincronización SOAP:
Mensaje de notificación enviado desde el SIS:
<Message> <Request Ds_Version="0.0"> <Fecha>01/04/2003</Fecha> <Hora>16:57</Hora> <Ds_SecurePayment>1</Ds_SecurePayment> <Ds_Amount>345</Ds_Amount> <Ds_Currency>978</Ds_Currency> <Ds_Order>165446</Ds_Order> <Ds_Card_Type>C</Ds_ Card_Type > <Ds_MerchantCode>999008881</Ds_MerchantCode> <Ds_Terminal>001</Ds_Terminal> <Ds_Card_Country>724</Ds_Card_Country> <Ds_Response>0000</Ds_Response>
<Ds_MerchantData>Alfombrilla para raton</Ds_MerchantData> <Ds_TransactionType>1</Ds_TransactionType>
<Ds_ConsumerLanguage>1</Ds_ConsumerLanguage> </Request>
<Signature>I3gacbQMEvUYN59YiHkiml-crEMwFAeogI1jlLBDFiw=</Signature> </Message>
Mensaje de respuesta desde el comercio al SIS:
<Message> <Response Ds_Version="0.0"> <Ds_Response_Merchant>OK</Ds_Response_Merchant> </Response> <Signature>d/VtqOzNlds9MTL/QO12TvGDNT+yTfawFlg55ZcjX9Q=</Signature> </Message>WSDL para el servicio InotificacionSIS
Los comercios que deseen desarrollar un servicio SOAP deben ajustarse a esta WSDL. A partir de ella
y, mediante herramientas de generación automática de código, se puede desarrollar el esqueleto del
servidor SOAP de forma cómoda y rápida.
<?xml version="1.0" encoding="UTF-8"?>
<definitions name="InotificacionSIS" targetNamespace=https://sis.SERMEPA.es/sis/InotificacionSIS.wsdl
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="https://sis.SERMEPA.es/sis/InotificacionSIS.wsdl" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://schemas.xmlsoap.org/wsdl/"> <message name="procesaNotificacionSISRequest">
<part name="XML" type="xs:string"/> </message>
<message name="procesaNotificacionSISResponse"> <part name="return" type="xs:string"/>
</message> <portType name="InotificacionSISPortType"> <operation name="procesaNotificacionSIS"> <input message="tns:procesaNotificacionSISRequest"/> <output message="tns:procesaNotificacionSISResponse"/> </operation> </portType>
<binding name="InotificacionSISBinding" type="tns:InotificacionSISPortType"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="procesaNotificacionSIS">
<soap:operation soapAction="urn:InotificacionSIS#procesaNotificacionSIS" style="rpc"/>
<input>
<soap:body use="encoded" encodingStyle=http://schemas.xmlsoap.org/soap/encoding/
namespace="InotificacionSIS"/> </input>
<output>
<soap:body use="encoded" encodingStyle=http://schemas.xmlsoap.org/soap/encoding/
namespace="InotificacionSIS"/> </output>
</operation> </binding>
<service name="InotificacionSISService">
<port name="InotificacionSIS" binding="tns:InotificacionSISBinding">
<soap:address location="http://localhost/WebServiceSIS/InotificacionSIS.asmx"/> </port>
</service>