Vous êtes sur la page 1sur 35

Referencia API

SOAP Webpay
Transbank S.A.
D OCUMENTO DE ESPECIFI CACIONES TRANSACCIN P AT P ASS
BY W EBPAY ( V 1.3)

Transbank S.A.
10/10/2012

Contenido
1

Control de cambios ..................................................................................................................... 2

Prefacio ....................................................................................................................................... 2

2.1

Acerca de esta gua ............................................................................................................. 2

2.2

Audiencia ............................................................................................................................. 2

2.3

Feedback para esta documentacin ................................................................................... 2

Transaccin de Autorizacin PatPass by WebpayPatPass by Webpay ....................................... 3


3.1

Descripcin de la transaccin.............................................................................................. 3

3.2

Secuencia de pago en una transaccin PatPass by Webpay ............................................... 4

3.3

Descripcin de mtodos asociados a Servicio Web de PatPass by Webpay ....................... 7

3.3.1

Operacin initTransaction .......................................................................................... 7

3.3.2

Operacin getTransactionResult .............................................................................. 11

3.3.3

Operacin acknowledgeTrasaction .......................................................................... 14

Anexo C: Ejemplos de integracin con API SOAP Webpay ....................................................... 15


4.1

Ejemplo Java ...................................................................................................................... 16

4.2

Ejemplos PHP .................................................................................................................... 20

4.3

Ejemplos .Net .................................................................................................................... 27

Pgina 1

1 Control de cambios
Fecha
12-12-12

Versin
1.0

09-01-13
22-01-13
28-01-13

1.1
1.2
1.3

Descripcin del cambio


Liberacin inicial de documento general de API de integracin con WS
Transaccin Patpass by Webpay.
Futuros Release:
Ejemplos de integracin Java, PHP y .NET.
Se incorporan ejemplo de Java y PHP
Se mejora ejemplo PHP.
Se agregan ejemplos .Net

2 Prefacio
2.1 Acerca de esta gua
Esta gua describe los aspectos tcnicos que deben ser considerados en la integracin con Webpay
utilizando API SOAP, describe el servicio Web para PatPass by Webpay, sus operaciones y cmo
estas deben ser utilizadas en un flujo de pago. Se incluyen ejemplos que sirven como gua al
utilizar lenguajes Java, C# y PHP.

2.2 Audiencia
Esta gua est dirigida a implementadores que realizan la integracin de Webpay en comercios
utilizando la API SOAP para soportar en estos el pago con tarjetas bancarias.
Se recomienda que quin realice la integracin posea conocimiento tcnico de al menos en los
siguientes temas:

Servicios Web
WS-Security
Firma digital, generacin y validacin.

2.3 Feedback para esta documentacin


Aydanos a mejorar esta informacin envindonos comentarios a soporte@transbank.cl

Pgina 2

3 Transaccin de Autorizacin PatPass by WebpayPatPass


by Webpay
3.1 Descripcin de la transaccin
Una transaccin de autorizacin de PatPass by Webpay corresponde a una solicitud de inscripcin
de pago recurrente con tarjetas de crdito, en donde el primer pago se resuelve al instante, y los
subsiguientes quedan programados para ser ejecutados mes a mes. PatPass by Webpay cuenta
con fecha de caducidad o termino, la cual debe ser proporcionada junto a otros datos para esta
transaccin. La transaccin puede ser realizada en Dlares y Pesos, para este ltimo caso es
posible enviar el monto en UF y Webpay realizar la conversin a pesos al momento de realizar el
cargo al tarjetahabiente.
El flujo pginas para la transaccin es el siguiente:
Sitio del
Comercio

Webpay
Formulario
de Pago

Autenticacin
en Banco
Emisor

Sitio del
Comercio

Webpay
Comprobante
de pago

Sitio del
Comercio

.
Resumen mtodos del servicio Web de Transaccin PatPass by Webpay
Mtodo
initTransaction

Descripcin general
Permite inicializar una transaccin de PatPass by Webpay, como
respuesta a la invocacin se genera un token que representa en
forma nica una transaccin.
Es importante considerar que una vez invocado este mtodo, el
token que es entregado tiene un periodo reducido de vida de 5
minutos, posterior a esto el token es caducado.

getAuthorizationResult

Permite obtener el resultado de la transaccin una vez Webpay


ha resuelto su autorizacin financiera.

acknowledgeTrasaction

Permite indicar a Webpay que se ha recibido conforme el


resultado de la transaccin.

Pgina 3

El mtodo acknowledgeTrasaction debe ser invocado


siempre, independientemente del resultado entregado
por el mtodo getAuthorizationResult. Si la invocacin
no se realiza en un perodo de 60 segundos, Webpay reversar la
transaccin, asumiendo que el comercio no pudo informarse de
su resultado, evitando as el cobro al tarjetahabiente.

3.2 Secuencia de pago en una transaccin PatPass by Webpay


El siguiente diagrama ilustra la secuencia de pago y cmo participan los distintos actores en una
transaccin normal.
sd Secuencia pago WPM
Comercio

Webpay

Tarjetahabiente

1. Pagar con Webpay()


2. initTransaction()
3. Response() :token...
4. Redirect(token...)
5. Request(token)
6. Response() :Formulario Webpay
8. autoriza e inscribe
PatPASS()

7. Pagar()
9. Redirect()

10. Request(token)
11. getAuthorizationResult(token...)
12. Response()
13. acknow ledgeTransaction(token)
14. Redirect(token)
15. Request(token)
16. Response(token) :Comprobante Webpay
17. Request(token)
18. Response(token) :Pagina Final

