Histórico de mensagens sobre js em pix

EXIBINDO CONVERSAS RECENTES:

Texto: js
Canal: pix
Avatar discord do usuario guilherme_efi

guilherme_efi

Ver Respostas

Bom dia, <@!393512852310327296>!
Deve-se lembrar que é necessário tratar a inclusão do /pix no final da sua URL. Para isso, tente cadastrar seu webhook da seguinte forma.
Insira no final da sua URL o parâmetro ?ignorar=, assim:

Avatar discord do usuario matheus_efi

matheus_efi

Ver Respostas

O EM_PROCESSAMENTO é retornado em si no JSON de resposta após o consumo do endpoint, mas eu recomendo você a consultar o que vem no webhook mesmo.

Avatar discord do usuario matheus_efi

matheus_efi

Ver Respostas

O Pix que teve devolução vem com um array de devoluções, como neste exemplo:

json
// devolução
{
"pix": [
{
"endToEndId": "E12345678202009091221syhgfgufg",
"txid": "c3e0e7a4e7f1469a9f782d3d4999343c",
"chave": "2c3c7441-b91e-4982-3c25-6105581e18ae",
"valor": "110.00",
"horario": "2020-09-09T20:15:00.358Z",
"infoPagador": "0123456789",
"devolucoes":[
{
"id": "123ABC",
"rtrId": "D12345678202009091221abcdf098765",
"valor": "110.00",
"horario": {
"solicitacao": "2020-09-09T20:15:00.358Z"
},
"status": "DEVOLVIDO"
}
]
}
]
}

Avatar discord do usuario matheus_efi

matheus_efi

Um exemplo do Pix recebido:

json
//Pix recebido
{ pix:
[ { endToEndId: 'E1803615022211340s08793XPJ',
txid: 'fc9a43k6ff384ryP5f41719',
chave: '2c3c7441-b91e-4982-3c25-6105581e18ae',
valor: '0.01',
horario: '2020-12-21T13:40:34.000Z',
infoPagador: 'pagando o pix' } ] }

Avatar discord do usuario andreimaraujo

andreimaraujo

data: {
nome: 'json_invalido',
mensagem: 'Valores ou tipos de campo inválidos',
erros: [Array]
}

Avatar discord do usuario matheus_efi

matheus_efi

Ver Respostas

Um exemplo de requisição em JS:

js
criarCobrancaImediata(body, token) {
let requisicao = {
method: 'POST',
url: config.pix_url_cob,
headers: {
authorization: 'Bearer ' + token,
'Content-Type': 'application/json',
},
httpsAgent: config.agent,
data: body,
};
const response = axios(requisicao)
.then()
.catch((error) => {
console.log(error.response.data);
});

return response.data;
}
A url e o body seguem o padrão que informei:
url: https://api-pix-h.gerencianet.com.br/v2/cob
body:
{
"calendario": {
"expiracao": 3600
},
"devedor": {
"cnpj": "12345678000195",
"nome": "Empresa de Serviços SA"
},
"valor": {
"original": "00.01"
},
"chave": "sua_chave",
"solicitacaoPagador": "Serviço realizado.",
"infoAdicionais": [
{
"nome": "Despache",
"valor": "placa de carro"
},
{
"nome": "Campo 2",
"valor": "Informação Adicional2 do PSP-Recebedor"
}
]
}

Avatar discord do usuario andreimaraujo

andreimaraujo

const data = JSON.stringify({
grant_type: 'cob.write',
calendario: {
expiracao: 3600,
},
devedor: {
cpf: '12345678909',
nome: 'Francisco da Silva',
},
valor: {
original: value,
},
chave: key,
solicitacaoPagador: 'Cobrança dos serviços prestados.',
});

isso aqui tá certo?

Avatar discord do usuario andreimaraujo

andreimaraujo

com o JSON.stringify

Avatar discord do usuario andreimaraujo

andreimaraujo

Ver Respostas

async receive(receiveDto: { value: string, key: string }) {
const token = await this.auth();

const { value, key } = receiveDto;

const data = JSON.stringify({
grant_type: 'cob.write',
calendario: {
expiracao: 3600,
},
devedor: {
cpf: '12345678909',
nome: 'Francisco da Silva',
},
valor: {
original: value,
},
chave: key,
solicitacaoPagador: 'Cobrança dos serviços prestados.',
});

try {
const { data: response } = await this.httpService
.post(${this.GERENCIA_NET_URL}/cob, data, {
headers: {
Authorization: token,
'Content-Type': 'application/json',
},
})
.toPromise();

console.log(response);
} catch (error) {
console.log(error);
}

return true;
}

Avatar discord do usuario matheus_efi

matheus_efi

Ver Respostas

Boa tarde <@!668949655534698506>! O status de sucesso no cadastro é 201 e um JSON com o webhook que foi cadastrado

Avatar discord do usuario oleoessencial

oleoessencial

Ver Respostas

olá Mine , sim você pode criar um webhook para testar, basta usar o postman com os envios em json 🙂

Avatar discord do usuario matheus_efi

matheus_efi

Ver Respostas

Boa tarde, não é necessário a utilização de senha caso você esteja convertendo de .p12 para .pem, basta utilizar o comando:

js
openssl pkcs12 -in certificado.p12 -out certificado.pem -nodes

Avatar discord do usuario matheus_efi

matheus_efi

Ver Respostas

São diferentes os retornos dependendo do endpoint consumido, se você se refere a criação da cobrança o retorno é:

