|
Inicio → 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 |
Iniciado por Boller, ago., 12 2022 5:42 PM - 1 resposta |
| |
| | | |
|
| |
Membro registado 3.655 mensagems Popularité : +175 (223 votes) |
|
Publicado em agosto, 12 2022 - 5:42 PM |
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/ |
| |
| |
| | | |
|
| | |
| |
Membro registado 3.655 mensagems Popularité : +175 (223 votes) |
|
Publicado em novembro, 28 2023 - 10:32 PM |
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/ |
| |
| |
| | | |
|
| | | | |
| | |
|