Diagrama de secuencia de Transaccin PatPass by Webpay

Pgina 4

Descripcin de la secuencia:
1. Una vez seleccionado los bienes o servicios, tarjetahabiente decide pagar a travs de
Webpay.
2. El comercio inicia una transaccin en Webpay, invocando el mtodo initTransaction().
3. Webpay procesa el requerimiento y entrega como resultado de la operacin el token de la
transaccin y URL de redireccionamiento a la cual se deber redirigir al tarjetahabiente.
4. Comercio redirecciona al tarjetahabiente hacia Webpay, con el token de la transaccin a la
URL indicada en punto 3. La redireccin se realiza enviando por mtodo POST el token en
variable token_ws.
5. El navegador Web del tarjetahabiente realiza una peticin HTTPS a Webpay, en base al
redireccionamiento generado por el comercio en el punto 4.
6. Webpay responde al requerimiento desplegando el formulario de pago de Webpay. Desde
este punto la comunicacin es entre Webpay y el tarjetahabiente, sin interferir el
comercio. El formulario de pago de Webpay despliega, entre otras cosas, el monto de la
transaccin, informacin del comercio como nombre y logotipo, las opciones de pago a
travs de crdito.
7. Tarjetahabiente ingresa los datos de la tarjeta, hace clic en pagar en formulario Webpay.
8. Webpay procesa la solicitud de autorizacin (primero autenticacin bancaria y luego la
autorizacin de la transaccin), y si todo resulta exitoso, realiza el proceso de inscripcin
de PatPass by Webpay.
9. Una vez resuelta la autorizacin, Webpay retorna el control al comercio, realizando un
redireccionamiento HTTP/HTTPS hacia la pgina de transicin del comercio, en donde se
enva por mtodo POST el token de la transaccin en la variable token_ws.
10. El navegador Web del tarjetahabiente realiza una peticin HTTP/HTTPS al sitio del
comercio, en base a la redireccin generada por Webpay en el punto 9.
11. El sitio del comercio recibe la variable token_ws e invoca el segundo mtodo Web,
getTransactionResult ()(mientras se depliega la pgina de transicin1), para obtener el
resultado de la autorizacin. Se recomienda que el resultado de a autorizacin sea

El detalle de la pgina de transicin se encuentra descrito en Anexo A, del documento de descripcin


general de la API SOAP.

Pgina 5

persistida en los sistemas del comercio, ya que este mtodo se puede invocar una nica
vez.
12. Webpay responde el resultado de la invocacin del mtodo getTransactionResult ().
13. Para informar a Webpay que el resultado de la transaccin se ha recibido sin problemas, el
sistema del comercio consume el tercer mtodo acknowledgeTrasaction.
NOTA: De no ser consumido demorar ms de 30 segundos en su consumo, Webpay
realizar la reversa de la transaccin, asumiendo que existieron problemas de
comunicacin.

14. Una vez recibido el resultado de la transaccin e informado a Webpay su correcta


recepcin, el sitio del comercio debe redirigir al tarjetahabiente nuevamente a Webpay,
con la finalidad de desplegar el comprobante de pago. Es importante realizar este punto
para que el tarjetahabiente entienda que el proceso de pago fue exitoso, y que involucrar
un cargo a su tarjeta bancaria. El redirecionamiento a Webpay se hace utilizando como
destino la URL informada por el mtodo getTransactionResult() enviando por mtodo
POST el token de la transaccin en la variable token_ws.
15. Webpay recibe un requerimiento con el token en la variable token_ws valida que la
transaccin se encuentre aprobada.
16. Webpay identifica la transaccin y despliega el comprobante de pago al tarjetahabiente.
17. Una vez visualizado el comprobante de pago, el tarjetahabiente es redirigido de vuelta al
sitio del comercio, por medio de redireccionamiento con el token en la variable token_ws
enviada por mtodo POST.
18. Sitio del comercio despliega pgina final de pago2.

El detalle de la pgina de final se encuentra descrito en Anexo A, del documento de descripcin general de
la API SOAP.

Pgina 6

3.3 Descripcin de mtodos asociados a Servicio Web de PatPass by


Webpay
A continuacin se describe cada una de las operaciones que deben ser utilizadas en una
Transaccin de PatPass by Webpay.
3.3.1

Operacin initTransaction

Mtodo que permite iniciar una transaccin de pago Webpay.


Parmetro de entrada: type initTransaction
Nombre
Descripcin
WSTransactionType xs:wsTransactionType

sessionId

(Obligatorio) Indica el tipo de transaccin, su valor debe ser siempre


TR_NORMAL_WS_WPM
xs:string
(Opcional) Identificador de sesin, uso interno de comercio, este valor
es devuelto al final de la transaccin. Un uso posible puede ser la
representacin del intento de pago.

returnURL

Largo mximo: 61
xs:anyURI
(Obligatorio) URL del comercio a la cual Webpay redireccionar
posterior al resultado de la autorizacin. Es aqu donde el comercio
deber procesar el resultado de la autorizacin.

finalURL

Largo mximo: 256


xs:anyURI
(Obligatorio) URL del comercio a la cual Webpay redireccionar
posterior al voucher de xito del comercio. Webpay enviar va mtodo
POST la variable token_ws con el valor del token de transaccin.

transactionDetails

Largo mximo: 256


tns:wsTransactionDetail
(Obligatorio) Lista de objetos del tipo wsTransactionDetail, el cual

Pgina 7

wPMDetail

