Jump to content
Fivewin Brasil

Integracao com E-commerce


edutraini

Recommended Posts

Boa noite 

Tem muita coisa para integrar mas a grosso modo e uma comunicação via API REST via jSON, mas antes e bom voce conhecer bem a plataforma, como saber bem manusear para alimentar com as informações corretas, e depende do tipo de integração se e somente subir produtos ou se vai fazer a integração de 100% dela.

 

https://shopify.dev/docs/admin-api/rest/reference/products/product#create-2021-04

POST/admin/api/2021-04/products.json

GET /admin/api/2021-04/products/632910392.json?fields=id,images,title

 

 

 

 

Link to comment
Share on other sites

Em 21/05/2021 at 12:49, edutraini disse:

Bom dia Pessoal

Um cliente meu esta querendo integrar o sistema com essa platafoma de e-commerce 

https://shopify.dev/docs/admin-api/rest
 Caso não tenham esse braço para integração, nós conseguimos integrar via Samurai Experts. Ok?

Alguem conhece sobre o assunto que possa me ajudar

Não tenho a menor ideia de como funciona

 

Edu, boa noite, já fiz várias integrações com a API Rest via Json para outros clientes.

me chame no Zap: 16988746745 para conversamos sobre ok.

 

Link to comment
Share on other sites

2 horas atrás, coutinho.amauri disse:

bom dia meu amigo 

ha fiz varias integraçoes 

ex IFOOD , SITEMERCADO tudo em json via api rest 

se eu puder ajudar me chame 

Olá Amigo... se puder postar alguns exemplos destas integrações seria interessante pra todos aqui no fórum. 

Valeu!

Link to comment
Share on other sites

a soluçao e grande vou postar algum exemplo 

 

/**************************************************************************************/
FUNCTION OBTER_TOKEN()
/**************************************************************************************/

    LOCAL oWeb
    LOCAL hHash            := HASH()
    LOCAL aRetorno         := ''
   LOCAL Cliente_id       := ''
   LOCAL Cliente_secret   := ''
   LOCAL cPath            := CurDrive()+":\"+CurDir()+'\'
   LOCAL cParam           := ''
   
   LOCAL cTxt[3]

    IF ! IsInternet()
       MSGALERT("Sem Conexão a Internet","Verifique")
       RETURN NIL
    ENDIF

    TRY
        oWeb  := CreateObject( 'MSXML2.ServerXMLHTTP.6.0' ) 
    CATCH
        oWeb  := CreateObject( 'MSXML2.XMLHTTP' )
    END

    //-- validaçoes 
    IF ! FILE( cPath + cIniIFOOD )
       MSGALERT("Arquivo de Credenciamento não Encontrado","Alerta")
       RETURN NIL
    ENDIF   

    //-- pega os dados do INI 
    
   Cliente_id      := GetPvProfString( 'Ifood' , 'Cliente_id'           , "" , cIniIFOOD ) 
   Cliente_secret  := GetPvProfString( 'Ifood' , 'Cliente_secret'       , "" , cIniIFOOD ) 
    
    IF EMPTY(Cliente_id) .OR. EMPTY(Cliente_secret) 
       MSGALERT("Credenciamento Inválido","Alerta")
        RETURN NIL
     ENDIF   

    //-- monta o parametro
   cParam := '{"client_id":' + '"' + Cliente_id + '"' + "," + '"client_secret":' + '"' + Cliente_secret + '"' + "}"

    oWeb:Open( 'POST', Urlsitemerc + '/api/v1/oauth/token' ,  .F. ) 
   oWeb:setRequestHeader('Content-Type'    , 'application/json; charset=utf-8')
   
    TRY
    
       //-- envia o parametro
        oWeb:Send( cParam )  

        //-- pega o retorno
       aRetorno := oWeb:ResponseText()
       
       //-- json
      hb_jsondecode( aRetorno, @hHash )
      
        cTxt[1] := hHash["access_token"]
        cTxt[2] := hHash["token_type"]
        cTxt[3] := hHash["expires_in"]
      
      WritePProString( 'Ifood' , 'acess_token'      , cTxt[1]      , cIniIFOOD )
      WritePProString( 'Ifood' , 'token_type'       , cTxt[2]       , cIniIFOOD )
      WritePProString( 'Ifood' , 'expires_in'       , cTxt[3]       , cIniIFOOD )
        
    CATCH ; END
    
RETURN NIL
 

