Unir as solicitações Web service (manter uma mesma sessão HTTP)

A arquitetura da plataforma de pagamento baseia-se em um conjunto de servidores com repartição de carga.

Para garantir a continuidade do processo, cada solicitação vinculada a um mesmo pagamento em um lapso de tempo muito curto deve ser realizada com a mesma sessão HTTP.

Para isso, para toda solicitação, uma sessão é criada no servidor. A ID da sessão é retornada no cabeçalho HTTP da resposta. Este deverá ser redirecionado às solicitações seguintes para que a solicitação seja tratada pelo mesmo servidor, com os fins de evitar que a sua solicitação seja recusada porque a transação não estaria ainda disponível nos outros servidores.

Exemplo de aplicação :

Você deseja criar um pagamento que será entregue daqui a 30 dias em modo de validação manual.

Uma vez que o pagamento for aceito, você decide mudar a data de captura para o dia seguinte e validar a transação.

Para realizar esta operação:

  • Você deve chamar o web service de criação de pagamento (createPayment).
  • A plataforma verifica a presença de um ID de sessão no cabeçalho HTTP de sua solicitação.

    Já que nada foi mencionado, uma nova sessão e um novo ID são criados.

    A plataforma de pagamento realiza em seguida o tratamento da sua solicitação e envia uma resposta mencionando no cabeçalho HTTP o código de sessão atribuído e o nome do servidor que processou a solicitação:

Exemplo de cabeçalho de solicitação :

POST /vads-ws/v5 HTTP/1.1 
Host: secure.payzen.com.br
Connection: Keep-Alive 
User-Agent: PHP-SOAP/5.4.14 
Content-Type: text/xml; charset=utf-8 
SOAPAction: "" 
Content-Length: 1922

Exemplo de cabeçalho de resposta :

HTTP/1.1 200 OK 
Date: Tue, 24 Feb 2015 11:37:06 GMT 
Server: Apache 
Set-Cookie: JSESSIONID=6qeoRHaVgOGr5avgh6lHnzEm.vadpayment01bdx; 
Path=/vads-ws; Secure 
Content-Length: 2711 
Vary: Accept-Encoding,User-Agent Keep-Alive: timeout=5, max=100 
Connection: Keep-Alive 
Content-Type: text/xml;charset=UTF-8
  • Nos cabeçalhos HTTP da resposta, você resgata o cookie JSESSIONID.
  • Você inicializa o cookie JSESSIONID do seu cabeçalho HTTP.
  • Você chama o web service de modificação e de validação do pagamento.

Exemplo de cabeçalho de solicitação para manter a sessão :
POST /vads-ws/v5 HTTP/1.1 
Host: secure.payzen.com.br
Connection: Keep-Alive 
User-Agent: PHP-SOAP/5.4.14 
Content-Type: text/xml; charset=utf-8 SOAPAction: "" 
Content-Length: 5793 
Cookie: JSESSIONID=6qeoRHaVgOGr5avgh6lHnzEm.vadpayment01bdx;

  • A plataforma verifica a presença de um ID de sessão no cabeçalho HTTP de sua solicitação.

A solicitação é em seguida enviada para o servidor que gerou a sessão.

Se a sessão existir, ela será utilizada de novo,. Se não, uma nova sessão e um código novo serão criados.

A plataforma de pagamento realiza o tratamento da solicitação e envia uma resposta.

Observação:

O ID de sessão será retornado no cabeçalho HTTP da resposta somente se uma nova sessão for criada.

Aconselhamos então testar sistematicamente a presença de cookie no cabeçalho HTTP da resposta e utilizar o ID de sessão presente antes de unir uma outra chamada (getPaymentDetails por exemplo).

Exemplo de cabeçalho HTTP de resposta utilizando a mesma sessão :
HTTP/1.1 200 OK 
Date: Thu, 26 Feb 2015 10:26:01 GMT 
Access-Control-Allow-Origin: * 
Content-Type: text/xml;charset=UTF-8 
Content-Length: 2858 
Vary: Accept-Encoding 
Connection: close

Observação: não há informação sobre o código de sessão.

Exemplo de cabeçalho HTTP de resposta com uma nova sessão :
HTTP/1.1 200 OK 
Date: Thu, 26 Feb 2015 10:31:39 GMT 
Set-Cookie: JSESSIONID=W10zI16iiiDiZqGV309xDtLV.vadpayment01bdx; Path=/vads-ws; Secure 
Access-Control-Allow-Origin: * 
Content-Type: text/xml;charset=UTF-8 
Content-Length: 2858 
Vary: Accept-Encoding 
Connection: close

Observação: presença do Set-Cookie mencionando o código da nova sessão.