contiene datos de la transaccin asociada al primer pago que e realizar


en lnea. Mxima cantidad de repeticiones es de 1 para este tipo de
transaccin.
tns:wpmDetailInput
(Obligatorio) Objeto del tipo wpmDetailInput, el cual contiene datos
asociados a la inscripcin de PatPass by Webpay.

wsTransactionDetail

Descripcin: Tipo de dato contiene detalles de la transaccin


Campo
amount

Descripcin
xs:decimal
(Obligatorio) Monto de la transaccin.

buyOrder

Largo mximo: 10
xs:string
(Obligatorio) Orden de compra de la tienda.

commerceCode

Largo mximo: 26
xs:string
(Obligatorio) Cdigo comercio de la tienda

sharesAmount

Largo: 12
xs:decimal
(Opcional, uso en cuotas comercio) Valor de la cuota.

sharesNumber

Largo mximo: 9
xs:int
(Opcional, uso en cuotas comercio)Nmero o cantidad de cuotas.
Largo mximo: 2

Pgina 8

WPMDetail

Descripcin: Tipo de dato que contiene los datos de una inscripcin PATPASS BY WEBPAY.
Campo
serviceId

Descripcin
xs:string
(Obligatorio) Identificador servicio, corresponde al cdigo
con el cual el comercio identifica el servicio prestado a su
cliente.

cardHolderId

Largo mximo: 30
xs:string
(Obligatorio) RUT del tarjetahabiente.
Formato: NN.NNN.NNN-A

cardHolderName

Largo mximo: 12
xs:string
(Obligatorio) Nombre tarjetahabiente.

cardHolderLastName1

Largo mximo: 50
xs:string
(Obligatorio) Apellido paterno tarjetahabiente.

cardHolderLastName2

Largo mximo: 50
xs:string
(Obligatorio) Apellido materno tarjetahabiente.

cardHolderMail

Largo mximo: 50
xs:string
(Obligatorio) Correo electrnico tarjetahabiente.

cellPhoneNumber

Largo mximo: 50
xs:string

expirationDate

(Obligatorio) Nmero telfono celular tarjetahabiente.


xs:dateTime
(Obligatorio) Fecha expiracin de PatPass by Webpay,

Pgina 9

corresponde al ltimo pago. Formato AAAA-MM-DD


Largo: 10
xs:string

commerceMail

(Obligatorio) Correo electrnico comercio.

amount

Largo mximo: 50
xs:decimal

ufFlag

(Obligatorio) Monto fijo inscripcin PatPass by Webpay


xs:boolean
Valor en true indica que el monto enviado est expresando
en UF, valor en false indica que valor esta expresado en
Pesos.

Parmetros de salida: type wsInitTransactionOutput

Campo
token

Descripcin
xs:string
Token de la transaccin.

url

Largo: 64
xs:string
URL de redireccin a la cual el comercio deber enviar el token
utilizando mtodo POST en variable token_ws.
Largo mximo: 256

Pgina 10

3.3.2

Operacin getTransactionResult

Descripcin del mtodo:


Mtodo que permite obtener el resultado de la transaccin y los datos de la misma.

Parmetros de entrada: getTransactionResult


Campo
tokenInput

Descripcin
xs:string
Token de la transaccin.
Largo: 64

Parmetros de salida: transactionResultOutput


Campo
buyOrder

Descripcin
xs:string
Orden de compra de la tienda.

sessionId

Largo mximo: 26
xs:string
Identificador de sesin, uso interno de comercio, este valor es
devuelto al final de la transaccin. Un uso posible puede ser la
representacin del intento de pago.

cardDetail

Largo mximo: 61
tns:carddetail

accoutingDate

Informacin de tarjeta de crdito.


xs:string
Fecha contable de la autorizacin de la transaccin, la cual ms el
desfase de abono indica al comercio la fecha en que Transbank
abonar al comercio.

transactionDate

Largo: 4, formato MMDD


xs:string
Fecha y hora de la autorizacin.

Pgina 11

Largo:
xs:string

VCI

(Opcional) Resultado de la autenticacin para comercios Webpay


Plus y/o 3D Secure, los valores posibles sin los siguientes:

TSY: Autenticacin exitosa


TSN: autenticacin fallida.
TO: Tiempo mximo excedido para autenticacin.
ABO: Autenticacin abortada por tarjetahabiente.

Largo mximo: 3
xs:string

urlRedirection

URL de redireccin a la cual el comercio deber enviar el token


utilizando mtodo POST en variable token_ws.
Largo mximo: 256
tns:transactionDetails

detailsOutput

Objeto que contiene el detalle de la transaccin financiera.


CARD D ETAIL

(D ETALLES T ARJETA DE C RDITO )

Descripcin: Tipo de dato


contiene detalles de la tarjeta de crdito. Se usa para los
comercios que tienen habilitado el envo de algunos de estos campos.

Campo
cardNumber

Descripcin
xs:string
Nmero de la tarjeta de crdito del tarjeta habiente.

cardExpirationDate

Largo mximo: 16
xs:string
(Opcional) Fecha de expiracin de la tarjeta de crdito del
tarjetahabiente. Formato YYMM
Largo mximo: 4

DETAILS O UTPUT

Campo
Pgina 12

Descripcin

Campo
authorizationCode

Descripcin
xs:string
Cdigo de autorizacin de la transaccin

paymentTypeCode

Largo mximo: 6
xs:string

responseCode

Tipo de pago de la transaccin.


xs:string
Cdigo de respuesta de la autorizacin. Valores posibles:
0
-1
-2
-3
-4
-5
-6
-7
-8
-100