/**************************************************************************************/
FUNCTION SINCRONIZAR_PRODUTOS()
/**************************************************************************************/

    LOCAL oWeb
    
    LOCAL hHash            := HASH()
    LOCAL aRetorno         := ''
   LOCAL cPath            := CurDrive()+":\"+CurDir()+'\'
   LOCAL cParam           := ''
   LOCAL cToken           := ''
   LOCAL nVALOR           := '0'

    //-- validaçoes 
    IF ! FILE( cPath + cIniIFOOD )
       MSGALERT("Arquivo de Credenciamento não Encontrado","Alerta")
       RETURN NIL
    ENDIF   

    //-- pega os dados do INI 
   Id_loja := GetPvProfString('Ifood','Id_loja',"",cIniIFOOD) 
    
    IF EMPTY(Id_loja) 
       MSGALERT("Credenciamento Inválido","Id_loja")
        RETURN NIL
     ENDIF   

    //-- token
    OBTER_TOKEN()

    cToken := GetPvProfString('Ifood','acess_token' , "" , cIniIFOOD) 

    ABRIR("PRODUTOS",.T.)
    
    cParam := '['
    
    WHILE ! PRODUTOS->( EOF() )
    
     cParam += '{'
     cParam += '"idLoja": '                  +  Id_loja                                                  + ','
     cParam += '"departamento": "'           +  RemoveAcentuacao(ALLTRIM(PRODUTOS->NOMSEC)) + '"'        + ','  
     cParam += '"categoria": "'              +  RemoveAcentuacao(ALLTRIM(PRODUTOS->NOMGRU)) + '"'        + ','  
     cParam += '"subCategoria": "'           +  RemoveAcentuacao(ALLTRIM(PRODUTOS->NOMSGR)) + '"'        + ',' 
     cParam += '"marca": "'                  +  ''                        + '"'                          + ',' 
     cParam += '"unidade": "'                +  ALLTRIM(PRODUTOS->UND)    + '"'                          + ',' 
     cParam += '"volume": "'                 +  ''                        + '"'                          + ',' 
     cParam += '"codigoBarra": "'            +  ALLTRIM(PRODUTOS->CODBAR) + '"'                          + ',' 
     cParam += '"nome": "'                   +  RemoveAcentuacao(ALLTRIM(PRODUTOS->NOMPRO)) + '"'        + ',' 
     cParam += '"valor": '                   +  ALLTRIM(TRANSFORM(PRODUTOS->PRE_VEN,"999,999.9999"))     + ',' 
     cParam += '"valorPromocao": '           +  nVALOR                                                   + ',' 
     cParam += '"valorAtacado": '            +  nVALOR                                                   + ',' 
     cParam += '"valorCompra": '             +  ALLTRIM(TRANSFORM(PRODUTOS->PRE_CUS,"999,999.9999"))     + ',' 
     cParam += '"quantidadeEstoqueAtual": '  +  ALLTRIM(TRANSFORM(PRODUTOS->EST_ATU,"999,999.9999"))     + ',' 
     cParam += '"quantidadeEstoqueMinimo": ' +  ALLTRIM(TRANSFORM(PRODUTOS->EST_MIN,"999,999.9999"))     + ',' 
     cParam += '"quantidadeAtacado": '       +  nVALOR                                                   + ',' 
     cParam += '"descricao": "'              +  RemoveAcentuacao(ALLTRIM(PRODUTOS->NOMCOM)) + '"'        + ',' 
     cParam += '"ativo": '                   +  'true'                                                   + ',' 
     cParam += '"plu": "'                    +  '0'                       + '"'                          + ',' 
     cParam += '"validadeProxima": '         +  'false'        
     cParam += "}"   
                                         
      PRODUTOS->( DBSKIP() )
      
      IF ! PRODUTOS->( EOF() )
         cParam += ","   
      ELSE
         cParam += "]"   
      ENDIF   

    END

      CLOSE_DBF("PRODUTOS")
      
      MemoWrit( 'produtos.json' , cParam  )

    TRY
        oWeb  := CreateObject( 'MSXML2.ServerXMLHTTP.6.0' ) 
    CATCH
        oWeb  := CreateObject( 'MSXML2.XMLHTTP' )
    END

    oWeb:Open( 'POST', Urlsitemerc + '/api/v1/produtointegracao' ,  .F. ) 
   oWeb:setRequestHeader('Authorization'    , 'Bearer ' + cToken   )
   oWeb:setRequestHeader('Content-Type'    , 'application/json; charset=utf-8')
   
    
    TRY
    
       //-- envia o parametro
        oWeb:Send( cParam )  

        //-- pega o retorno
       aRetorno := oWeb:ResponseText()
       
       //-- json
      hb_jsondecode( aRetorno, @hHash )

      //-- mensagem de exportação
      MsgInfo("Exportação Concluida","Atenção")
   
      //-- mostra o retorno
       xbrowse(hHash)

    CATCH ; END   
    
