GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Configurar método POST em um WebService Rest

java
Tags: #<Tag:0x00007f7ab851cd60>

#1

Estou precisando de ajuda para configurar um método POST para receber as notificações do Gerencianet (plataforma de pagamento). As requisições que são disparadas pelo WS deles geram o erro : Falha (415).
Meu método:

@POST
@Path("/RecebeToken")
@Consumes("text/plain")//
public void recebeToken(String token){
		
	CheckOut.consultar(token);
		
}

#2

415 é o codigo da exceção http ou um erro tratado do serviço?


#3

Esse erro eu visualizo no sistema deles na parte de testes … vou anexar um print


#4

O http code 415 ocorre quando vc tenta enviar o Content-Type num formato mas o WS esperado outro formato.
Verifique se é mesmo text/plain que o WS espera. Provavelmente deve ser application/json.

"415 UNSUPPORTED MEDIA TYPE
The origin server is refusing to service the request because the payload is in a format not supported by this method on the target resource."


#5

Certo, mas na documentação deles aqui esta dizendo que o parâmetro enviado é somente uma String …

"Foi gerada uma cobrança. Seu sistema recebe um POST da Gerencianet contendo o token de notificação 09027955-5e06-4ff0-a9c7-46b47b8f1b27 e informando o status da transação -"

Na documentação tem exemplo somente para PHP nada de java


#6

Essa string pode ser um json ou xml por exemplo. Então por isso deve informar o Content-Type correto. Pode ainda existir a possibilidade de não ser isso.

Qual é o exemplo em php?


#7

Então, deduzo eu que seja isso ! Na primeira vez tentei configurar para receber um JSON e não funcionou !!

<?php
 
require __DIR__.'/../../vendor/autoload.php'; // caminho relacionado ao Composer
 
use Gerencianet\Exception\GerencianetException;
use Gerencianet\Gerencianet;
 
$clientId = 'your_client_id'; // insira seu Client_Id, conforme o ambiente (Des ou Prod)
$clientSecret = 'your_client_secret'; // insira seu Client_Secret, conforme o ambiente (Des ou Prod)
 
$options = [
  'client_id' => $clientId,
  'client_secret' => $clientSecret,
  'sandbox' => true // altere conforme o ambiente (true = desenvolvimento e false = producao)
];
 
/*
* Este token será recebido em sua variável que representa os parâmetros do POST
* Ex.: $_POST['notification']
*/
$token = $_POST["notification"];
 
$params = [
  'token' => $token
];

#8

Esse exemplo em PHP é utilizando a SDK deles em PHP. Também tem a SDK em Java: https://github.com/gerencianet/gn-api-sdk-java


#9

Sim … estou montando embasado no API Java deles, a integração esta toda funcionando, o único problema é que eu não consigo receber a notificação deles.
Eu poderia montar uma thread e ficar consultando pelo charge_id que é gerado mas se eu não fizer a notificação eles não validam a integração … com isso não saio do ambiente de testes.


#10

Essa notificação vc tem que consultar manualmente(ação do usuário por exemplo) ou precisa ser realizada periodicamente e automaticamente?


#11

Essa notificação é recebida quando há uma alteração no “Status” tipo o boleto foi pago, então eles me enviam um “Token” e eu faço a consulta por ele, pra evitar de eu ter q ficar consultando sem ter alteração …


#12

Recebi a seguinte resposta do Gerencianet:

quanto ao erro de certifique-se definir Content-Type: application/xm nos cabeçalhos da requisição
Também me enviaram esse LINK : http://stackoverflow.com/questions/14751536/http-status-415-unsupported-media-type
Seguindo o exemplo o método ficou da seguinte forma:

@POST
@Path("/RecebeToken")
@Consumes({"application/xml", "application/json"})//
public void recebeToken(String token){
	
	System.out.println("Token Recebido: "+token);
	//CheckOut.consultar(token);
		
}

Porém continua dando o 415


#13

CABEÇALHOS DE SAÍDA
{
“date”: “Tue, 31 Jan 2017 05:09:26 GMT”,
“server”: “Apache/2.4.23 (cPanel) OpenSSL/1.0.1e-fips mod_bwlimited/1.4”,
“content-type”: “text/html;charset=utf-8”,
“content-language”: “en”,
“content-length”: “1092”,
“connection”: “close”
}