amount

Transaccin aprobada.
Rechazo de transaccin.
Transaccin debe reintentarse.
Error en transaccin.
Rechazo de transaccin.
Rechazo por error de tasa.
Excede cupo mximo mensual.
Excede lmite diario por transaccin.
Rubro no autorizado.
Rechazo por inscripcin de PatPass by Webpay

xs:decimal
Monto de la transaccin.

sharesAmount

Largo mximo: 10
xs:decimal
Valor de la cuota.

sharesNumber

Largo mximo: 9
xs:int
Cantidad de cuotas

commerceCode

Largo mximo: 2
xs:string
Cdigo comercio de la tienda

buyOrder

Largo: 12
xs:string
Orden de compra de la tienda.

Pgina 13

Campo

Descripcin
Largo mximo: 26

3.3.3

Operacin acknowledgeTrasaction

Descripcin del mtodo:


Mtodo que permite informar a Webpay la correcta recepcin del resultado de la trasaccin.

Parmetros de entrada: getTransactionResult

Campo
tokenInput

Descripcin
xs:string
Token de la transaccin.
Largo: 64

Pgina 14

4 Anexo C: Ejemplos de integracin con API SOAP Webpay


La presente seccin, entrega ejemplos de uso de la API SOAP para transaccin normal en los
lenguajes Java, PHP y .net. Tienen por objetivo exponer una forma factible de integracin con API
SOAP Webpay para resolver los siguientes puntos asociados a la integracin:

Generacin de cliente o herramienta para consumir los servicios Web, lo cual permite
abstraerse de la complejidad de mensajera SOAP asociada a los Webservice y hacer uso
de las operaciones del servicio.

Firma del mensaje y validacin de firma en la respuesta, existen frameworks y


herramientas asociadas a cada lenguaje de programacin que implementan el estndar
WS Security, lo que se requiere es utilizar una de estas, configurarla y que realice el
proceso de firma digital del mensaje.
Estos ejemplos son slo una gua / ayuda de integracin, y no abarcan el proceso completo de
llamada a los WS. En ningn caso son una obligatoriedad su implementacin, y el comercio es libre
de realizar la integracin como ms le acomode.

Pgina 15

4.1 Ejemplo Java


Este ejemplo har uso de los siguientes frameworks para consumir los servicios Web de Webpay
utilizando WS Security:

Apache CXF, es un framewok open source que ayuda a construir y consumir servicios
Web en Java. En este ejemplo se utilizar para:
o

Generar el cliente del Webservice o STUBS.

Consumir los servicios Web

Apache WSS4J, proporciona la implementacin del estndar WS Security, nos


permitir:
o

Firmar los mensajes SOAP antes de enviarlo a Webpay.

Validar la firma de la respuesta del servicio Web de Webpay.

Spring framewok 3.0, permite que CXF y WSS4J trabajen en conjunto, tambin se
utiliza para configurar WS Security en la firma del mensaje SOAP.

Pasos a seguir:
1. Generacin de cliente del Webservice.
Para generar el cdigo Java que implementar el cliente SOAP se utilizar wsdl2java de
CXF, el cual toma el WSDL del servicio y genera todas las clases necesarias para invocar el
servicio Web. Ms informacin en http://cxf.apache.org/docs/wsdl-to-java.html

wsdl2java -autoNameResolution <URL del wsdl>

Pgina 16

2. Configuracin de WS Security
Para configurar WS Security en CXF se deben habilitar y configurar los interceptores que
realizaran el trabajo de firmado del mensaje. La configuracin de los interceptores se
puede realizar a travs de la API de servicios Web o a travs del XML de configuracin de
Spring, en este caso se realizar a travs de Spring en el archivo applicationContext.xml de
la aplicacin.
Se deben habilitar y configurar 2 interceptores, uno para realizar la firma de los mensajes
enviados al invocar una operacin del servicio Web de Webpay y otro para validar la firma
de la respuesta del servicio Web.
Interceptor de salida
<bean class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor"
id="signOutRequestInterceptor">
<constructor-arg>
<map>
<entry key="signaturePropFile" value="signatureOut.properties"/>
<entry key="user" value="${alias.client}"/>
<entry key="action" value="Signature"/>
<entry key="passwordCallbackClass"
value="com.transbank.webpay.wsse.ClientCallBack"/>
<entry key="signatureParts"
value="{Element}{http://schemas.xmlsoap.org/soap/envelope/}Body"/>
</map>
</constructor-arg>
</bean>

Interceptor de entrada
<bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor"
id="signInRequestInterceptor">
<constructor-arg>
<map>
<entry key="action" value="Signature" />
<entry key="signaturePropFile" value="signatureIn.properties"/>
<entry key="passwordCallbackClass"
value="com.transbank.webpay.wsse.ServerCallBack"/>
<entry key="signatureParts"
value="{Element}{http://schemas.xmlsoap.org/soap/envelope/}Body"/>
</map>
</constructor-arg>
</bean>

Las

interfaz
javax.security.auth.callback.CallbackHandler, su implementacin permite al
framework de seguridad recuperar la contrasea para acceder al almacen de llaves de la
aplicacin (Java Key Store) que almacena los certificados digitales.
Pgina 17

clases

ClientCallback

ServerCallBack

implementan

la

3. Llamada a operaciones del Webservice


Operacin initTransaction

private WSWebpayService service;


