Configurar método POST em um WebService Rest

12 respostas
java
D

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

12 Respostas

F

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

D

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

N

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

D

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

N

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?

D

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

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

D

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.

N

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

D

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 …

D

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

D
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

}
Criado 26 de janeiro de 2017
Ultima resposta 1 de fev. de 2017
Respostas 12
Participantes 3