json
{
"calendario": {
"criacao": "2020-09-09T20:15:00.358Z",
"expiracao": 3600
},
"txid": "7978c0c97ea847e78e8849634473c1f1",
"revisao": 0,
"loc": {
"id": 789,
"location": "pix.example.com/qr/v2/9d36b84fc70b478fb95c12729b90ca25",
"tipoCob": "cob"
},
"location": "pix.example.com/qr/v2/9d36b84fc70b478fb95c12729b90ca25",
"status": "ATIVA",
"devedor": {
"cnpj": "12345678000195",
"nome": "Empresa de Serviços SA"
},
"valor": {
"original": "567.89"
},
"chave": "a1f4102e-a446-4a57-bcce-6fa48899c1d1",
"solicitacaoPagador": "Informar cartão fidelidade"
}
Já o retorno para gerar QRCode a partir do location, é retornado o copia e cola e a imagemQRCode em base 64:
json
{
"qrcode": "00020126880014BR.GOV.BCB.PIX2566qrcodes-pix.gerencianet.com.b...",
"imagemQrcode": "data:image/png;base64,iVBORw0KGgoAAAAOQAAADkCAYAAACIV4s..."
}

Avatar discord do usuario rubenskuhl

rubenskuhl

Ver Respostas

Sim, mas a chave vem no body JSON.

Avatar discord do usuario cleversonmenur

cleversonmenur

Ver Respostas

Olá, @Efí

Ainda na labuta do Webhook em ambiente PaaS. Fiz os seguintes passos e creio estar quase lá:

- Criei uma conta na Amazon para o projeto
- Cadastrei o cartão de crédito
- Provisionei o Amazon API Gateway
- Configurei um custom domain nele
- Configurei o domínio no meu Registrar
- Habilitei o custom domain no API Gateway
- Criei certificado e habilitei o HTTPS
- Baixei o cert webhook da Gerencianet
- Criei uma Trust Store PKCS12
- Coloquei a cadeia da GN lá
- Converti a TS para o formato PEM
- Provisionei um armazenamento Amazon S3
- Subi a TS.pem
- Finalizei a configuração do custom domain
- Ativei o mTLS neste domínio
- Criei uma rota de API para o meu server
- Associei a rota ao custom domain com mTLS

Fui configurando e testando a cada passo. Quase tudo funcionando. A única coisa que não consigo é fazer uma requisição client para testar o mTLS já que não tenho o cert client do webhook.

Então…

- Invoquei o serviço PUT /webhook/{chave} passando no body a url e recebi o seguinte body com o status 400:

{
"nome": "webhook_invalido",
"mensagem": "A requisição na URL informada falhou com o erro: ERR_TLS_CERT_ALTNAME_INVALID"
}

Supus ser algum erro no pem que usei para configurar o mTLS. E já experimentei o seguinte:

- Usei exatamente o CRT que baixei das docs da GN
- Fiz a conversão como citei acima (criando a TS)

Se vocês puderem fazer uma requisição mTLS com o certificado client correto para testar, a UTR é esta:

POST https://mtls.menur.app/vbeta1/establishments/mana/pix

O serviço está retornando 204 fixo para qualquer body json (não obrigatório).

Alguma luz? 🙏

Avatar discord do usuario cleversonmenur

cleversonmenur

Ver Respostas

Mostrando que dá erro HTTP 500 caso o grant_type seja submetido via content-type: application/x-www-form-urlencoded ao invés de application/json. Por isso a configuração OAuth2 não consegue fazer o Fetch Tokens.
imagem enviada na mensagem pelo usuario cleversonmenur

Avatar discord do usuario cleversonmenur

cleversonmenur

Exemplo da configuração do OAuth2 no Insomnia, que é igual ao Postman e outros clients compatíveis. Com isso deixa de ser necessário chamar o serviço de geração de token antes, e sempre que expirar. O client REST mesmo toma conta desse gerenciamento. Além do que, o Insomnia não tem a opção de rodar script que manipula as variáveis de ambiente como o Postman, que faz com que seja possível dar aquele "jeitinho" (no bom sentido) para esse tipo cenário. Vejo que o ideal seria usar o próprio padrão. É relativamente simples de resolver, aceitando não só o JSON como também o Form como Content-Type do serviço de geração do Access Token URL.
imagem enviada na mensagem pelo usuario cleversonmenur

Avatar discord do usuario matheus_efi

matheus_efi

Boa tarde <@!689576312142430253>, temos um endpoint que retorna para você o copia e cola e a imagem Qrcode, o GET /v2/loc/:id/qrcode. Você vai informar o id do Loc que retornamos ao gerar uma cobrança e ao consumir você terá um retorno assim:

js
{
"qrcode": "00020126880014BR.GOV.BCB.PIX2566qrcodes-pix.gerencianet.com.b...",
"imagemQrcode": "data:image/png;base64,iVBORw0KGgoAAAAOQAAADkCAYAAACIV4s..."
}
Mais detalhes aqui https://dev.gerencianet.com.br/docs#section-gerar-qrcode-de-um-location

Avatar discord do usuario lucaspera4486

lucaspera4486

URL url = new URL ("https://api-pix.gerencianet.com.br/v2/webhook/" + CHAVE_PIX);
HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("PUT");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("Authorization", "Bearer =" + authToken);
conn.setRequestProperty("x-skip-mtls-checking", "true");
conn.setSSLSocketFactory(sslsocketfactory);

Avatar discord do usuario matheus_efi

matheus_efi

Ver Respostas

Me parece que você não está capturando o JSON que enviamos no response e sim o retorno do request com o status