RETURN NIL
 

 

Link to comment
Share on other sites

4 horas atrás, coutinho.amauri disse:

a soluçao e grande vou postar algum exemplo 

 

/**************************************************************************************/
FUNCTION OBTER_TOKEN()
/**************************************************************************************/

    LOCAL oWeb
    LOCAL hHash            := HASH()
    LOCAL aRetorno         := ''
   LOCAL Cliente_id       := ''
   LOCAL Cliente_secret   := ''
   LOCAL cPath            := CurDrive()+":\"+CurDir()+'\'
   LOCAL cParam           := ''
   
   LOCAL cTxt[3]

    IF ! IsInternet()
       MSGALERT("Sem Conexão a Internet","Verifique")
       RETURN NIL
    ENDIF

    TRY
        oWeb  := CreateObject( 'MSXML2.ServerXMLHTTP.6.0' ) 
    CATCH
        oWeb  := CreateObject( 'MSXML2.XMLHTTP' )
    END

    //-- validaçoes 
    IF ! FILE( cPath + cIniIFOOD )
       MSGALERT("Arquivo de Credenciamento não Encontrado","Alerta")
       RETURN NIL
    ENDIF   

    //-- pega os dados do INI 
    
   Cliente_id      := GetPvProfString( 'Ifood' , 'Cliente_id'           , "" , cIniIFOOD ) 
   Cliente_secret  := GetPvProfString( 'Ifood' , 'Cliente_secret'       , "" , cIniIFOOD ) 
    
    IF EMPTY(Cliente_id) .OR. EMPTY(Cliente_secret) 
       MSGALERT("Credenciamento Inválido","Alerta")
        RETURN NIL
     ENDIF   

    //-- monta o parametro
   cParam := '{"client_id":' + '"' + Cliente_id + '"' + "," + '"client_secret":' + '"' + Cliente_secret + '"' + "}"

    oWeb:Open( 'POST', Urlsitemerc + '/api/v1/oauth/token' ,  .F. ) 
   oWeb:setRequestHeader('Content-Type'    , 'application/json; charset=utf-8')
   
    TRY
    
       //-- envia o parametro
        oWeb:Send( cParam )  

        //-- pega o retorno
       aRetorno := oWeb:ResponseText()
       
       //-- json
      hb_jsondecode( aRetorno, @hHash )
      
        cTxt[1] := hHash["access_token"]
        cTxt[2] := hHash["token_type"]
        cTxt[3] := hHash["expires_in"]
      
      WritePProString( 'Ifood' , 'acess_token'      , cTxt[1]      , cIniIFOOD )
      WritePProString( 'Ifood' , 'token_type'       , cTxt[2]       , cIniIFOOD )
      WritePProString( 'Ifood' , 'expires_in'       , cTxt[3]       , cIniIFOOD )
        
    CATCH ; END
    
RETURN NIL
 

