Histórico de mensagens sobre url

EXIBINDO CONVERSAS RECENTES:

Texto: url
# pix
Avatar discord do usuario rafaelvolpato

rafaelvolpato

import feign.Body;
import feign.Headers;
import feign.Param;
import feign.RequestLine;

public interface PixAPI {

@Headers({"x-client-cert-pem: {{X-Certificate-Pem}}", "Authorization: {authorization}", "Content-type: application/json"})
@RequestLine("POST /oauth/token")
@Body("{\"grant_type\":\"client_credentials\"}")
OAuthResponseDTO oauthToken(/ String cert, /@Param("authorization") String authorization);

@Headers({/ "x-client-cert-pem: {cert}", / "Authorization: {oauthToken}", "x-mtls-bypass: 1"})
@RequestLine("PUT /v2/webhook/{accountKey}")
@Body("%7B\"webhookUrl\": \"{webhookUrl}\"%7D")
PixWebhookResponseDTO configureWebhook(@Param("oauthToken") String oauthToken, @Param("webhookUrl") String webhookUrl, @Param("accountKey") String accountKey);

@Headers({/ "x-client-cert-pem: {cert}", / "Authorization: {oauthToken}", "x-mtls-bypass: 1"})
@RequestLine("DELETE /v2/webhook/{accountKey}")
void removeWebhook(@Param("oauthToken") String oauthToken, @Param("accountKey") String accountKey);

}

# pix
Avatar discord do usuario rafaelvolpato

rafaelvolpato

private PixAPI getPixAPI() {
PixAPI pixAPI = Feign.builder()
.decoder(new GsonDecoder())
.logLevel(feign.Logger.Level.FULL)
.logger(new MyLogger())
.client(new Client.Default(getSSLSocketFactory(), null))
.target(PixAPI.class, pixRestUrl);
return pixAPI;
}


SSLSocketFactory getSSLSocketFactory() {
try {
URL keyMaterialUrl;
File file = ResourceUtils.getFile(pixRestCertPemPath);
if (!file.exists()) {
log.error("File not found: " + pixRestCertPemPath);
URL resource = Thread.currentThread().getContextClassLoader().getResource(pixRestCertPemPath);
if (resource != null) {
log.info("Resource found : " + resource);
keyMaterialUrl = resource;
} else {
throw new RuntimeException("Resource not found : " + pixRestCertPemPath);
}
} else {
keyMaterialUrl = file.toURI().toURL();
}
SSLContext sslContext = SSLContextBuilder
.create()
.setKeyStoreType("PKCS12")
.loadKeyMaterial(keyMaterialUrl, null, null)
.build();
return sslContext.getSocketFactory();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("Could not configure SSLSocketFactory", e);
}
}

# pix
Avatar discord do usuario anoni_mato

anoni_mato

Ver Respostas

o curl tem um parâmetro pra indicar o arquivo do certificado SSL. aí vc tem que pesquisar sobre SSL / mTLS em Java (não tem exemplos no site da GN)

# pix
Avatar discord do usuario rafaelvolpato

rafaelvolpato

Ver Respostas

O gateway api vc cria só por configuração. O meu backend está rodando em instâncias de ec2 na aws mas quando vc configura as rotas vc pode colocar a URL pra aonde vc vai rotear, então a linguagem não faz diferença....

# pix
Avatar discord do usuario anoni_mato

anoni_mato

Ver Respostas

não é necessário certificado pra obter a url de payload

# pix
Avatar discord do usuario anoni_mato

anoni_mato

Ver Respostas

teste via curl, meu caro. exatamente mesmo cenário.

# pix
Avatar discord do usuario anoni_mato

anoni_mato

ainda é possível usar um endereço de callback "externo" ao ambiente que lança as cobranças, mas sendo mTLS é mais seguro do que fazer o PSP enviar requests para qualquer destino desconhecido. o mTLS poderia não se justificar nos casos em que a iniciação é do PSP, mas na iniciação externa fica mais garantido que é intencional o uso de determinada URL para callback