private List<WsTransactionDetail> transactionDetails= new ArrayList<
WsTransactionDetail>
private WsTransactionDetail transactionDetail = new WsTransactionDetail();
private WsInitTransactionInput transactionInput = new WsInitTransactionInput();
private WsInitTransactionOutput transactionOutput = new WsInitTransactionOutput();

transactionInput.setSessionId(12312423);
transactionInput.setReturnURL(http://www.midominio.com/recibetoken.do);
transactionInput.setFinalURL(http://www.midominio.com/resultado.do);
transactionDetail.setAmount(new BigDecimal(1000));
transactionDetail.setCommerceCode(59702512345);
transactionDetail.setBuyOrder(123456789);
transactionDetails.add(transactionDetail);
transactioInput.setWSTransactionType(WsTransactionType.TR_NORMAL_WS);
transactionInput.getTransactionDetails().add(transactionDetails);
/*Informacin asociada al pago Automtico con Tarjetas de Crdito - PAT*/
WpmDetailInput detail = new WpmDetailInput();
detail.setServiceId("335456675433");
detail.setCardHolderId("11.111.111-1");
detail.setCardHolderName("Juan Pedro");
detail.setCardHolderLastName1("Alarccn");
detail.setCardHolderLastName2("Perez");
detail.setCardHolderMail("example@example.com");
detail.setCellPhoneNumber("55555555");
detail.setCommerceMail("example2@example2.com");
detail.setUfFlag(false); /* Indica que monto no es en UF */
/*Llamada al servicio Web*/
transactionOutput = service.initTransaction(transactionInput);
/*Token y URL de redireccin*/
transactionOutput.getUrl();
transactionOutput.getToken();

Operacin getTransactionResult
/*Se asume que se obtuvo el token, el cual fue enviado por Webpay a la URL
notificada en el parmetro returnURL al invocar al mtodo initTransaction, el
parmetro enviado por post se llama token_ws*/
private WSWebpayService service;

Pgina 18

private TransactionResultOutput transactionResultOutput;


transactionResultOutput = service.getTransactionResult(token);
/* transactionResultOutput contendr los parmetros de resultado de la
transaccin*/

Operacin acknowledgeTransaction()
/*Se asume que se obtuvo el token, este mtodo tiene por objetivo indicarle a
Webpay que se obtuvo el resultado de la transaccin correctamente. Este mtodo es
void*/
private WSWebpayService service;
service.acknowledgeTransaction(token);

URL:
http://cxf.apache.org/docs/ws-security.html
http://ws.apache.org/wss4j/
http://cxf.apache.org/docs/wsdl-to-java.html

Pgina 19

4.2 Ejemplos PHP


El siguiente ejemplo est basado en PHP versin 5, sobre el cual se utilizaron las siguientes
bibliotecas de software para realizar la invocacin de los servicios web de Webpay bajo el estndar
WSS:

Biblioteca de seguridad: archivo compuesto de tres clases que integran libreras nativas
PHP de validacin y verificacin. Estas clases nos permitirn generar la seguridad
suficiente a travs de mtodos de encriptacin y desencriptacin.

WSSE-PHP: integra las libreras de seguridad XML y genera un documento XML-SOAP


seguro. Depende de las libreras de seguridad XML.

SOAP-VALIDATION: clase encargada de la validacin de mensajes SOAP seguros de


respuesta. Verifica la autenticidad e integridad del mensaje. Depende de WSSE-PHP.

Los fuentes pueden ser descargados desde https://github.com/OrangePeople/php-wss-validation

Pasos a seguir:

1. Generacin de cliente del Servicio Web:

Antes de la integracin se debe tener instalado y funcionando un servidor HTTP Apache y


configurar el directorio para generar una salida a travs del navegador web. Si se quiere optar
por una alternativa ms sencilla, Apache provee un directorio por omisin, que vara segn el
sistema operativo. Generalmente en plataformas Linux es /var/www y en Windows
C:\<directorio hacia Apache>/htdocs.
A continuacin, para generar las clases necesarias que conectan a los servicios Web, se puede
utilizar la herramienta Easy WSDL2PHP. La documentacin necesaria e informacin de
descarga se encuentra en http://sourceforge.net/projects/easywsdl2php/.
Una vez descargados los fuentes, se deben copiar en el directorio de apache que posee la
salida por navegador.
Se hace la llamada por navegador del archivo wsdl2php.php y se obtiene la siguiente pantalla:

Pgina 20

Se escribe la URL del archivo wsdl al se quiere conectar, un nombre de clase y luego se
presiona el botn Generate Code. Luego de esto se muestra una pantalla como la siguiente:

Una vez que se obtiene el resultado mostrado en la imagen se copia el cdigo PHP generado y se
guarda en un archivo, el cual representar el stub del servicio Web. Una vez realizado este proceso
ya se tienen las clases necesarias para poder integrarse con los servicios web de Webpay.
Pgina 21

2. Crear una clase que extienda de SoapClient (SoapClient es la clase nativa que provee PHP para
utilizacin de servicios Web)(En el ejemplo se denominar MySoap)
//Notar que se incluyen dos archivos que se proveen en la librera de encriptacin
require_once('xmlseclibs.php');
require_once('soap-wsse.php');

class MySoap extends SoapClient {


function __doRequest($request, $location, $saction, $version) {
$doc = new DOMDocument('1.0');
$doc->loadXML($request);
$objWSSE = new WSSESoap($doc);
$objKey = new XMLSecurityKey(XMLSecurityKey::RSA_SHA1,array('type' =>
'private'));
$objKey->loadKey(PRIVATE_KEY, TRUE);
$options = array("insertBefore" => TRUE);
$objWSSE->signSoapDoc($objKey, $options);
$objWSSE->addIssuerSerial(CERT_FILE);
$objKey = new XMLSecurityKey(XMLSecurityKey::AES256_CBC);
$objKey->generateSessionKey();
$retVal = parent::__doRequest($objWSSE->saveXML(), $location, $saction,
$version);
$doc = new DOMDocument();
$doc->loadXML($retVal);
return $doc->saveXML();
}
}

Las constantes PRIVATE_KEY Y CERT_FILE son las rutas de la llave privada y certificado del
comercio, respectivamente.

3. Incluir la clase generada en el paso anterior en el archivo principal de los servicios.


Se debe incluir con la sentencia require_once la clase generada en el paso anterior.
Ejemplo:
require_once(mysoap.php);

Pgina 22

4. Editar el archivo stub creado en el paso 1


Se debe editar el mtodo __contruct del stub tal como se muestra en el ejemplo:
Donde dice:
$this->soapClient = new SoapClient($url, array("classmap" => self::$classmap,
"trace" => true, "exceptions" => true));

Debe quedar: (utilizando el nombre de clase del paso 2)


$this->soapClient = new MySoap($url, array("classmap" => self::$classmap, "trace"
=> true, "exceptions" => true));

5. Invocacin de operaciones del servicio web de Webpay.


Para todos los ejemplos se debe hacer referencia a los archivos de la librera descargada
require_once('soap-wsse.php');
require_once('soap-validation.php');
require_once('<archivo que contiene la clase stub creado en el paso 1>');

Operacin InitTransaction:
$wsInitTransactionInput = new wsInitTransactionInput();
$wsTransactionDetail = new wsTransactionDetail();
/*Variables de tipo string*/
$wsInitTransactionInput->wSTransactionType = $transactionType;
$wsInitTransactionInput->commerceId = $commerceId;
$wsInitTransactionInput->buyOrder = $buyOrder;
$wsInitTransactionInput->sessionId = $sessionId;
$wsInitTransactionInput->returnURL = $returnUrl;
$wsInitTransactionInput->finalURL = $finalUrl;
$wsTransactionDetail->commerceCode = $commerceCode;
$wsTransactionDetail->buyOrder = $buyOrder;
$wsTransactionDetail->amount = $amount;
$wsTransactionDetail->sharesNumber = $shareNumber;
$wsTransactionDetail->sharesAmount = $shareAmount;
$wpmDetailInput->cardHolderId = $cardHolderId;
$wpmDetailInput->cardHolderLastName1 = $cardHolderLastName1;
$wpmDetailInput->cardHolderLastName2 = $cardHolderLastName2;
$wpmDetailInput->cardHolderMail = $cardHolderMail;
$wpmDetailInput->cardHolderName = $cardHolderName;
$wpmDetailInput->cellPhoneNumber = $cellPhoneNumber;
$wpmDetailInput->commerceMail = $commerceMail;
$wpmDetailInput->expirationDate = $expirationDate;

Pgina 23

$wpmDetailInput->serviceId = $serviceId;
$wpmDetailInput->ufFlag = $ufFlag;
$wsInitTransactionInput->wPMDetail = $wpmDetailInput;
$wsInitTransactionInput->transactionDetails = $wsTransactionDetail;
$webpayService = new WebpayService($url_wsdl);
$initTransactionResponse = $webpayService->initTransaction(
array("wsInitTransactionInput" => $wsInitTransactionInput)
);
$xmlResponse = $webpayService->soapClient->__getLastResponse();
$soapValidation = new SoapValidation($xmlResponse, SERVER_CERT);
$validationResult = $soapValidation->getValidationResult();
/*Invocar slo s $validationResult es TRUE*/
$wsInitTransactionOutput = $initTransactionResponse->return;

Observaciones:

La clase WebpayService contiene los servicios principales y es el nombre que se


gener con WSDL2PHP.
La constante SERVER_CERT es la ruta del archivo del certificado cliente entregado
por Transbank.
initTransaction es un mtodo de la clase WebpayService y representa la llamada
el servicio initTransaction.
La variable $xmlResponse es un string del xml-soap que responde el servidor.
La variable $validationResult es el resultado de tipo boolean de la validacin del
mensaje de respuesta. Para un caso correcto el valor es TRUE, de lo contrario es
FALSE.
La variable $wsInitTransactionOutput contiene los datos que entrega el servidor.
Esta variable slo debe invocarse despus de un resultado correcto en el mensaje
SOAP de respuesta.

Operacin getTransactionResult:
$webpayService = new WebpayService($url_wsdl);
$getTransactionResult = new getTransactionResult();
$getTransactionResult->tokenInput = $_POST['token_ws'];
$getTransactionResultResponse = $webpayService->getTransactionResult(
$getTransactionResult);
$transactionResultOutput = $getTransactionResultResponse->return;

Pgina 24

Pgina 25

Operacin acknowledgeTransaction:
$webpayService = new WebpayService($url_wsdl);
$acknowledgeTransaction = new acknowledgeTransaction();
$acknowledgeTransaction->tokenInput = $_POST['token_ws'];
$acknowledgeTransactionResponse = $webpayService->acknowledgeTransaction(
$acknowledgeTransaction);
$xmlResponse = $webpayService->soapClient->__getLastResponse();
$soapValidation = new SoapValidation($xmlResponse, SERVER_CERT);
$validationResult = $soapValidation->getValidationResult();

Observaciones:

Pgina 26

El valor de $_POST['token_ws'] contiene un string del token de la transaccin que


entrega Webpay.

4.3 Ejemplos .Net


Este ejemplo har uso de los siguientes frameworks y componentes para consumir los servicios
Web de Webpay utilizando WS Security:

Microsoft .NET 4.0, es un framework de Microsoft que permite la independencia de


hardware e integra todos sus productos desde el sistema operativo hasta las
herramientas de mercado.
o

Soporte y Core para el desarrollo e implementacin

Web Services Enhancements 3.0, proporciona la implementacin para desarrollo de


Web Service e interoperabilidad con otros sistemas.
o

Generar el cliente del WebService o Proxy

Consumir los servicios Web

Componente Intergrup.Core4.Soap.dll Componente para validacin y firma digital


para WS Security. Estos componentes representan una posible solucin al problema
del no soporte nativo de WSS en .Net
IMPORTANTE. Se debe tener presente que el framework WSE 3.0 no es compatible en su
totalidad con WS Security, requiere de algunas adaptaciones. Entre estas adaptaciones se
encuentra la validacin de firma digital sobre el XML de SOAP del WSE. La firma que se
exige en el consumo del servicio Web se debe realizar sobre el body del XML, el cual debe
ser marcado con un ID, es este caso el ID lleva un prefijo impuesto por la definicin de WSS,
WSE 3.0 no permite validar la firma sobre elementos cuyo identificado de referencia
presenta un prefijo. Una posible solucin se presenta en el sitio StackOverflow, en donde se
plantea una forma de sobrescribir el mtodo GetIdElement de la subclase
System.Security.Cryptography.Xml.SignedXml, que es utilizada al momento de
firmar y validar firmas digitales con el mtodo nativo ComputeSignature.

Nota: WSE 3.0 puede ser utilizado tambin con Framework .NET 2.0 y 3.5 respectivamente

Pgina 27

Pasos a seguir:
1. Generacin de cliente del Webservice.
Para generar el cdigo .NET que implementar el cliente SOAP se utilizar wsewsdl3 de
WSE 3.0, el cual toma el WSDL del servicio y genera todas las clases necesarias para
invocar el servicio Web.
wsewsdl3 <URL del wsdl> /language:c# /namespace:<Opcional> /type:webClient

Nota: Una vez instalado WSE 3.0 en Windows puede ser encontrado en C:\Program
Files\Microsoft WSE\v3.0\Tools

2. Configuracin de WS Security
Para configurar WS Security en WSE 3.0 se implement un conjunto de clases para definir
y personalizar clases que entreguen el soporte para WS Security.
Nota: La personalizacin de clases est definido dentro de WSE 3.0 para lograr la
interoperabilidad entre sistemas.
o

Pgina 28

CustomPolicyAssertion: esta clase permite crear una Poltica para Assertion,


donde podemos capturar el Mensaje SOAP de Request y Response respectivamente.
Esto realizado a travs de filtros:
o

ClientOutputFilter (Interceptor Salida): permite definir y personalizar el mensaje


de Response hacia el servicio. Dentro de esta clase es interceptado el mensaje
Soap y se realiza la firma digital.

ClientInputFilter (Interceptor de Entrada): permite definir y personalizar el


mensaje de Request hacia el servicio. Dentro de esta clase es interceptado el
mensaje SOAP y se realiza la validacin de firma digital con la llave pblica del
certificado.

Definicin de poltica de proceso


public class CustomPolicyAssertion : PolicyAssertion
{
private String issuerNameCertificate = null;
public CustomPolicyAssertion(String issuerNameCertificate)
: base()
{
this.issuerNameCertificate = issuerNameCertificate;
}
public override SoapFilter CreateClientInputFilter(
FilterCreationContext context)
{
return new ClientInputFilter();
}
public override SoapFilter CreateClientOutputFilter(
FilterCreationContext context)
{
return new ClientOutputFilter(this.issuerNameCertificate);
}
public override SoapFilter CreateServiceInputFilter(
FilterCreationContext context)
{
return null;
}

public override SoapFilter CreateServiceOutputFilter(


FilterCreationContext context)
{
return null;
}
public override IEnumerable< KeyValuePair<string, Type>> GetExtensions()
{
return new KeyValuePair<string, Type>[] { new KeyValuePair<string,
Type>("CustomPolicyAssertion", this.GetType()) };
}
public override void ReadXml(XmlReader reader, IDictionary<string, Type>
extensions)
{
reader.ReadStartElement("CustomPolicyAssertion");
}
}

Pgina 29

La creacin de una poltica permite definir al stub o proxy cmo activar los interceptores
para envi o recepcin de mensaje SOAP al consumir un WebService. Esto es permite en
WSE 3.0 a modo de Custom de los objetos para lograr la interoperabilidad.

Interceptor de salida
public class ClientOutputFilter : SoapFilter
{
private String issuerNameCertificate = null;
public ClientOutputFilter(String issuerNameCertificate)
: base()
{
this.issuerNameCertificate = issuerNameCertificate;
}
public override SoapFilterResult ProcessMessage(SoapEnvelope envelope)
{
WSSecuritySignature<SoapEnvelope, X509Certificate2> signed = new
WSSecuritySignature<SoapEnvelope, X509Certificate2>();
String issuerName =
HelperSetting.GetSetting(this.issuerNameCertificate);
X509Certificate2 certificate =
HelperCertificate.GetCertificate(issuerName);
signed.Signature(envelope, certificate);
return SoapFilterResult.Continue;
}
}

Se rescata el certificado digital del comercio y se procede a la firma digital. El componente


de firma digital para WS Security se encuentra en la clase WSSecuritySignature.

Pgina 30

Interceptor de Entrada
public class ClientInputFilter:SoapFilter
{
public override SoapFilterResult ProcessMessage(SoapEnvelope envelope)
{
WSSecuritySignature<SoapEnvelope, X509Certificate2> signed = new
WSSecuritySignature<SoapEnvelope, X509Certificate2>();
String issuerName =
HelperSetting.GetSetting(Constant.ISSUER_NAME_CERTIFICATE_SERVER);
X509Certificate2 certificate =
HelperCertificate.GetCertificate(issuerName);
if (signed.CheckSignature(envelope, certificate))
{
return SoapFilterResult.Continue;
}
return SoapFilterResult.Terminate;
}
}

Se rescata el certificado digital del servidor (llave pblica) y se procede a la validacin de


firma digital.

Nota: los certificados digitales son almacenados en el Store de Windows para certificados
digital y desde este repositorio son obtenidos mediante IssuerName o nmero del
comercio.

Pgina 31

Operacin initTransaction
wsInitTransactionInput initTransaction = new wsInitTransactionInput();
initTransaction.wSTransactionType = wsTransactionType.TR_NORMAL_WS_WPM;
initTransaction.sessionId = 1234567;
initTransaction.returnURL = http://www.midominio.com/recibetoken.aspx;
initTransaction.finalURL = http://www.midominio.com/resultado.aspx;
wsTransactionDetail transactionDetail = new wsTransactionDetail();
transactionDetail.amount= Convert.ToDecimal(5000);
transactionDetail.commerceCode= 597000000000;
transactionDetail.buyOrder=123456789;
initTransaction.transactionDetails=new wsTransactionDetail[]{
transactionDetail};
initTransaction.wPMDetail = new wpmDetailInput
{
serviceId=335456675433,
cardHolderId=11.111.111-1,
cardHolderName = Juan Pedro,
cardHolderLastName1 = Alarcn,
cardHolderLastName2 = Perez,
cardHolderMail = example@example.com,
cellPhoneNumber = 1234567,
expirationDate = DateTime.Parse(2014-01-15),
commerceMail = user@domain.com,
ufFlag=false /* Indica que monto no es en UF */
};

using (WSWebpayServiceImplService proxy = new WSWebpayServiceImplService())


{
/*Define el ENDPOINT del Web Service Webpay*/
proxy.Url = http://localhost/WSWebpayTransaction/cxf/WSWebpayService;
Policy myPolicy = new Policy();
CustomPolicyAssertion customPolicty = new CustomPolicyAssertion();
myPolicy.Assertions.Add(customPolicty);
proxy.SetPolicy(myPolicy);
proxy.Timeout = 60000;
proxy.UseDefaultCredentials = false;
result = proxy.initTransaction(initTransaction);
}
/*Token y URL de redireccin*/
String token=result.token;
String urlRedireccion=result.url;

Pgina 32

Operacin getTransactionResult
/*Se asume que se obtuvo el token, el cual fue enviado por Webpay a la URL
notificada en el parmetro returnURL al invocar al mtodo initTransaction, el
parmetro enviado por post se llama token_ws*/

transactionResultOutput result=null;
using (WSWebpayServiceImplService proxy = new
WSWebpayServiceImplService())
{
/*Define el ENDPOINT del Web Service Webpay*/
proxy.Url =
http://localhost/WSWebpayTransaction/cxf/WSWebpayService;
Policy myPolicy = new Policy();
CustomPolicyAssertion customPolicty = new CustomPolicyAssertion();
myPolicy.Assertions.Add(customPolicty);
proxy.SetPolicy(myPolicy);
proxy.Timeout = 60000;
proxy.UseDefaultCredentials = false;
result = proxy.getTransactionResult(token);
}
/* transactionResultOutput contendr los parmetros de resultado de la
transaccin*/

Operacin acknowledgeTransaction()
/*Se asume que se obtuvo el token, este mtodo tiene por objetivo indicarle a
Webpay que se obtuvo el resultado de la transaccin correctamente. Este mtodo es
void*/

using (WSWebpayServiceImplService proxy = new


WSWebpayServiceImplService())
{
/*Define el ENDPOINT del Web Service Webpay*/
proxy.Url =
http://localhost/WSWebpayTransaction/cxf/WSWebpayService;
Policy myPolicy = new Policy();
CustomPolicyAssertion customPolicty = new CustomPolicyAssertion();
myPolicy.Assertions.Add(customPolicty);
proxy.SetPolicy(myPolicy);
proxy.Timeout = 60000;
proxy.UseDefaultCredentials = false;
proxy.acknowledgeTransaction(token);
}

Pgina 33

Referencias:

WSE 3.0: http://www.microsoft.com/en-us/download/details.aspx?id=14089


Framework .NET 4.0: http://www.microsoft.com/en-us/download/details.aspx?id=17851
Herramienta wsewsdl3 para generacin de proxy http://www.microsoft.com/enus/download/details.aspx?id=14089
Componente Intergrup.Core4.Soap.dll http://www.intergrup.cl/software/ws-security.html
Web Services Security X.509 Certificate Token Profile 1.1. https://www.oasisopen.org/committees/download.php/16785/wss-v1.1-spec-os-x509TokenProfile.pdf
StackOverflow, firma en elementos con ID que utilizan prefijos.
http://stackoverflow.com/questions/5099156/malformed-reference-element-whenadding-a-reference-based-on-an-id-attribute-w

Pgina 34

Vous aimerez peut-être aussi