/**************************************************************************************/
FUNCTION SINCRONIZAR_PRODUTOS()
/**************************************************************************************/

    LOCAL oWeb
    
    LOCAL hHash            := HASH()
    LOCAL aRetorno         := ''
   LOCAL cPath            := CurDrive()+":\"+CurDir()+'\'
   LOCAL cParam           := ''
   LOCAL cToken           := ''
   LOCAL nVALOR           := '0'

    //-- validaçoes 
    IF ! FILE( cPath + cIniIFOOD )
       MSGALERT("Arquivo de Credenciamento não Encontrado","Alerta")
       RETURN NIL
    ENDIF   

    //-- pega os dados do INI 
   Id_loja := GetPvProfString('Ifood','Id_loja',"",cIniIFOOD) 
    
    IF EMPTY(Id_loja) 
       MSGALERT("Credenciamento Inválido","Id_loja")
        RETURN NIL
     ENDIF   

    //-- token
    OBTER_TOKEN()

    cToken := GetPvProfString('Ifood','acess_token' , "" , cIniIFOOD) 

    ABRIR("PRODUTOS",.T.)
    
    cParam := '['
    
    WHILE ! PRODUTOS->( EOF() )
    
     cParam += '{'
     cParam += '"idLoja": '                  +  Id_loja                                                  + ','
     cParam += '"departamento": "'           +  RemoveAcentuacao(ALLTRIM(PRODUTOS->NOMSEC)) + '"'        + ','  
     cParam += '"categoria": "'              +  RemoveAcentuacao(ALLTRIM(PRODUTOS->NOMGRU)) + '"'        + ','  
     cParam += '"subCategoria": "'           +  RemoveAcentuacao(ALLTRIM(PRODUTOS->NOMSGR)) + '"'        + ',' 
     cParam += '"marca": "'                  +  ''                        + '"'                          + ',' 
     cParam += '"unidade": "'                +  ALLTRIM(PRODUTOS->UND)    + '"'                          + ',' 
     cParam += '"volume": "'                 +  ''                        + '"'                          + ',' 
     cParam += '"codigoBarra": "'            +  ALLTRIM(PRODUTOS->CODBAR) + '"'                          + ',' 
     cParam += '"nome": "'                   +  RemoveAcentuacao(ALLTRIM(PRODUTOS->NOMPRO)) + '"'        + ',' 
     cParam += '"valor": '                   +  ALLTRIM(TRANSFORM(PRODUTOS->PRE_VEN,"999,999.9999"))     + ',' 
     cParam += '"valorPromocao": '           +  nVALOR                                                   + ',' 
     cParam += '"valorAtacado": '            +  nVALOR                                                   + ',' 
     cParam += '"valorCompra": '             +  ALLTRIM(TRANSFORM(PRODUTOS->PRE_CUS,"999,999.9999"))     + ',' 
     cParam += '"quantidadeEstoqueAtual": '  +  ALLTRIM(TRANSFORM(PRODUTOS->EST_ATU,"999,999.9999"))     + ',' 
     cParam += '"quantidadeEstoqueMinimo": ' +  ALLTRIM(TRANSFORM(PRODUTOS->EST_MIN,"999,999.9999"))     + ',' 
     cParam += '"quantidadeAtacado": '       +  nVALOR                                                   + ',' 
     cParam += '"descricao": "'              +  RemoveAcentuacao(ALLTRIM(PRODUTOS->NOMCOM)) + '"'        + ',' 
     cParam += '"ativo": '                   +  'true'                                                   + ',' 
     cParam += '"plu": "'                    +  '0'                       + '"'                          + ',' 
     cParam += '"validadeProxima": '         +  'false'        
     cParam += "}"   
                                         
      PRODUTOS->( DBSKIP() )
      
      IF ! PRODUTOS->( EOF() )
         cParam += ","   
      ELSE
         cParam += "]"   
      ENDIF   

    END

      CLOSE_DBF("PRODUTOS")
      
      MemoWrit( 'produtos.json' , cParam  )

    TRY
        oWeb  := CreateObject( 'MSXML2.ServerXMLHTTP.6.0' ) 
    CATCH
        oWeb  := CreateObject( 'MSXML2.XMLHTTP' )
    END

    oWeb:Open( 'POST', Urlsitemerc + '/api/v1/produtointegracao' ,  .F. ) 
   oWeb:setRequestHeader('Authorization'    , 'Bearer ' + cToken   )
   oWeb:setRequestHeader('Content-Type'    , 'application/json; charset=utf-8')
   
    
    TRY
    
       //-- envia o parametro
        oWeb:Send( cParam )  

        //-- pega o retorno
       aRetorno := oWeb:ResponseText()
       
       //-- json
      hb_jsondecode( aRetorno, @hHash )

      //-- mensagem de exportação
      MsgInfo("Exportação Concluida","Atenção")
   
      //-- mostra o retorno
       xbrowse(hHash)

    CATCH ; END   
    
RETURN NIL
 

 

Coutinho tem algum motivo pra você estar montando o Json na mão? Sugiro que você, quando for possivel, gere o Json a partir do Hash, vai facilitar a manutenção do código deixando ele mais simples.

 

Veja o exemplo abaixo:

 

Function u_Teste()
Local hDados := Hash()
Local cJson := ""
 
hDados["NOME"] := "Nome do Cliente"
hDados["ENDERECO"] := "Endereco do cliente"
 
cJson := hb_jsonEncode(hDados,.t.)
 
MsgStop(cJson)
 
Return

 

 

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...