Ir para conteúdo
  • Cadastre-se

  • Este tópico foi criado há 2522 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Boa tarde Amigos, conclui minha integrações com CIOT e-Frete, inclusive pretendo agora contribuir com o projeto ACBr, porém, me deparei com o seguinte problema:
Enquanto fazia os testes para integração, em minha maquina não havia certificado digital algum no repositorio, e eu queria fazer a conexao com usuario e senha para efetuar os testes de homologação. Unica forma que encontrei disto funcionar, foi marcando a propriedade do HTTPRio, em WebNodes, Invokes, soPickFirstClientCertificate como TRUE. Fazendo isto, eu nao entendi o motivo, mas o HTTPRio ignora a mensagem de obrigatoriedade do certificado e segue o login normalmente. Porém, quando o computador tem um certificado digital instalado, e essa opção marcada, o HTTPRio envia esse certificado da maquina, com isso, ocasiona erro de login, pois nao é o certificado digital da empresa homologada para emitir. Se eu colocar a propriedade como FALSE, o erro de que Requer um certificado digital é apresentado novamente. Alguem já passou por isso e conseguiu resolver, usando HTTPRio ?  Conecto em um WebService tipo SOAP. Se alguem puder me dar uma ajuda, agradeço desde já.
Outro detalhe, tentei utilizar o numero de serie do certificado digital, o mesmo que gravo no ACBrCTe, para passar para o RIO em RunTime, porém o numero de série não é o mesmo que ele procura e com isso, nao encontra o certificado.

 

Deux Software Soluções e Sistemas

Ribeirão Preto - SP

Postado

Vou deixar a informação para caso alguém necessite do mesmo caso que o meu. Consegui encontrar uma solução. Como o HTTPRio faz uso dos metodos do IE, quando vc tenta acessar o WSDL por ele, ele solicita o certificado e se vc cancelar essa seleção, ele refaz o metodo de consulta, abrindo a parte onde seria o login via usuario e senha, chegando onde eu desejo. Precisei fazer uma alteração direto na unit do HTTPTrans, MAS lembro, caso utilizem o componente para outros WS, façam uma copia e altere um exclusivo para este metodo, para nao falhar com os outros.

Altere esta linha:

if (LastError = ERROR_INTERNET_INVALID_CA)  then

Para

if (LastError = ERROR_INTERNET_INVALID_CA) or (LastError =
ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED) then

 

Fazendo isto, o HTTPRio, vai efetuar a primeira tentativa, recebendo o erro de solicitação de certificado. Dentro deste If no HTTPTrans, ele faz nova tentativa de consulta, e com isso, o sucesso.
Abraços.

 

Deux Software Soluções e Sistemas

Ribeirão Preto - SP

Postado

Olá! Alisson, estou com problema sério no meu emissor CIOT do e-frete. Ele está homologado junto ao e-frete, uns clientes já o utiliza.

Ele procura o certificado do cliente que está no repositório e compara com a série que guardo numa tabela, até aí tudo bem ele vai e valida o CIOT, ou veiculo,motorista...

Agora a bronca é: Tem micro na mesma empresa que não consegue enviar o CIOT, dá erro de Ticket não pode ser nulo, enquanto outro valida normalmente. 

Como é sua rotina do certificado e assinatura no onBeforePost?

Será que você pode me ajudar. Você utiliza CAMPICOM?

Como é para fazer o login no e-frete através de logon e senha.

Te agradeço se puder me ajudar.

 

Segue minha rotina de certificado e assinatura:

 

procedure CarregaCertificado(const HTTPReqResp: THTTPReqResp; Data: Pointer);
var
  Store: IStore;
  Certs: ICertificates;
  Cert: ICertificate2;
  CertContext: ICertContext;
  PCertContext: PCCERT_CONTEXT;
  I: Integer;
begin
  Store := CoStore.Create;

  Store.Open(CAPICOM_CURRENT_USER_STORE, 'MY', CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);
  Certs := Store.Certificates as ICertificates2;

  For I := 1 to Certs.Count do
    Begin
      Cert := IInterface(Certs.Item) as ICertificate2;
      if UpperCase(Cert.SerialNumber) = UpperCase(DM.qrEmpresaSERIECERTIFICADO.AsString) then
        Break;
    End;

  (* any certificates found? *)
  if (Certs.Count > 0) and (I <= Certs.Count) then
    begin

      (* get the certificate context *)
      Cert := IInterface(Certs.Item) as ICertificate2;
      CertContext := Cert as ICertContext;
      CertContext.Get_CertContext(Integer(PCertContext));

      (* set the certificate to use for the SSL connection *)
      if InternetSetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT, PCertContext, Sizeof(CERT_CONTEXT)) = False
      then
        begin
 
        ShowMessage('Something went wrong');
        end;
    end;
end;

 

 

 

 

 

 

 

 

  • 10 meses depois ...
Postado

 

Em 05/04/2018 at 15:10, Alisson Suart disse:

