Configurar método POST em um WebService Rest

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);
		
}

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

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

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."

1 curtida

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

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?

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
];

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

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.

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

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 …

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

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”
}