# pix
Avatar discord do usuario anoni_mato

anoni_mato

Ver Respostas

a questão não é a "obtenção da URL". a questão é você precisa de mTLS para "injetar" uma cobrança no sistema da GN, vinculada à sua conta GN. por isso o nível de segurança maior.

# pix
Avatar discord do usuario anoni_mato

anoni_mato

o fato da URL de cobrança ser aberta é o que vai permitir soluções como a minha obterem os dados da cobrança e formar uma página de fatura, por exemplo (mesmo eu não tendo criado a cobrança nem tendo as suas credenciais). mas por mais que eu me beneficie disso e faça um uso responsável, acho que foi errado ficar aberto.

# pix
Avatar discord do usuario oleoessencial

oleoessencial

Ver Respostas

Blz, entendi, vou estudar mais aqui , não tem lógica ter que mudar de servidor para receber um arquivo .jws. Coisa que acessando diretamente esta mesma url da location o arquivo é baixado sem precisar de nada, isso que não entendo.

# pix
Avatar discord do usuario anoni_mato

anoni_mato

Ver Respostas

o que eu achei errado foi justamente o location estar desprotegido de mTLS (deveria haver um ponto central de autoridade para obtenção dos dados de uma cobrança quando o QR é lido, para que apenas os PSPs pudessem obter esses dados, não qualquer pessoa com acesso ao QR, assim poderia implantar limitação de consumo, por exemplo) e o webhook estar protegido (esse, não deveria ter essa exigência de mTLS, já que é apenas meramente informativo, e quem define a URL de callback já fez uso das credenciais e do canal mTLS pra isso)

# pix
Avatar discord do usuario anoni_mato

anoni_mato

Ver Respostas

a URL do callback também precisa mTLS. então estou planejando oferecer um facilitador pra quem está em hospedagem compartilhada e não tem como fechar o mTLS, como é o seu caso. mas pra isso, preciso fazer os QR dinâmicos funcionarem primeiro

# pix
Avatar discord do usuario anoni_mato

anoni_mato

Ver Respostas

obrigado, Magno. Essa cobrança está expirada e seus detalhes não podem mais ser recuperados pela URL:

$ curl -s 'https://qrcodes-pix-h.gerencianet.com.br/v2/ab6017f3cbfe45449b04bb33c61a6c99'
{"nome":"cobranca_expirada","mensagem":"A cobrança expirou"}

# pix
Avatar discord do usuario oleoessencial

oleoessencial

<@!440035527127990273> bom dia dev, voce precisa de uma url copia e cola ou de um uma de payload ?

# pix
Avatar discord do usuario anoni_mato

anoni_mato

bom dia, dev-domingueiros. alguém pode me fornecer uma url de cobrança com validade de pelo menos 1 dia? estou trabalhando no https://pix.ae e vou adicionar suporte a qr dinâmicos

# pix
Avatar discord do usuario jessica_efi

jessica_efi

Ver Respostas

Além de alterar o client_id , client_secret e a url, você deve solicitar um certificado de produção.

# pix
Avatar discord do usuario tryvin_

tryvin_

Ver Respostas

<@!671763456487325717> só uma outra pergunta, após integrar tudo, como faz para ir para produção? Só trocar o ClientID/Secret e a URL?

# pix
Avatar discord do usuario oleoessencial

oleoessencial


$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => "https://api-pix-h.gerencianet.com.br/oauth/token",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS =>"{\r\n \"grant_type\": \"client_credentials\"\r\n}",
CURLOPT_HTTPHEADER => array(
"x-client-cert-pem: {{X-Certificate-Pem}}",
"Authorization: Basic Q3334f34f34f3g5355gh56hg5w6h457wg457w54w56h7w56f5f6wNzVmZGQxNGU2MDMxMjlhNTMw",
"Content-Type: application/json"
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;