sunset Posted June 29, 2021 Report Share Posted June 29, 2021 Bom dia Já tentei de tudo (rs), bem pelo menos com meus limitados conhecimentos, gostaria de consumir a api da Stone para uma integração do conciliador de cartão, então montei todo o esquema, no POSTMAN tudo ok, usando o cURL tudo ok tambem, mas quanto tento usar os metos contidos em 'MSXML2.ServerXMLHTTP' , sempre me retornar o erro 401, que seria falta ou parâmetros errados, na verdade não sei nem se chega a conectar porque o 401 não tem como debugar melhor, mas seria basicamente assim meu envio. Aqui funciona 100% com cURL curl.exe --location --request PUT "https://conciliation.stone.com.br/v1/merchant/394972625/access-authorization?affiliationCode=f3129ad18f994abbb014e53dffb1b0c3" --header "X-Authorization-Raw-Data: 07956658000110" --header "X-Authorization-Encrypted-Data: 43d2be2913d2ce3e3042e8c6115e41bfe4a2bd90ef71ea3660eaa2201bead1c28b17243c958b47d90e5d2ec3dcd38c7066a710e9f18238cb8b7809c8817fcfe1" --header "Authorization: Bearer 5f260209-7169-4477-ac3c-f802d558a24b" -o resposta.xml -s Mas aqui não funciona. Function Comunica_api_stone_put(vstonecd,vafiliat,vcliappl,vsecretk,vauthraw,vauthenc) cUrl:= 'https://conciliation.stone.com.br/v1/merchant/'+vstonecd+'/access-authorization' oHttp:= CreateObject( 'MSXML2.ServerXMLHTTP' ) oHttp:Open( "PUT" , cUrl, .f. ) oHttp:setRequestHeader("X-Authorization-Raw-Data",vauthraw) oHttp:setRequestHeader("X-Authorization-Encrypted-Data",vsecretk) oHttp:setRequestHeader("Authorization","Bearer "+vcliappl) oHttp:setRequestHeader("Content-Type","application/json") oHttp:send() MSGINFO(ALLTRIM(oHttp:ResponseText),"OK 1") MSGALERT(oHttp:status,"OK 2") IF oHttp:status = 504 MsgAlert("Atenção Erro 504 Ocorreu um timeout e não foi possível concluir o trabalho, tente novamente","Atenção") RETURN .F. ELSEIF oHttp:status = 503 MsgAlert("Atenção Erro 503 Um dos sistemas da Stone falhou, por favor nos informe","Atenção") RETURN .F. ELSEIF oHttp:status = 500 MsgAlert("Atenção Erro 500 Ocorreu um erro interno na API, por favor nos informe","Atenção") RETURN .F. ELSEIF oHttp:status = 404 MsgAlert("Atenção Erro 404 Erro no formato da URL ou no método enviado","Atenção") RETURN .F. ELSEIF oHttp:status = 401 MsgAlert("Atenção Erro 401 Erro no envio Não autorizado para API","Atenção") RETURN .F. ELSEIF oHttp:status = 400 MsgAlert("Atenção Erro 400 Erro nos dados informados para a API","Atenção") RETURN .F. ELSEIF oHttp:status = 202 MsgAlert("Atenção 202 empresa, identificada pelo {application-key}, ainda não tem acesso aos dados de conciliação do lojista identificado pelo {stone-code} informado na URL. O e-mail de solicitação foi enviado para o lojista, para que ele conceda o acesso ou não.","Atenção") RETURN .T. ELSEIF oHttp:status = 200 MsgAlert("Atenção 200 A empresa, identificada pelo {application-key}, já está autorizada a acessar os dados de conciliação do lojista identificado pelo {stone-code} informado na URL.","Atenção") RETURN .T. ENDIF RETURN .T. Alguma Dica, ou vou ter que morrer usando o BAT mesmo com o cURL ? Quote Link to comment Share on other sites More sharing options...
macs Posted June 29, 2021 Report Share Posted June 29, 2021 CreateObject( 'MSXML2.ServerXMLHTTP.6.0' ) ou CreateObject( 'MSXML2.ServerXMLHTTP.5.0' ) Quote Link to comment Share on other sites More sharing options...
macs Posted June 29, 2021 Report Share Posted June 29, 2021 oHttp:Open( "PUT" , cUrl, .f. ) --> Não seria oHttp:Open( "POST" , cUrl, .f. ) Quote Link to comment Share on other sites More sharing options...
sunset Posted June 29, 2021 Author Report Share Posted June 29, 2021 23 minutos atrás, macs disse: CreateObject( 'MSXML2.ServerXMLHTTP.6.0' ) ou CreateObject( 'MSXML2.ServerXMLHTTP.5.0' ) Já tentei com as 2 variantes também não funcionou, então deixa a padrão. Quanto ao PUT seria um envio de TOKEN para registrar tem ele a mesma variação com GET para consultar se o token esta gerado, mas ambos retorna 401. https://conciliacao.stone.com.br/reference#concessao-de-acesso Quote Link to comment Share on other sites More sharing options...
macs Posted June 29, 2021 Report Share Posted June 29, 2021 Você chegou a registrar as Dll's \windows\syswow64\regsvr32.exe msxml5.dll ou \windows\system32\regsvr32.exe msxml5.dll Quote Link to comment Share on other sites More sharing options...
sunset Posted June 29, 2021 Author Report Share Posted June 29, 2021 3 horas atrás, macs disse: Você chegou a registrar as Dll's \windows\syswow64\regsvr32.exe msxml5.dll ou \windows\system32\regsvr32.exe msxml5.dll Nunca tentei, nem sabia que deveria , mas apresenta a mensagem , executei dentro da pasta syswow64 e na system em ambas da a mesma mensagem. Quote Link to comment Share on other sites More sharing options...
sunset Posted June 29, 2021 Author Report Share Posted June 29, 2021 \windows\syswow64\regsvr32.exe msxml6.dll com a 6 deu certo , deixo ela? Quote Link to comment Share on other sites More sharing options...
giovanyvecchi Posted July 2, 2021 Report Share Posted July 2, 2021 Em 29/06/2021 at 09:55, sunset disse: oHttp:Open( "PUT" , cUrl, .f. ) O certo seria: oHttp:Open("POST",cUrl,.F.) Tente desta maneira: oHttp:setRequestHeader("Authorization","Bearer "+vcliappl) oHttp:setRequestHeader("Content-Type","application/json") oHttp:Send("X-Authorization-Raw-Data=07956658000110&X-Authorization-Encrypted-Data=43d2be2913d2ce3e3042e8c6115e41bfe4a2bd90ef71ea3660eaa2201bead1c28b17243c958b47d90e5d2ec3dcd38c7066a710e9f18238cb8b7809c8817fcfe1") Quote Link to comment Share on other sites More sharing options...
sunset Posted July 2, 2021 Author Report Share Posted July 2, 2021 O comando e com PUT mas tenho outros para teste, com POST e GET, mas ambos também não funcionam, ja usando o cURL em maquinas que não estão com windows 10 toda atulizada tambem apresenta erros de autenticação, que provavelmente e o erro do CreateObject, na STONE ele faz uma autenticação com TLS 1.2 segundo a documentação e acredito que com esse instanciamento não e possível. no cURL acrescentei um parâmetro -k e deu certo, em outras maquinas. Grato a todos pelas dicas, mas vamos ficar no bat com cURL mesmo. Outra dica importante o hb_unzipfile não descompacta GZIP tiver que colocar o 7z.exe e dll na pasta para poder descompactar. Quote Link to comment Share on other sites More sharing options...
vailtom Posted July 14, 2021 Report Share Posted July 14, 2021 Érick, Se você colocar o link a gente promete colaborar baixando sem problemas a sua classe. Pode ser que a galera não use, pois tem muita dica boa aqui no fórum e em outros locais gratuitos, mas fica em paz a gente te ajuda sim, alias sempre ajudamos sem cobrar nada. Quote Link to comment Share on other sites More sharing options...
Eric.Developer Posted July 14, 2021 Report Share Posted July 14, 2021 Sugiro você aprender a usar o pacote cURL, sem necessidade de utilitários externos. O exemplo e a forma habitual que poucos sabem usar, é burocrático e confuso. API/REST é amplamente utilizado e fiz algumas integrações com este pacote. Construí uma classe que facilita o desenvolvimento e a integração. Um pequeno exemplo em DevClub Em certo momento, eu gostaria de tornar a minha classe open source, se os usuários [x]Harbour colaborarem financeiramente. Técnicas e recursos muito úteis aos sistemas. [],idlagam.comfacebook.com/DevClubForDevelopers Em 29/06/2021 at 09:55, sunset disse: Bom dia Já tentei de tudo (rs), bem pelo menos com meus limitados conhecimentos, gostaria de consumir a api da Stone para uma integração do conciliador de cartão, então montei todo o esquema, no POSTMAN tudo ok, usando o cURL tudo ok tambem, mas quanto tento usar os metos contidos em 'MSXML2.ServerXMLHTTP' , sempre me retornar o erro 401, que seria falta ou parâmetros errados, na verdade não sei nem se chega a conectar porque o 401 não tem como debugar melhor, mas seria basicamente assim meu envio. Aqui funciona 100% com cURL curl.exe --location --request PUT "https://conciliation.stone.com.br/v1/merchant/394972625/access-authorization?affiliationCode=f3129ad18f994abbb014e53dffb1b0c3" --header "X-Authorization-Raw-Data: 07956658000110" --header "X-Authorization-Encrypted-Data: 43d2be2913d2ce3e3042e8c6115e41bfe4a2bd90ef71ea3660eaa2201bead1c28b17243c958b47d90e5d2ec3dcd38c7066a710e9f18238cb8b7809c8817fcfe1" --header "Authorization: Bearer 5f260209-7169-4477-ac3c-f802d558a24b" -o resposta.xml -s Mas aqui não funciona. Function Comunica_api_stone_put(vstonecd,vafiliat,vcliappl,vsecretk,vauthraw,vauthenc) cUrl:= 'https://conciliation.stone.com.br/v1/merchant/'+vstonecd+'/access-authorization' oHttp:= CreateObject( 'MSXML2.ServerXMLHTTP' ) oHttp:Open( "PUT" , cUrl, .f. ) oHttp:setRequestHeader("X-Authorization-Raw-Data",vauthraw) oHttp:setRequestHeader("X-Authorization-Encrypted-Data",vsecretk) oHttp:setRequestHeader("Authorization","Bearer "+vcliappl) oHttp:setRequestHeader("Content-Type","application/json") oHttp:send() MSGINFO(ALLTRIM(oHttp:ResponseText),"OK 1") MSGALERT(oHttp:status,"OK 2") IF oHttp:status = 504 MsgAlert("Atenção Erro 504 Ocorreu um timeout e não foi possível concluir o trabalho, tente novamente","Atenção") RETURN .F. ELSEIF oHttp:status = 503 MsgAlert("Atenção Erro 503 Um dos sistemas da Stone falhou, por favor nos informe","Atenção") RETURN .F. ELSEIF oHttp:status = 500 MsgAlert("Atenção Erro 500 Ocorreu um erro interno na API, por favor nos informe","Atenção") RETURN .F. ELSEIF oHttp:status = 404 MsgAlert("Atenção Erro 404 Erro no formato da URL ou no método enviado","Atenção") RETURN .F. ELSEIF oHttp:status = 401 MsgAlert("Atenção Erro 401 Erro no envio Não autorizado para API","Atenção") RETURN .F. ELSEIF oHttp:status = 400 MsgAlert("Atenção Erro 400 Erro nos dados informados para a API","Atenção") RETURN .F. ELSEIF oHttp:status = 202 MsgAlert("Atenção 202 empresa, identificada pelo {application-key}, ainda não tem acesso aos dados de conciliação do lojista identificado pelo {stone-code} informado na URL. O e-mail de solicitação foi enviado para o lojista, para que ele conceda o acesso ou não.","Atenção") RETURN .T. ELSEIF oHttp:status = 200 MsgAlert("Atenção 200 A empresa, identificada pelo {application-key}, já está autorizada a acessar os dados de conciliação do lojista identificado pelo {stone-code} informado na URL.","Atenção") RETURN .T. ENDIF RETURN .T. Alguma Dica, ou vou ter que morrer usando o BAT mesmo com o cURL ? Quote Link to comment Share on other sites More sharing options...
emotta Posted July 15, 2021 Report Share Posted July 15, 2021 Segue o fonte que uso sem problemas já a um bom tempo. Hoje é usada diariamente pra subir arquivos para o S3 da AWS milhares de vezes ao dia e sem problemas. // ****************** COLOCAR A CALLENDPOINT no FUNGENA.PRG // cMode = POST/PUT/DELETE/GET // cJSon = JSon de chamada da API // aHeader = {{"Content-Type","application/json" }} (ESTE É O DEFAULT CASO NAO INFORMADO) Function CallEndPoint(cMode,cLink,cJSon,aHeader,nStatus_code) Local cResp := "" Local nI Static oHTTP nStatus_code := 0 If aHeader == NIL aHeader := {{"Content-Type","application/json" }} EndIf // oHTTP := CreateObject( "MSXML2.XMLHTTP" ) If oHTTP == nil oHTTP := CreateObject( "MSXML2.ServerXMLHTTP.6.0" ) oHTTP:SetTimeouts(600000, 600000, 600000, 600000) EndIf oHTTP:Open( cMode, cLink, .F. ) For nI := 1 to Len(aHeader) oHTTP:SetRequestHeader( aHeader[nI,1],aHeader[nI,2] ) Next Try oHTTP:Send(cJson) while oHTTP:readyState # 4 oHTTP:waitForResponse(1000) enddo nStatus_code := oHTTP:status cResp := oHTTP:responseText Catch End oHTTP:Abort() // Release oHttp // oHTTP := NIL HB_GCALL(.t.) Return cResp Quote Link to comment Share on other sites More sharing options...
sunset Posted July 15, 2021 Author Report Share Posted July 15, 2021 Bom Dia. Eu consigo consumir a API em outros projetos também sem problemas, meu único problema e de fato com a STONE, mas acredito que seja por este motivo anexo na imagem usando o cURL.EXE tive que adicionar o parâmetro -k que é um modo inseguro para ele conseguir autenticar também, acredito que a ativação no objeto não se seja de forma nativa, então e bola frente ja que esta funcionando, ou problema também seria no formato devolvido esta compactado com gZIP e não temos como descompactar via FW, então usei mais uma vez algo externo, mas para o usuário esta tudo escondido, somente aquele sentimento de gambiarras para resolver coisas simples. Quote Link to comment Share on other sites More sharing options...
emotta Posted July 15, 2021 Report Share Posted July 15, 2021 43 minutos atrás, sunset disse: Bom Dia. Eu consigo consumir a API em outros projetos também sem problemas, meu único problema e de fato com a STONE, mas acredito que seja por este motivo anexo na imagem usando o cURL.EXE tive que adicionar o parâmetro -k que é um modo inseguro para ele conseguir autenticar também, acredito que a ativação no objeto não se seja de forma nativa, então e bola frente ja que esta funcionando, ou problema também seria no formato devolvido esta compactado com gZIP e não temos como descompactar via FW, então usei mais uma vez algo externo, mas para o usuário esta tudo escondido, somente aquele sentimento de gambiarras para resolver coisas simples. após o oHTTP := CreateObject( "MSXML2.ServerXMLHTTP.6.0" ) coloque: oHttp:setOption(2) := 13056 Quote Link to comment Share on other sites More sharing options...
toninhofwi Posted July 15, 2021 Report Share Posted July 15, 2021 Estou usando a DLL activeX CHILKAT, é uma ótima opção: https://www.chilkatsoft.com/refdoc/activex.asp Não tem exemplos em Harbour mas os exemplos em FoxPro adaptados com muita facilidade. Abraços. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.