PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 25 → Exemplo Pix Banco do Brasil fornecido pelo Silvio Gontijo
Exemplo Pix Banco do Brasil fornecido pelo Silvio Gontijo
Iniciado por Boller, set., 03 2022 3:10 PM - 2 respostas
Membro registado
3.659 mensagems
Popularité : +175 (223 votes)
Publicado em setembro, 03 2022 - 3:10 PM
PROCEDURE APIPIX_BB()

// HTTP Status code
// 200-299 A requisição foi recebida e executada com sucesso.
// 400-499 - A requisição contém um erro de sintaxe ou formatação e não pode ser realizada.
// 500-599 - O servidor possui um erro e não pode executar uma requisição aparentemente válida.

//HTTP Status Code mais utilizados são:
// 200 OK
// 201 Created
// 400 Bad Request
// 401 Unauthorized
// 403 Forbidden
// 404 Not Found
// 405 Method Not Allowed
// 429 Too Many Requests
// 500 Internal Server Error
// 503 Service Unavailable
//-------------------------------------------------------------------------------------------------

//GERA TOKEN

conteudo is ANSI string = "grant_type=client_credentials&scope=cob.read cob.write pix.read pix.write"

solicitacao_http is restRequest

solicitacao_http..URL = "https://oauth.bb.com.br/oauth/token"
solicitacao_http..Method = httpPost
solicitacao_http..Header["Content-Type"] = "application/x-www-form-urlencoded"
solicitacao_http..Header["Authorization"] = CADLOJA.PixBasicToken
solicitacao_http..Content = conteudo

resposta_http is restResponse = RESTSend(solicitacao_http)

IF ErrorOccurred THEN
Error(ErrorInfo(errFullDetails))
ELSE
gRetornoJson = resposta_http..Content
gsToken = gRetornoJson.access_token
IF gsToken = "0" THEN
erroToken is string = gRetornoJson.error_description
Info("Erro na geração do Token!" + CR + "Motivo: " + erroToken)
RETURN
END
END

gsToken = NoSpace(gsToken)

gsToken = Replace(gsToken,CR,"")

//CRIA COBRANCA

solicitacao_http..URL = "https://api.bb.com.br/pix/v1/cobqrcode/?gw-dev-app-key="+CADLOJA.PixDevAppKey

solicitacao_http..Method = httpPut
solicitacao_http..Header["Content-Type"] = "application/json"
solicitacao_http..Header["Authorization"] = "Bearer " + gsToken

sCNPJCPF is string = NoCharacter(CADCLI.CPF,"./- ",sscAll)

sNomeCli is string = CADCLI.Nome

IF sCNPJCPF = "99999999999" THEN
sNomeCli = ""
sCNPJCPF = ""
END

sValor is string = NumToString(EDT_vlrLiquido, "6.2fS")

conteudo = StringBuild([
{
"calendario":
{
"expiracao":36000
},
"devedor":
{
"cpf":"%1",
"nome":"%2"
},
"valor":
{
"original":"%3"
},
"chave":"%4",
"solicitacaoPagador":"Cobranca dos servicos prestados."
}
],sCNPJCPF,sNomeCli,sValor,CADLOJA.PixChave)

solicitacao_http..Content = conteudo

resposta_http = RESTSend(solicitacao_http)

sTextoimagem is string

IF ErrorOccurred THEN
Error(ErrorInfo(errFullDetails))
ELSE
gRetornoJson = resposta_http..Content
sTextoimagem = gRetornoJson.textoImagemQRcode
IF sTextoimagem = "0" THEN
msgerro is string = gRetornoJson.erros[1].mensagem
Info("Erro na geração da cobrança!" + CR + "Motivo: " + msgerro)
RETURN
END
BAC_Pix = sTextoimagem
gsTxid = gRetornoJson.txid
END

ImageLogo is Image
ImageLogo = "\sgsis\segis\imagens\LogoSG.png"

MyBarCode is BarCode
MyBarCode.Content = sTextoimagem
MyBarCode.TypeBarCode = BC_QRCODE
MyBarCode.Image = ImageLogo
MyBarCode.CorrectionError = qrcodeLevelH
MyBarCode.ImageProportion = 5

ImageBarCode is Image = BCToImage(MyBarCode,200,200)

