PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 25 → Api Rest Send com Digest Auth exemplos - compartilhe aqui os seus tambem, ok
Api Rest Send com Digest Auth exemplos - compartilhe aqui os seus tambem, ok
Débuté par Boller, 12 aoû. 2022 17:42 - 1 réponse
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 12 août 2022 - 17:42
Prezados,

Abaixo segue exemplos de uso da Api Rest Send com Digest Auth exemplos - compartilhe aqui os seus tambem, ok

// Summary: <specify the procedure action>
// Syntax:
// ExecutarRestDigestAuth ()
//
// Parameters:
// None
// Return value:
// None
//
// Example:

// <Specify a usage example>
//
PROCEDURE ExecutarRestDigestAuth()

// Resumo: o procedimento getport info é usado para recuperar informações de status da porta de um gateway DINSTAR-UC2000 gsm que usa autenticação digest.

// autenticação Digest:
// A autenticação Digest é um pouco mais complexa que a Basic porque é feita em duas etapas.
// Na primeira requisição, o servidor envia uma resposta 401 e um cabeçalho WWW-Authenticate com o nonce e os valores que serão utilizados para calcular a resposta a ser dada.
// O cliente retorna uma segunda solicitação com a senha com hash usando o nonce fornecido pelo servidor.

//1ª solicitação

HTTP.IgnoreError = httpIgnoreInvalidCertificate +httpIgnoreExpiredCertificate + httpIgnoreInvalidCertificateName

HTTPRequest ( "https://192.168.10.241/api/get_port_info?port=1,2,3&info_type=imei,imsi,iccid,smsc,type,number,reg,slot,callstate,signal,gprs" )

retorno is string = HTTPGetResult()

//agora recuperamos algumas informações da 1ª solicitacao

sNonce is a string = ExtractString ( HTTPGetResult ( httpHeader ) , 4 , "," )
sOpaque is a string = ExtractString ( HTTPGetResult ( httpHeader ), 5 , "," )
sCookie is string = HTTPGetResult ( httpCookie )
sRealm is string = "Servidor Web"
sQop is string = " auth "

//( Quality Of Protection) Este parâmetro indica o nível de proteção aplicado .
// Deve corresponder a um dos valores retornados pelo servidor. auth ou auth-int

sNonce = ExtractString ( sNonce, 2 , " ")
sOpaque = ExtractString ( sOpaque, 2 , "" )

//String gerada pelo servidor que o cliente deve retornar como

sHeader is string
sCnonce is string = "RdHlfmls"

//string cliente escolhida arbitrariamente aleatoriamente (pode ser o mesmo o tempo todo)

sNoncecount is string = "00000001"
//(Nonce Count) 8 dígitos hexadecimais representando o número de vezes que o valor do parâmetro "nonce" retornado pelo servidor foi usado pelo cliente. nc=00000001 na primeira vez

resposta is string
//Este parâmetro contém 32 dígitos hexadecimais representando o valor calculado pelo cliente comprovando que ele conhece a senha.

//cálculo da resposta para fornecer

HA1 is string = BufferToHexa(HashString(HA_MD5_128, "admin:Web Server:Password2019"))
HA1 = Lower(StringDelete(HA1," "))
HA2 is string = BufferToHexa(HashString(HA_MD5_128,"GET:/api/get_port_info?port=1,2,3&info_type=imei,imsi,iccid,smsc,type,number,reg,slot,callstate,signal,gprs"))
HA2 = Lower(StringDelete(HA2," "))
resposta = BufferToHexa(HashString(HA_MD5_128,HA1+ ":" + sNonce + ":" + sNoncecount + ":" + sCnonce + ":" + sQop + ":" + HA2))
resposta = Lower(StringDelete(resposta," "))

sHeader = " Digest username= ""admin"" , realm=""%1"", nonce=""%2"", uri=""/api/get_port_info?port=1,2,3&info_type=imei,imsi,iccid,smsc,type,number,reg,slot,callstate,signal,gprs"", algorithm=""MD5"", qop=auth, nc=00000001, cnonce=""RdHlfmls"", response=""%3"", opaque=""%4"" "
sHeader = StringBuild(sHeader,sRealm,sNonce, resposta,sOpaque)

//criação da requisição com as demais informações recuperadas no carteiro
cMyRequest is httpRequest