Boa tarde Amigos, conclui minha integrações com CIOT e-Frete, inclusive pretendo agora contribuir com o projeto ACBr, porém, me deparei com o seguinte problema:
Enquanto fazia os testes para integração, em minha maquina não havia certificado digital algum no repositorio, e eu queria fazer a conexao com usuario e senha para efetuar os testes de homologação. Unica forma que encontrei disto funcionar, foi marcando a propriedade do HTTPRio, em WebNodes, Invokes, soPickFirstClientCertificate como TRUE. Fazendo isto, eu nao entendi o motivo, mas o HTTPRio ignora a mensagem de obrigatoriedade do certificado e segue o login normalmente. Porém, quando o computador tem um certificado digital instalado, e essa opção marcada, o HTTPRio envia esse certificado da maquina, com isso, ocasiona erro de login, pois nao é o certificado digital da empresa homologada para emitir. Se eu colocar a propriedade como FALSE, o erro de que Requer um certificado digital é apresentado novamente. Alguem já passou por isso e conseguiu resolver, usando HTTPRio ?  Conecto em um WebService tipo SOAP. Se alguem puder me dar uma ajuda, agradeço desde já.
Outro detalhe, tentei utilizar o numero de serie do certificado digital, o mesmo que gravo no ACBrCTe, para passar para o RIO em RunTime, porém o numero de série não é o mesmo que ele procura e com isso, nao encontra o certificado.

Bom dia,

Alisson ou André, vocês podem disponibilizar o código ou o componente?

Estou batendo cabeça com o ACBrCIOT mas ele não esta acabado e esta focado no REPOM, mas é mais complicado o consumo do webservice.

O e-Frete tem área de homologação?

Obrigado!

Em 19/04/2018 at 22:38, André Franco disse:

Olá! Alisson, estou com problema sério no meu emissor CIOT do e-frete. Ele está homologado junto ao e-frete, uns clientes já o utiliza.

Ele procura o certificado do cliente que está no repositório e compara com a série que guardo numa tabela, até aí tudo bem ele vai e valida o CIOT, ou veiculo,motorista...

Agora a bronca é: Tem micro na mesma empresa que não consegue enviar o CIOT, dá erro de Ticket não pode ser nulo, enquanto outro valida normalmente. 

Como é sua rotina do certificado e assinatura no onBeforePost?

Será que você pode me ajudar. Você utiliza CAMPICOM?

Como é para fazer o login no e-frete através de logon e senha.

Te agradeço se puder me ajudar.

 

Segue minha rotina de certificado e assinatura:

 

procedure CarregaCertificado(const HTTPReqResp: THTTPReqResp; Data: Pointer);
var
  Store: IStore;
  Certs: ICertificates;
  Cert: ICertificate2;
  CertContext: ICertContext;
  PCertContext: PCCERT_CONTEXT;
  I: Integer;
begin
  Store := CoStore.Create;

  Store.Open(CAPICOM_CURRENT_USER_STORE, 'MY', CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);
  Certs := Store.Certificates as ICertificates2;

  For I := 1 to Certs.Count do
    Begin
      Cert := IInterface(Certs.Item) as ICertificate2;
      if UpperCase(Cert.SerialNumber) = UpperCase(DM.qrEmpresaSERIECERTIFICADO.AsString) then
        Break;
    End;

  (* any certificates found? *)
  if (Certs.Count > 0) and (I <= Certs.Count) then
    begin

      (* get the certificate context *)
      Cert := IInterface(Certs.Item) as ICertificate2;
      CertContext := Cert as ICertContext;
      CertContext.Get_CertContext(Integer(PCertContext));

      (* set the certificate to use for the SSL connection *)
      if InternetSetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT, PCertContext, Sizeof(CERT_CONTEXT)) = False
      then
        begin
 
        ShowMessage('Something went wrong');
        end;
    end;
end;

 

 

 

 

 

 

 

 

 

  • 4 meses depois ...
Postado
Em 02/03/2019 at 14:15, André Franco disse:

Não utilizo esse componente para CIOT do ACBr.

Tenho rotinas próprias.

Sim, eles tem homologação.

Boa tarde.

Estou precisando de ajuda com a frete.

Importei  o WSL mas estou tendo dificuldade para alimentar o array de viagens. Quando dou um Create da erro.

Tem como você me disponibilizar somente esta rotina de criação do array?

  • Consultores
Postado

Bom dia,

12 horas atrás, Cleonir disse:

Já Consegui.

Que bom que deu certo, mas seria interessante compartilhar a resolução também.

Att.

  • Curtir 1
Consultora ACBr Pro

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Solution
Postado

Ops, desculpem aí...

 

SetLength(arrayViagens, 2);
  for i := 0 to 1 do
  begin
    arrayViagens := eFretePefService.Viagens3.Create;

    arrayViagens.DocumentoViagem        := 'CTe 1 / 1';
    arrayViagens.CodigoMunicipioOrigem  := 1234567;
    arrayViagens.CodigoMunicipioDestino := 1234567;
    ...

    ...

    ...
  end;

  • Curtir 2
  • Este tópico foi criado há 2522 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...