IMG_Pix = ImageBarCode

// BAC_Pix..X = 387 // se quiser mostrar somente o QrCode
// BAC_Pix..Y = 324

IMG_Pix..X = 398 // se quiser mostra o QrCode com Logo no meio
IMG_Pix..Y = 323


// CONSULTA COBRANCA
SC_AguardandoPix..X = 10
SC_AguardandoPix..Y = 330

gnCountTimer = 0
nCountMinutos is int
minutostexto is int = 4
segundostexto is int = 60
STC_minutos = "Restando " + NumToString(minutostexto, "1d") + " minutos" + " e " + NumToString(segundostexto, "2d") + " segundos"
IMG_Aguarda..Visible = True
STC_Aguarda..Visible = True
STC_minutos..Visible = True
TimerSys(Consulta, 500, 1)

INTERNAL PROCEDURE Consulta
gnCountTimer++
nCountMinutos ++
IF nCountMinutos = 12 THEN
minutostexto --
segundostexto = 60
nCountMinutos = 0
ELSE
segundostexto -= 5
END
STC_minutos = "Restando " + NumToString(minutostexto, "1d") + " minutos" + " e " + NumToString(segundostexto, "2d") + " segundos"
IF gnCountTimer = 60 THEN
EndTimerSys(1)
Info("Transação PIX Não Concluída!")
SC_AguardandoPix..X = -553
IMG_Pix..X = -148
RETURN
END
gsToken = NoSpace(gsToken)
gsToken = Replace(gsToken,CR,"")

solicitacao_http..URL = "https://api.bb.com.br/pix/v1/cob/"+gsTxid+"?gw-dev-app-key="+CADLOJA.PixDevAppKey

solicitacao_http..Method = httpGet
solicitacao_http..Header["Authorization"] = "Bearer " + gsToken

resposta_http = RESTSend(solicitacao_http)

IF ErrorOccurred THEN
Error(ErrorInfo(errFullDetails))
ELSE
gRetornoJson = resposta_http..Content
gsStatus = gRetornoJson.status
IF gsStatus = "CONCLUIDA" THEN
EndTimerSys(1)
Info("PIX - CREDITADO com Sucesso !!!")
SC_AguardandoPix..X = -553
IMG_Pix..X = -148
RETURN
END
END
END

// Verificação de Recebimento -> gsStatus

// ATIVA: a cobrança está disponível, porém ainda não ocorreu pagamento;

// CONCLUIDA: a cobrança encontra-se paga. Não se pode alterar e nem remover uma cobrança cujo status esteja “CONCLUÍDA”;

// EM_PROCESSAMENTO: liquidação em processamento;

// NAO_REALIZADO: indica que a devolução não pode ser realizada em função de algum erro durante a liquidação, como por exemplo, saldo insuficiente.;

// DEVOLVIDO: cobrança com devolução realizada pelo Sistema de Pagamentos Instantâneos (SPI);

//REMOVIDA_PELO_USUARIO_RECEBEDOR: foi solicitada a remoção da cobrança; a critério do usuário;

//REMOVIDA_PELO_PSP: recebedor, por conta de algum critério, solicitou a remoção da cobrança.

//Adicionalmente ao status, a automação do usuário recebedor obterá acesso ao payload assinado que representa a cobrança, para fins de controle.


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
3.659 mensagems
Popularité : +175 (223 votes)
Publicado em setembro, 09 2022 - 11:42 PM
PROCEDURE APIPIX_Santander()
// GERA TOKEN

conteudo is ANSI string = "client_id=" + CADLOJA.PixClientId + "&client_secret=" + CADLOJA.PixClientSecret
solicitacao_http is restRequest
solicitacao_http..URL = "https://trust-pix.santander.com.br/oauth/token?grant_type=client_credentials"
solicitacao_http..Method = httpPost
solicitacao_http..Header["Content-Type"] = "application/x-www-form-urlencoded"
solicitacao_http..Content = conteudo
solicitacao_http..ClientCertificate = CADLOJA.PixArqCert
solicitacao_http..ClientCertificatePassword = CADLOJA.PixSenhaCert
resposta_http is restResponse = RESTSend(solicitacao_http)



IF ErrorOccurred THEN
Error(ErrorInfo(errFullDetails))
ELSE
gRetornoJson = resposta_http..Content
gsToken = gRetornoJson.access_token
END