cMyRequest.. URL = "https://192.168.10.241/api/get_port_info?port=1,2,3&info_type=imei,imsi,iccid,smsc,type,number,reg,slot,callstate,signal,gprs"
cMyRequest..Header [ "Cache-Control" ] = "sem cache"
cMyRequest..Header [ " host " ] = "192.168.10.241"
cMyRequest..Header [ " Accept-Encoding" ] = "gzip, deflate"
cMyRequest..Header [ "Cookie" ] = sCookie
cMyRequest..Header [ "Conexão" ] = "keep-alive"
cMyRequest..Header [ " Authorization" ] = sHeader
cMyRequest..IgnoreError = httpIgnoreInvalidCertificate + httpIgnoreExpiredCertificate + httpIgnoreInvalidCertificateName

cMyResponse is httpResponse = HTTPSend ( cMyRequest )

bufResult is Buffer = cMyResponse.. Content

EDT_Resultado = cMyResponse.. Content


site referencia

https://www.developpez.net/forums/d2026242/environnements-developpement/windev/contribuez/authentification-digest-windev/

https://www.developpez.net/forums/d2026242/environnements-developpement/windev/contribuez/authentification-digest-windev/


Site da Intelbras que usa essa tecnica

https://intelbrascontroledeacesso.docs.apiary.io/…

https://intelbrascontroledeacesso.docs.apiary.io/#reference


Deve ficar assim o httprequest:

Outros exemplos a abaixo

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 28 novembre 2023 - 22:32
Exemplo boleto on-line usando api rest do site assas.com

xreserva is int = EDT_RESERVA1
ComandoJSONUAsaas is JSON
asaastoken is string = "$aact_YTU5YTE0M2M2N2

MontaJSon is Variant
MontaJSon.name = xreserva
MontaJSon.description = "Reserva Live nº"+xreserva
MontaJSon.endDate = DateSys()
MontaJSon.value = fvlrpix
MontaJSon.billingType = "CREDIT_CARD"
MontaJSon.chargeType = "INSTALLMENT"
MontaJSon.maxInstallmentCount = xnparcelas
ComandoJSONUAsaas = VariantToJSON(MontaJSon)


MyRequest is restRequest
MyRequest..URL = "https://www.asaas.com/api/v3/paymentLinks"
MyRequest..Method = httpPost
//MyRequest..IgnoreError = 63 //Ignora o erro de SSL 100138 que impedia o consumo da API
MyRequest..ConnectionTimeout = 15s
MyRequest..ContentType = typeMimeJSON
MyRequest..Content = ComandoJSONUAsaas
MyRequest..Header["access_token"] = asaastoken
MyResponse is restResponse = RESTSend(MyRequest)
CodigoRetorno is int = MyResponse.StatusCode
JsonResponse is JSON = MyResponse..Content
fid is string = JsonResponse.id
fname is int = JsonResponse.name
furl is string = JsonResponse.url
ftipo is string = JsonResponse.billingType


IF CodigoRetorno = 200 THEN
IF HReadSeek(T020_ReservaProdutos,T020_ReservaProduto_ID,xreserva,hIdentical) = True THEN
T020_ReservaProdutos.T020_LVOrderPay = fid
T020_ReservaProdutos.T020_Status = "Na Fila"
HModify(T020_ReservaProdutos)
IF HReadSeek(T030_Titulo,T020_ReservaProduto_ID,xreserva,hIdentical) = True THEN
T030_Titulo.t030_LVDtRetorno = DateSys()
T030_Titulo.t030_LVHrRetorno = TimeSys()
T030_Titulo.t030_LVidAsaas = fid
T030_Titulo.t030_LVurl = furl
T030_Titulo.t030_LVTipo = ftipo
T030_Titulo.T030_Status = "Na Fila"
HModify(T030_Titulo)
END
END
amsg is string = "Prezada *"+nomecliente+"* sua reserva de Nº*"+EDT_RESERVA1+"* foi gerado com sucesso."
amsg = amsg+" Abaixo você recebará o Link de pagamento. *Lembre-se: você tem no máximo cinco minutos para efetuar o pagamento,"
amsg = amsg+" sendo que para isso, basta clicar no link abaixo. "
whatsapp_mensagemsimples(whatscliente,amsg)
whatsapp_mensagemsimples(whatscliente,furl)
END


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/