Ir para conteúdo
  • Cadastre-se

datilas

Membros
  • Total de ítens

    566
  • Registro em

  • Última visita

  • Days Won

    2

Tudo que datilas postou

  1. o que esta me encafifando é essa mensagem "Unsupported Media Type" tenta assim IdHTTPConexao.Request.Clear; IdHTTPConexao.Request.ContentType := 'application/json'; IdHTTPConexao.Request.CharSet := 'utf-8'; IdHTTPConexao.Request.CustomHeaders.Clear; IdHTTPConexao.Request.CustomHeaders.AddValue('Authorization', 'Bearer ' + self.fToken); //IdHTTPConexao.Request.CustomHeaders.AddValue('Content-Type', 'application/json'); IdHTTPConexao.Response.ContentType := 'application/json'; IdHTTPConexao.Response.CharSet := 'utf-8';
  2. // comenta essa linha IdHTTPConexao.Request.CustomHeaders.AddValue('Content-Type', iJSONEnviar.RequestContentType); IdHTTPConexao.Request.CustomHeaders.AddValue('Authorization', 'Bearer ' + self.fToken); //deixa essa IdHTTPConexao.Request.CustomHeaders.AddValue('Content-Type', 'application/json');//deixa essa // comenta essa linha IdHTTPConexao.Request.CustomHeaders.AddValue('Content-Disposition', 'form-data; name="sku"'); IdHTTPConexao.Response.CharSet := 'UTF-8'; código limpo pra não confundir: Var iRespostaIfood: String; iJSON: String; iJSONStream, AResponseContent: TStringStream; Begin AResponseContent := TStringStream.Create(''); Try iJSON := ('{"merchantId": MerchantID,' + //CÓD DO RESTAURANTE '"externalCode":"205",' + '"availability": "AVAILABLE",' + '"name": "X BURGUER - TESTE",' + '"description": "PÃO, HAMBURGUER E QUEIJO",' + '"order": 1,' + '"schedules": [],' + '"price":{' + '"originalValue": 0,' + '"promotional": false,' + '"value": 12.50}' + '}'); mRetorno.Lines.Clear; mRetorno.Lines.Add(iJSON); iJSONStream := TStringStream.Create(iJSON); //Configura o HTTP IdHTTPConexao.Request.Clear; IdHTTPConexao.Request.CustomHeaders.Clear; IdHTTPConexao.Request.CustomHeaders.AddValue('Authorization', 'Bearer ' + self.fToken); IdHTTPConexao.Request.CustomHeaders.AddValue('Content-Type', 'application/json'); IdHTTPConexao.Response.CharSet := 'UTF-8'; Try IdHTTPConexao.Post('https://pos-api.ifood.com.br/v1.0/skus', iJSONStream, AResponseContent); iRespostaIfood := AResponseContent.DataString; //201 = Indica que novos parâmetros foram criados com sucesso If IdHTTPConexao.ResponseCode = 201 Then Application.MessageBox(PWideChar('Produto Cadastrado com Sucesso!'), 'Informação', MB_OK + MB_ICONINFORMATION); Except On e: EIdHTTPProtocolException Do Begin If (e.ErrorCode <> 200) Or (e.ErrorCode <> 201) Then Begin Application.MessageBox(PWideChar('Atenção! Ocorreu ao Cadastrar Produto no iFood. ' + e.ErrorMessage), 'Aviso', MB_OK + MB_ICONWARNING); Exit; End; End; End; Finally FreeAndNil(iJSONStream); FreeAndNil(AResponseContent); End;
  3. tenta ssim: Var iStringListProduto: TStringList; iRespostaIfood: String; iJSON: String; iJSONStream, AResponseContent: TStringStream; // iJSONEnviar : TIdMultipartFormDataStream; Begin // iJSONEnviar := TIdMultiPartFormDataStream.Create; AResponseContent := TStringStream.Create(''); Try iJSON := ('{"merchantId": MerchantID,' + //CÓD DO RESTAURANTE '"externalCode":"205",' + '"availability": "AVAILABLE",' + '"name": "X BURGUER - TESTE",' + '"description": "PÃO, HAMBURGUER E QUEIJO",' + '"order": 1,' + '"schedules": [],' + '"price":{' + '"originalValue": 0,' + '"promotional": false,' + '"value": 12.50}' + '}'); mRetorno.Lines.Clear; mRetorno.Lines.Add(iJSON); iJSONStream := TStringStream.Create(iJSON); //Configura o HTTP IdHTTPConexao.Request.Clear; IdHTTPConexao.Request.CustomHeaders.Clear; IdHTTPConexao.Request.CustomHeaders.AddValue('Content-Type', iJSONEnviar.RequestContentType); IdHTTPConexao.Request.CustomHeaders.AddValue('Authorization', 'Bearer ' + self.fToken); IdHTTPConexao.Request.CustomHeaders.AddValue('Content-Type', 'application/json'); //IdHTTPConexao.Request.CustomHeaders.AddValue('Content-Disposition', 'form-data; name="sku"'); IdHTTPConexao.Response.CharSet := 'UTF-8'; Try IdHTTPConexao.Post('https://pos-api.ifood.com.br/v1.0/skus', iJSONStream, AResponseContent); iRespostaIfood := AResponseContent.DataString; //201 = Indica que novos parâmetros foram criados com sucesso If IdHTTPConexao.ResponseCode = 201 Then Application.MessageBox(PWideChar('Produto Cadastrado com Sucesso!'), 'Informação', MB_OK + MB_ICONINFORMATION); Except On e: EIdHTTPProtocolException Do Begin If (e.ErrorCode <> 200) Or (e.ErrorCode <> 201) Then Begin Application.MessageBox(PWideChar('Atenção! Ocorreu ao Cadastrar Produto no iFood. ' + e.ErrorMessage), 'Aviso', MB_OK + MB_ICONWARNING); Exit; End; End; End; Finally If Assigned(iJSONStream) Then FreeAndNil(iJSONStream); FreeAndNil(AResponseContent); End;
  4. pelo que vi na documentação não preencher ('"schedules": [],' +) caso não exista. { "merchantId": 999999, "ID do Restaurante (MerchantID)", "externalCode": "155", "COD PDV", "availability": "AVAILABLE", --"Disponibilidade do item", "name": "X BURGUER", "Nome do Item", "description": "PÃO, HAMBURGUER E QUEIJO", --" Descrição do Item (Composição)", "order": 0: "Ordem para o item aparecer no cardápio", "price": { "originalValue": 0: --"Valor Original do Item (Somente preencher caso o item estiver em promoção)", "promotional": false: --"Item está em promoção?" "value": 12 --"Valor do item (Valor que vai para aparecer na plataforma Ifood)" } } //preencher apenas se existir (schedules) { "merchantId": 999999, "ID do Restaurante (MerchantID)", "externalCode": 9430, "COD PDV" "availability": "AVAILABLE", --"Disponibilidade do item", "name": "Esfiha de Carne", "Nome do Item" "description": "Recheio com Mussarela.", --"Descrição do Item (Composição)", "schedules": [{ --"Disponibilidade dos itens " Dias da semana e horário funcionamento "" "dayOfWeek": "MONDAY" --" Dia da semana que funciona" }, { "dayOfWeek": "FRIDAY" --" Dia da semana que funciona" } ], "order": 1, --"Ordem para o item aparecer no cardápio", "price": { "Preço" "originalValue": 3.96, --"Valor Original do Item (Somente preencher caso o item estiver em promoção)" "promotional": true, --" Item está em promoção?" "value": 1.98 --"Valor promocional do item (Valor que vai para aparecer na plataforma Ifood)" } }
  5. pode ser por causa do acento na palavra "PÃO" tente converter o texto para utf-8 ou tira o acento para testar
  6. muito obrigado.
  7. aqui eu tenho uma vps com owncloud a versão Enterprise tem um plugin que filtra arquivos por extensão o owncloud funciona como um dropbox então ele sobe o arquivo assim que possivel o que eu faço é compactar a pasta de xml's e o backup do db e altero a extensão para uma especifica ".bkx" e filtro no owncloud por essa extensão quando o cliente é infectado por um vírus a ultima versão que vai ter no meu backup é valida já que ransomware encripta o arquivo e altera a extensão, ele não afeta o arquivo que já subiu. sem contar que eu tenho total controle ao owncloud então eu posso habilitar e desabilitar um cliente sempre que necessário
  8. isso é um comportamento de keylogger dificilmente você vai conseguir que um antivírus te deixe em paz, se voce precisa de um bugtrace voce poderia usar : http://madshi.net/madExceptDescription.htm https://www.eurekalog.com/downloads_delphi.php por exemplo, mas existe outros.
  9. remova o IdHTTP1 do seu formulario e tente usar assim: Var code: Integer; sResponse: String; Json: String; JsontoSend, AResponseContent: TStringStream; iStatusCode: Integer; http: TIdHTTP; Begin Json := '{"Customer": { "DocumentType" : "CNPJ", "DocumentNumber" : "11229082000167" }, "Driver": { "PhoneCountry": "+55", "PhoneNumber": "19999690130", "Name": "Daniel Marcelo"} }'; JsonToSend := TStringStream.Create(Json); AResponseContent := TStringStream.Create(''); http := TIdHTTP.Create(Nil); Try http.Request.CharSet := 'utf-8'; http.Request.ContentType := 'application/json'; http.Request.CustomHeaders.AddValue('AppKey', '58fb05c3-4e8b-4929-b7df-95bd261035c9'); http.Request.CustomHeaders.AddValue('RequesterKey', '629eda6f-9df5-40e7-a94e-4c54cec83a15'); http.Response.ContentType := 'applicattion/json'; http.Response.CharSet := 'utf-8'; Try http.Post('https://api.tudoentregue.com.br/v1/customers/AddDriver', JsontoSend, AResponseContent); Except On E: Exception Do Begin Memo1.Lines.Clear; Memo1.Lines.Add('Error on Response Code: ' + InttoStr(http.ResponseCode)); Memo1.Lines.Add('Error on Response Text: ' + http.ResponseText); Memo1.Lines.Add('Error on Request: ' + sLineBreak + e.Message); exit; End; End; Memo1.Lines.Clear; Memo1.Lines.Add('Response Content: ' + AResponseContent.DataString); Memo1.Lines.Add('Response Code: ' + InttoStr(http.ResponseCode)); Memo1.Lines.Add('Response Text: ' + http.ResponseText); Finally JsontoSend.Free; AResponseContent.Free; http.Free; End; eu adicionei essas duas linhas: Memo1.Lines.Add('Error on Response Code: ' + InttoStr(http.ResponseCode)); Memo1.Lines.Add('Error on Response Text: ' + http.ResponseText); porque caso ResponseCode for 403,404,422 o indy vai levantar um except sendo que //IdHTTP1.ResponseCode = 403 Motorista não Relacionado. *response vazio* //IdHTTP1.ResponseCode = 404 Motorista não Localizado. *response vazio* então você não conseguiria tratar o erro de Motorista não Localizado por exemplo. caso tenha resolvido seu problema marque o post como melhor resposta clicando no sinal de no canto superior esquerdo do post
  10. se quiser usar https é só ligar um IdSSLIOHandlerSocketOpenSSL1 ao IdHTTP1 e colocar as dlls ssleay32.dll e libeay32.dll na mesma pasta da sua aplicação
  11. consegui: Json := '{"PhoneCountry": "+55", "PhoneNumber": "19999999999", "Name": "Daniel", "IMEI": "", "DeviceKey": "", "DeviceId": "",'; Json := Json + '"DeviceType": "MarcaModelo", "OSName": "Android", "OSVersion": "7.0", "Email": "[email protected]", "ZipCode": "13400000", "City": "Piracicaba", "State": "Sao Paulo", "Enable": false}'; AResponseContent := TStringStream.Create(''); JsonToSend := TStringStream.Create(utf8Encode(Json)); Try IdHTTP1.Request.Clear; IdHTTP1.Request.CharSet := 'utf-8'; IdHTTP1.Request.ContentType := 'application/json'; IdHTTP1.Request.CustomHeaders.AddValue('AppKey', '58fb05c3-4e8b-4929-b7df-95bd261035c9'); IdHTTP1.Request.CustomHeaders.AddValue('RequesterKey', '629eda6f-9df5-40e7-a94e-4c54cec83a15'); IdHTTP1.Response.ContentType := 'applicattion/json'; IdHTTP1.Response.CharSet := 'utf-8'; IdHTTP1.Post('http://api.tudoentregue.com.br/v1/drivers', JsontoSend, AResponseContent); //IdHTTP1.ResponseCode = 200 Atualização de Registro. //IdHTTP1.ResponseCode = 201 Inclusão de Registro. //IdHTTP1.ResponseCode = 422 Erro de Validação. showmessage(AResponseContent.DataString); showmessage(IdHTTP1.ResponseCode.ToString); showmessage(IdHTTP1.ResponseText); Finally JsontoSend.Free(); End; de acordo com a api quando faz um post em /drivers o Response vem vazio mesmo o que valida a informação do post é o ResponseCode //IdHTTP1.ResponseCode = 200 Atualização de Registro. //IdHTTP1.ResponseCode = 201 Inclusão de Registro. //IdHTTP1.ResponseCode = 422 Erro de Validação. mas quando faz um get em /drivers ele responde os dados do motorista mas de uma boa lida na api pois os codigos do ResponseCode são muito importantes por exemplo quando faz um get em drivers: //IdHTTP1.ResponseCode = 200 Processado com Sucesso. *e vem os dados do motorista no response* //IdHTTP1.ResponseCode = 403 Motorista não Relacionado. *response vazio* //IdHTTP1.ResponseCode = 404 Motorista não Localizado. *response vazio*
  12. eu testei com o rest debuguer do delphi e funcionou. menu tools-> Rest Debuguer agora to sem tempo pra testar com o indy
  13. pra mim aparece: HTTP/1.1 422 Unprocessable Entity seu try except não esta deixando voce ver o erro
  14. voce pode testar dentro da propria api acessa: https://api.tudoentregue.com.br/Documentacao/index.html clique no botão Authorize do lado direito digite suas keys clique no botão Authorize dentro da tela que abriu feche essa tela. logo abaixo clique na primeira opção clique no botão "try it out" logo em baixo clique no botão execute vc vai ter uma resposta parecida com essa: curl -X POST "http://api.tudoentregue.com.br/v1/drivers" -H "accept: application/json" -H "AppKey: gfg" -H "RequesterKey: gdf" -H "content-type: application/json" -d "{ \"PhoneCountry\": \"+55\", \"PhoneNumber\": \"99999999999\", \"Name\": \"Motorista Exemplo\", \"IMEI\": \"999999999999999\", \"DeviceKey\": \"XXX99xXX-...\", \"DeviceId\": \"9FF9F9FFF99FFFFF9999F9FFF99999F9\", \"DeviceType\": \"MarcaModelo\", \"OSName\": \"Android\", \"OSVersion\": \"7.0\", \"Email\": \"[email protected]\", \"ZipCode\": \"99999999\", \"City\": \"Cidade do Exemplo.\", \"State\": \"Estado do Exemplo.\", \"Enable\": false}" então remova essa uses
  15. ?-não entendi mas se for isso Net.HttpClient, Net.URLClient, NetConsts;
  16. uses System.Net.HttpClient, System.Net.URLClient, System.NetConsts;
  17. eu preciso consumir um serviço do firebase: curl 'https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=[API_KEY]' \ -H 'Content-Type: application/json' \ --data-binary '{"email":"[[email protected]]","password":"[PASSWORD]","returnSecureToken":true}' com indy eu uso assim (funciona): Var lJsonStream: TStringStream; sUrlFull: String; AResponseContent: TStringStream; iStatusCode: Integer; sResponse: String; jsData: TJSONObject; Begin sUrlFull := 'https://identitytoolkit.googleapis.com/v1/accounts:' + 'signInWithPassword' + '?key=' + sAPIKEY; jsData.AddPair('email', '[email protected]'); jsData.AddPair('password', '1a2b3C'); jsData.AddPair('returnSecureToken', TJSONBool.Create(True)); lJsonStream := TStringStream.Create(UTF8Encode(jsData.ToJSON)); AResponseContent := TStringStream.Create(''); Try IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; Win632; x86; rv:47.0) Gecko/20100101 Firefox/47.0'; IdHTTP1.Request.ContentType := 'application/json'; IdHTTP1.Post(sUrlFull, lJsonStream, AResponseContent); iStatusCode := IdHTTP1.ResponseCode; sResponse := AResponseContent.DataString; Finally Begin FreeAndNil(lJsonStream); FreeAndNil(AResponseContent); End; End; com Net.HttpClient eu uso assim (funciona): Var lJsonStream: TStringStream; lIdHTTP: THTTPClient; sUrlFull: String; AResponseContent: TStringStream; iStatusCode: Integer; sResponse: String; jsData: TJSONObject; Begin sUrlFull := 'https://identitytoolkit.googleapis.com/v1/accounts:' + 'signInWithPassword' + '?key=' + sAPIKEY; jsData.AddPair('email', '[email protected]'); jsData.AddPair('password', '1a2b3C'); jsData.AddPair('returnSecureToken', TJSONBool.Create(True)); lJsonStream := TStringStream.Create(UTF8Encode(jsData.ToJSON)); AResponseContent := TStringStream.Create(''); lIdHTTP := THTTPClient.Create; Try lIdHTTP.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; Win632; x86; rv:47.0) Gecko/20100101 Firefox/47.0'; lIdHTTP.ContentType := 'application/json'; iStatusCode := lIdHTTP.Post(sUrlFull, lJsonStream, AResponseContent).StatusCode; sResponse := AResponseContent.DataString; Finally Begin FreeAndNil(lJsonStream); FreeAndNil(AResponseContent); FreeAndNil(lIdHTTP); End; End; a pergunta é como faço isso com Synapse já tentei de vários jeitos, já procurei no Google mas não consegui.
  18. tente assim: IdHTTP1.Request.Clear; IdHTTP1.Request.CharSet := 'UTF-8'; IdHTTP1.Request.Method := 'POST'; IdHTTP1.Request.ContentType := 'application/json'; IdHTTP1.Request.CustomHeaders.AddValue('AppKey','seuAppKey'); IdHTTP1.Request.CustomHeaders.AddValue('RequesterKey','seuRequesterKey'); ou assim: Var lJsonStream: TStringStream; lIdHTTP: THTTPClient; sUrlFull: String; AResponseContent: TStringStream; istatusCode:Integer; sResposta:String; Begin lJsonStream := TStringStream.Create(aJSON); AResponseContent := TStringStream.Create(''); lIdHTTP := THTTPClient.Create; Try lIdHTTP.CustomHeaders['AppKey'] := 'seuAppKey'; lIdHTTP.CustomHeaders['RequesterKey'] := 'seuRequesterKey'; lIdHTTP.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; Win632; x86; rv:47.0) Gecko/20100101 Firefox/47.0'; lIdHTTP.ContentType := 'application/json'; istatusCode := lIdHTTP.Post('https://api.tudoentregue.com.br/v1/drivers', lJsonStream, AResponseContent).StatusCode; sResposta := AResponseContent.DataString; Finally Begin FreeAndNil(lJsonStream); FreeAndNil(AResponseContent); FreeAndNil(lIdHTTP); End; End; mas fica difícil testar sem as keys.
  19. eu testei quando eu tinha um celular mais antigo e funcionou, com o novo android não testei, da uma pesquisada sobre Android Permission pode ser que te ajude. ou de uma aprofundada no assunto com base nos links que te passei no post anterior. sobre permissões: http://docwiki.embarcadero.com/RADStudio/Rio/en/Android_Permission_Model se vc usa delphi menor que 10.2: https://github.com/CarlosHe/AndroidPermission não sei se o seu problema é com permissão, mas um dos principais problemas que vejo é esse por causa da permissão de usar a câmera e salvar arquivos.
  20. da uma olhada nesses links: https://youtu.be/nsYvgmQlT58 https://github.com/tdevrocks/qrcode https://blog.andreamagni.eu/2017/06/scannermapp-a-qrbarcode-scanner-app-with-delphi-zxing-and-tframestand/
  21. tente usar: Memo1.Text := RESTResponse1.JSONText;
  22. com acbr não consegui no android, mas consegui seguindo esse tutorial: http://portal.tdevrocks.com.br/2017/01/28/impressao-em-mini-impressora-bluetooth/
  23. a unica coisa parecida com isso que conheço é o remoteapp do windows server
  24. Resposta: 1- Exatamente isso o "1" seria o digito verificador ele pode ser fixo caso ele não seja valido o ACBrValidador vai gerar um digito valido pra vc 2- O ACBrInStore é um componente para ler e decodificar codigo de barras de balanças da uma olha da nos demos: Exemplos\ACBrDiversos\ACBrInStore
  25. estou respondendo aqui uma pergunta do usuario @doidopb do link pois não sou usario sac não posso responder la. no caso do produto ID = 150 TOTAL = 10,50 a barra seria "201500001050" mas como só tem 12 caracteres vamos adicionar o "1" no final ficando assim "2015000010501" agora vai o codigo: Var sMinhaBarra: String; Begin sMinhaBarra := '2015000010501'; ACBrValidador1.TipoDocto := docGTIN; ACBrValidador1.ExibeDigitoCorreto := True; ACBrValidador1.Documento := sMinhaBarra; If Not ACBrValidador1.Validar Then sMinhaBarra := Copy(sMinhaBarra, 1, 12) + ACBrValidador1.DigitoCalculado; End; assim vc pode gerar seu próprio código de barras matematicamente valido e aceito para ser lido com "ACBrInStore1" que é ótimo para essa situação
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.