//GERA COBRANCA (PIX)
gsToken = NoSpace(gsToken)
gsToken = Replace(gsToken,CR,"")

solicitacao_http..URL = "https://trust-pix.santander.com.br/api/v1/cob/" + SysDateTime()+SysDateTime()
solicitacao_http..Method = httpPut
solicitacao_http..Header["Content-Type"] = "application/json"
solicitacao_http..Header["Authorization"] = "Bearer " + gsToken

sCNPJCPF is string = CADLOJA.PixChave
sValor is string = NumToString(EDT_Valor2, "6,2f")
sValor = NoSpace(sValor)

conteudo = StringBuild([
{
"calendario": {
"expiracao": "3600"
},
"valor": {
"original": "%1"
},
"chave": "%2",
"solicitacaoPagador": "",
"infoAdicionais": []
}
],sValor,CADLOJA.PixChave)


solicitacao_http..Content = conteudo

resposta_http = RESTSend(solicitacao_http)

IF ErrorOccurred THEN
Error(ErrorInfo(errFullDetails))
ELSE
gRetornoJson = resposta_http..Content
spayload is ANSI string = gRetornoJson.location
GeraPix_Dinamico(spayload)
gsTxid = gRetornoJson.txid
END

//CONSULTA COBRANCA

gnCountTimer = 0
nCountMinutos is int
minutostexto is int = 4
segundostexto is int = 60
sPix is string
IMG_Aguarda..Visible = True
STC_Aguarda..Visible = True
STC_minutos..Visible = True
TimerSys(Consulta, 500, 1)

INTERNAL PROCEDURE Consulta
gnCountTimer++
nCountMinutos ++
IF nCountMinutos = 12 THEN
minutostexto --
segundostexto = 60
nCountMinutos = 0
ELSE
segundostexto -= 5
END
STC_minutos = "Restando " + NumToString(minutostexto, "1d") + " minutos" + " e " + NumToString(segundostexto, "2d") + " segundos"
IF gnCountTimer = 60 THEN
EndTimerSys(1)
IMG_Aguarda..Visible = False
STC_Aguarda..Visible = False
STC_minutos..Visible = False
gbTransacaoOk = 0
Close(WIN_PIX)
END
gsToken = NoSpace(gsToken)
gsToken = Replace(gsToken,CR,"")

solicitacao_http..URL = "https://trust-pix.santander.com.br/api/v1/cob/" + gsTxid
solicitacao_http..Method = httpGet
solicitacao_http..Header["Authorization"] = "Bearer " + gsToken
resposta_http = RESTSend(solicitacao_http)

IF ErrorOccurred THEN
Error(ErrorInfo(errFullDetails))
ELSE
gRetornoJson = resposta_http..Content
gsStatus = gRetornoJson.status
sPix = gRetornoJson.pix[1]
IF gsStatus = "CONCLUIDA" AND sPix <> "" THEN
EndTimerSys(1)
gbTransacaoOk = 1
Close(WIN_PIX)
END
END
END


Santander:

1- Obter as chaves de acesso Client ID e Client Secret (criar o aplicativo API PIX de cada cliente via site developers do banco).

2 - Instalar o certificado digital do cliente.

2- Exportar esse certificado pra dentro do diretório de execução do sistema (Via Painel de Controle -> Opções de Internet -> Conteudo -> Certificados).

Na exportação selecionar "Sim exportar chave privada" na primeira tela.
Na segunda tela selecionar "Exportar todas as propriedades estendidas" além das que ja estão marcadas.

Esse certificado eh o mesmo que emite NFe

solicitacao_http..ClientCertificate = CADLOJA.PixArqCert

"https://trust-pix.santander.com.br/api/v1/cob/" + SysDateTime()+SysDateTime()

aqui os 2 sysdatetime eu so usei pra criar o txid, mas pode ser qualquer coisa entre 26 e 35 caracteres

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Publicado em abril, 25 2024 - 11:37 PM
Boa Noite

Estou tentando fazer a verificação do PIX em VB.net e não estou conseguindo.
Já consegui gerar o Token, mas verificar os PIXs do dia não tem jeito, alguém consegue me dar um auxílio nesta questão?

Aguardo