Jump to content
Fivewin Brasil

Alain da Silva

Membros
  • Posts

    535
  • Joined

  • Last visited

  • Days Won

    10

Posts posted by Alain da Silva

  1. Pessoal, fiz as alterações mas esta dando erro nos asteriscos abaixo:

    nalgorithm, datetime...

     

    */
    https://github.com/JoseQuintas/sefazclass/blob/master/drafts/assinaturacapicom.prg
    */
    
    /*
    http://www.pctoledo.com.br/forum/viewtopic.php?f=43&t=18664
    */
    
    #include "fivewin.ch"
    #include "xbrowse.ch"
    #include "hbxml.ch"
    #include "capicom.ch"
    
    #ifdef __XHARBOUR__
       #xtranslate HB_DateTime()=>DateTime()
    #endif
    
    
    PROCEDURE TESTE
       LOCAL cTexto, cSignatureValue, cDigestValue, cPublicKey
    
       cTexto    := "seu arquivo cXml"
       cDigestValue    := CapicomClass():HashData( cTexto )
       cSignatureValue := CapicomClass():Sign( cDigestValue, , , @cPublicKey )
       ? cDigestValue
       ? cSignatureValue
       ? cDigestValue == CapicomClass():VerifySignature( cSignatureValue )
       ? IsValidSignatureCapicom( cDigestValue, cSignatureValue )
       ? cPublicKey
    RETURN
    
    
    FUNCTION IsValidSignatureCapicom( cDigestValue, cSignatureValue )
       IF cDigestValue = NIL .OR. cSignatureValue = NIL
          RETURN .F.
       ENDIF
       RETURN CapicomClass():VerifySignature( cSignatureValue ) == cDigestValue
    
    
    CLASS CapicomClass
       METHOD SelectCertificate()
       METHOD VerifySignature( cSignedData )
       METHOD HashData( cData, nAlgorithm )
       METHOD PublicKey( oCAPICOMCert )
       METHOD Sign( cDigestValue, oCAPICOMcert, nEncode, cPublicKey )
       END CLASS
    
    
    METHOD SelectCertificate() CLASS CapicomClass
       LOCAL oCapicom, oCertificate
       oCapicom:= xhb_CreateObject( "CAPICOM.Store" )
       oCapicom:Open( CAPICOM_CURRENT_USER_STORE, "My", CAPICOM_STORE_OPEN_READ_ONLY )
       try
          oCertificate := oCapicom:Certificates:Select( "Selecione um certificado digital", "Algoritmo de Assinatura SHA256RSA" )
       catch
          cErroRet:='Problema ao criar objetos solicitados.1'
          RETURN mResultado("Pesquisa de Nota(s) Fiscal(is) Destinada(s).",IIF(m->hDados['NFEProducao'],"PRODUÇÃO","HOMOLOGAÇÃO"),cErroRet)
       end
       IF oCapicom:Certificates:Count() == 0
          RETURN NIL
       ENDIF
       RETURN oCertificate:Item( 1 )
    
    METHOD VerifySignature( cSignedData ) CLASS CapicomClass
       LOCAL oCapicom
       IF cSignedData == NIL
          RETURN NIL
       ENDIF
       oCapicom := xhb_CreateObject( "CAPICOM.SignedData.1" )
       oCapicom:Verify(cSignedData,.F.,CAPICOM_VERIFY_SIGNATURE_ONLY)
       RETURN oCapicom:Content
    
    METHOD HashData( cData, nAlgorithm ) CLASS CapicomClass
       LOCAL oCapicom
       IF cData = NIL
          cData := DToS( Date() ) + Time()
       ENDIF
       IF nAlgorithm = NIL
          nAlgorithm := CAPICOM_HASH_ALGORITHM_SHA_256
       ENDIF
       oCapicom := xhb_CreateObject( "CAPICOM.HashedData.1" )
    *   oCapicom:Algorithm := nAlgorithm
       oCapicom:Hash( cData )
       RETURN oCapicom:Value
    
    METHOD PublicKey( oCapicomCert ) CLASS CapicomClass
       LOCAL oCapicom, cPublicKey
       oCapicom := xhb_CreateObject( "CAPICOM.Signer.2" )
       oCapicom:Signer:Certificate := oCAPICOMCert
       oCapicom:Signer:Options := CAPICOM_CERTIFICATE_INCLUDE_CHAIN_EXCEPT_ROOT
       cPublicKey := StrTran( oCapicom:Certificate:Export( CAPICOM_ENCODE_BASE64 ), Chr(13) + Chr(10), "" )
       RETURN cPublicKey
    
    METHOD Sign( cDigestValue, oCAPICOMCert, nEncode, cPublicKey ) CLASS CapicomClass
       LOCAL oCAPICOMSignedData, oCAPICOMSigner, oCAPICOMTimeStamp, cSignature
       IF cDigestValue = NIL
          RETURN NIL
       ENDIF
       IF nEncode = NIL
          nEncode := CAPICOM_ENCODE_BASE64
       ENDIF
       oCAPICOMSigner := xhb_CreateObject( "CAPICOM.Signer.2" ) // versao 2
       IF oCAPICOMCert = NIL
          oCAPICOMCert := ::SelectCertificate()
          IF oCAPICOMCert = NIL
             RETURN NIL
          ENDIF
          oCAPICOMSigner:Certificate := oCAPICOMcert
       ELSE
          oCAPICOMSigner:Certificate := oCAPICOMcert:DefaultInterface
       ENDIF
       IF ! ( oCAPICOMSigner:Certificate:HasPrivateKey ;
             .AND. DToS( oCAPICOMSigner:Certificate:ValidFromDate ) <= DToS( Date() ) ;
             .AND. DToS( oCAPICOMSigner:Certificate:ValidToDate ) >= DToS( Date() ) )
          RETURN NIL
       ENDIF
       oCAPICOMSigner:Options := CAPICOM_CERTIFICATE_INCLUDE_CHAIN_EXCEPT_ROOT
       cPublicKey             := StrTran( oCAPICOMSigner:Certificate:Export( CAPICOM_ENCODE_BASE64 ), Chr(13) + Chr(10), "" )
       oCAPICOMTimeStamp := xhb_CreateObject( "CAPICOM.Attribute" )
       oCAPICOMTimeStamp:Name  := CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME
    *   oCAPICOMTimeStamp:Value := hb_DateTime()
    *   oCAPICOMSigner:AuthenticatedAttributes:Add( oCAPICOMTimeStamp )
       oCAPICOMSignedData := xhb_CreateObject( "CAPICOM.SignedData.1" )
       oCAPICOMSignedData:Content := cDigestValue
    // segundo parametro falso, apenas retona assinatura do texto, não inclui no texto
       cSignature := oCAPICOMSignedData:Sign( oCAPICOMSigner, .F., nEncode )
       RETURN cSignature

     

  2.  

    Ola pessoal, por favor não respondam essa mensagem no grupo!!

    Estou disponibilizando meu programa de Manifestação Eletrônica de Documentos Fiscais.

    https://www.4shared.com/file/XwPLZL89ei/install_mdfe.html

    O Software MDFe - Manifesto Eletrônico de Documentos Fiscais é um programa que permite ao usuário consultar as notas emitidas contra um CNPJ (cadastro de empresa).
    Condições de Uso: Licença Gratuíto

    O usuário que souber o número do NSU (Número Sequêncial Único) poderá colocar esse número no cadastro de empresa e suas pesquisas seguirão a partir desse número. Quando não souber, o número zero será informado e será atualizado na medida em que forem efetuadas as consultas.
    Quando a NFe já possuir uma manifestação, o Download será automático, caso contrário o usuário deverá proceder a manifestação para a liberação do Download.

    Opções da Manifestação:
                             * Ciência da Operação
                             * Confirmação da Operação
                             * Desconhecimento da Operação
                             * Operação não Relizada (informar motivo)

    * Quem se interessar em adquirir os fontes, entrar em contato com o email: alainrancharia@hotmail.com (não usa dll de terceiros)

    Obrigado

     

    TELA2.png

    TELA3.png

    TELA4.png

    TELA5.png

    TELA6.png

  3. bom dia, hoje enviei uma nota na versão 4.0, uma observação é no retorno da consulta da nfe, a TAG protNfe aparece versão="3.10".

    RETORNO DA CONSULTA DA NFE:
    <?xml version="1.0" encoding="UTF-8"?>
    <soap:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
    <soap:Body>
    <nfeResultMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NFeConsultaProtocolo4">
    <retConsSitNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="4.00">
    <tpAmb>1</tpAmb>
    <verAplic>SP_NFE_PL009_V4</verAplic>
    <cStat>100</cStat>
    <xMotivo>Autorizado o uso da NF-e</xMotivo>
    <cUF>35</cUF>
    <dhRecbto>2017-11-07T08:37:59-02:00</dhRecbto>
    <chNFe>35171143198696000468550010000105231000105232</chNFe>
    <protNFe versao="3.10">
    <infProt>
    <tpAmb>1</tpAmb>
    <verAplic>SP_NFE_PL_008i2</verAplic>
    <chNFe>35171143198696000468550010000105231000105232</chNFe>
    <dhRecbto>2017-11-07T08:35:55-02:00</dhRecbto>
    <nProt>135170719482702</nProt>
    <digVal>G661M4y5QrhjE/DLv3yK+3XmekI=</digVal>
    <cStat>100</cStat>
    <xMotivo>Autorizado o uso da NF-e</xMotivo>
    </infProt>
    </protNFe>
    </retConsSitNFe>
    </nfeResultMsg>
    </soap:Body>
    </soap:Envelope>

     

  4. Valeu Fladimir, funcionou perfeito. fico assim essa parte.

             if AT("<cStat>138</cStat>",cdoc)>0
                cRetornot:="Download Efetuado com Sucesso"
                cBase64 := oXmlDoc:findFirst( "docZip" )
                cBase64 := cBase64:cdata
                cBase64 := hb_ZUncompress(HB_base64Decode(cBase64))
                SaveFile( DiskName()+":\wfatura\XMLFORNECEDOR\" + cChaveNfe + "-nfe.xml", cBase64)
                Return cRetornot
             endif
     

    Obrigado

  5. bom dia, achei aqui no fórum acho que referencia ao assunto:

    fladimir

    Quando baixa xml do site do governo via webservice (baixa com certificado) Consulta NFe Destinadas vem tb criptografado ai tem q descriptografar.

     

    Alguem poderia me dizer como faço para descriptografar esse xml?

    obrigado

     

    <?xml version="1.0" encoding="UTF-8"?>
    <soap:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
    <soap:Body>
    <nfeDistDFeInteresseResponse xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NFeDistribuicaoDFe">
    <nfeDistDFeInteresseResult>
    <retDistDFeInt xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.01">
    <tpAmb>1</tpAmb>
    <verAplic>1.1.9</verAplic>
    <cStat>138</cStat>
    <xMotivo>Documento localizado</xMotivo>
    <dhResp>2017-11-01T12:49:15-02:00</dhResp>
    <loteDistDFeInt>
    <docZip schema="procNFe_v3.10.xsd" NSU="000000000002404">H4sIAAAAAAAEAO1a6ZOiyLb/ ... (muito grande) AA==</docZip>
    </loteDistDFeInt>
    </retDistDFeInt>
    </nfeDistDFeInteresseResult>
    </nfeDistDFeInteresseResponse>
    </soap:Body>
    </soap:Envelope>
  6. bom dia pessoal, eu utilizo o programa do Gilmer (PRG) para a emissão das notas fiscais. Aqui para SP funciona de boa, agora preciso instalar para um cliente em MS e não estou conseguindo enviar. Emissão em SCAN esta funcionando, isso quer dizer que provavelmente os parâmetros estão corretos e o problema seria no servidor da sefaz/MS.

    O Retorno que ele esta dando é o seguinte:

    <?xml version="1.0" encoding="UTF-8"?>
    <S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
    <S:Body>
    <S:Fault xmlns:ns4="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Code>
    <S:Value>S:Receiver</S:Value>
    </S:Code>
    <S:Reason>
    <S:Text xml:lang="pt">javax.ejb.EJBException</S:Text>
    </S:Reason>
    </S:Fault>
    </S:Body>
    </S:Envelope>

    alguém já passou por esse problema, quem emite nota para MS tem alguma dica pra me dar.

     

    obrigado

  7. obrigado pela ajuda, copiar pela data da criação do arquivo. No caso do exemplo ai copiar somente os arquivos do dia 01/01/2017, porque pelo nome eu não saberia.

    nome                                                                                     data de modificação   Tipo

    35170262741319000125550010000322271000325137           01/01/2017            Documento Xml

    35170262741319000125550010000322271000325137           01/01/2017            Documento Xml

    35170262741319000125550010000322271000325137           02/01/2017            Documento Xml

    35170262741319000125550010000322271000325137           03/01/2017            Documento Xml

    valeu

  8. bom dia, preciso copiar para um pendrive vários arquivos xml, porém precisa ser pela data do arquivo. Alguem tem uma rotina para isso.

    Outra coisa, depois de copiar o arquivo eu gostaria de mover os arquivos para outra pasta.

     

    obrigado

  9. boa tarde pessoal, estou fazendo uma tela de PDV e tenho um get desabilitado que mostra o valor unitário, só que não estou conseguindo fazer com que ele fique com o fundo azul e a letra preta.

    Agora estou testando como say e não get.

    REDEFINE SAY OBJPAV[13] VAR Transf(VARPAV[13],"@E 999,999.999")  ID 30  OF oFld:ADIALOGS[1] COLOR PRETO,AZUL FONT Arial30B //valor unitário
     

    Usando workshop, five 16.06.

     

    obrigado.

     

     

     

×
×
  • Create New...