edutraini Posted May 21, 2021 Report Share Posted May 21, 2021 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 Quote Link to comment Share on other sites More sharing options...
sunset Posted May 24, 2021 Report Share Posted May 24, 2021 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 Quote Link to comment Share on other sites More sharing options...
betovsp Posted May 25, 2021 Report Share Posted May 25, 2021 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. Quote Link to comment Share on other sites More sharing options...
coutinho.amauri Posted May 27, 2021 Report Share Posted May 27, 2021 bom dia meu amigo ha fiz varias integraçoes ex IFOOD , SITEMERCADO tudo em json via api rest se eu puder ajudar me chame Quote Link to comment Share on other sites More sharing options...
macs Posted May 27, 2021 Report Share Posted May 27, 2021 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! Quote Link to comment Share on other sites More sharing options...
coutinho.amauri Posted May 28, 2021 Report Share Posted May 28, 2021 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 Quote Link to comment Share on other sites More sharing options...
emotta Posted May 28, 2021 Report Share Posted May 28, 2021 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 Quote Link to comment Share on other sites More sharing options...
coutinho.amauri Posted May 31, 2021 Report Share Posted May 31, 2021 show , meu amigo 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.