O WooCommerce é uma plataforma de comércio eletrônico que permite a criação de lojas online para vender produtos e serviços. Ele é um plugin para o WordPress, o que significa que é fácil de instalar e configurar, mesmo para usuários sem muita experiência em programação ou design web.

O WooCommerce oferece uma ampla variedade de recursos, incluindo gerenciamento de estoque, processamento de pagamentos, ferramentas de marketing e análise de dados de vendas. Ele também suporta vários gateways de pagamento, integração com serviços de entrega e uma grande variedade de extensões e temas personalizáveis.

Uma das vantagens do WooCommerce é que ele é altamente escalável e pode ser personalizado para atender às necessidades de diferentes tipos de empresas, desde pequenas startups até grandes corporações. Além disso, como é um plugin para o WordPress, os usuários têm acesso a uma grande comunidade de desenvolvedores e designers que podem ajudá-los a resolver problemas e melhorar sua loja online.

Como integrar ERP Protheus com o WooCommerce?

Para integrar o ERP Protheus com o WooCommerce, é necessário usar uma solução de integração de terceiros, pois o Protheus não oferece uma integração direta com o WooCommerce. Existem várias soluções de integração disponíveis no mercado, incluindo:

Plug-in de integração: Alguns plug-ins de integração de terceiros permitem que você conecte diretamente o seu WooCommerce ao seu sistema ERP Protheus. Esses plug-ins podem automatizar o processo de atualização de estoque, preço e informações de produto, bem como o processamento de pedidos.

Integração via API: A outra opção é criar uma integração personalizada usando a API do WooCommerce e do Protheus. Isso exigirá que você tenha conhecimento técnico para desenvolver a solução de integração personalizada, mas pode ser mais flexível em termos de personalização e integração de fluxos de trabalho específicos da sua empresa.

Abaixo seguem alguns pontos principais que você deve observar ao integrar estas duas ferramentas:

– Cadastro de Clientes: Exportação do cadastro de clientes, conforme inclusão, alteração ou bloqueio no sistema ERP

– Cadastro de Produtos: Exportar produtos que estarão marcados através de campo customizado que indica se o item será exportado ou não.

Será possível também realizar uploads das imagens dos produtos

– Estoque de Produtos: Exportação do estoque dos produtos através dos movimentos do ERP.

Movimentos do ERP:
* Emissão de Nota Fiscal (Entrada e Saída)
* Transferência entre armazéns

– Tabela de Preços: Exportação das tabelas de preço do ERP para o sistema e-commerce

– Regra de Negócios: Exportação das regras de negócio do ERP para o sistema e-commerce

– Regra de Descontos: Exportação das regras de desconto do ERP para o sistema e-commerce

– Pedidos de Venda: Integração dos pedidos de vendas via JOB, através de rotina executada por ExecAuto, contemplando todas as configurações do sistema ERP.

Deverá haver separação através de regra pré-definida que direcionará o pedido de venda para a filial correta do sistema ERP.

Atualização dos status dos pedidos deverão ser enviados ao e-commerce, conforme liberações e faturamento.

Aqui segue um exemplo em ADVPL de funções que trazem pedidos do Woocommerce para o ERP:

#INCLUDE "protheus.ch"
#INCLUDE "topconn.ch"     
#INCLUDE "RWMAKE.CH"
#INCLUDE "HBUTTON.CH"
#INCLUDE "TBICONN.CH"
#INCLUDE "Colors.ch"
#INCLUDE "Font.ch"
#INCLUDE "AP5MAIL.CH"
#INCLUDE 'FWMVCDef.ch'
#INCLUDE "APWIZARD.CH"
#INCLUDE "FILEIO.CH"
#INCLUDE "RPTDEF.CH"
#INCLUDE "FWPrintSetup.ch"
#INCLUDE "TOTVS.CH"
#INCLUDE "PARMTYPE.CH" 
#Include "APWEBSRV.CH"

//Constantes
#Define STR_PULA			Chr(13)+Chr(10)		//Pula linha

/*/{Protheus.doc} FOFAT001
BAIXAS DE PEDIDOS DE VENDAS DO SITE.
@author FBSolutions
@since 15/10/2019
@version 1.0
@example U_FOFAT001()
@obs 
/*/


User function FOFAT001()
Private _cEmp     := '01'    //'99' 
Private _cFil     := '010002'//'01'
Private cDirJSON  := ''
Private cDirNJSON := ''
Private cAllJSONs := ''
Private cSemaf    := ""								  
	    
	    RpcClearEnv()
		RPCSetType(3) //não consome licença.
		ConOut("Antes - PREPARE ENVIRONMENT ") 
		PREPARE ENVIRONMENT EMPRESA _cEmp FILIAL _cFil
		ConOut("Depois - PREPARE ENVIRONMENT ") 
		                                             	
		
		cDirJSON  := "\system\Site\ped_baixados" 
		cDirNJSON := "\system\Site\ped_importados" 
						
		
		//Verifico se os diretórios existem
		If ! File("\system\Site")
			If MakeDir("\system\Site") <> 0
				return
		    EndIf
		endif
		
		If ! File(cDirJSON)
			If MakeDir(cDirJSON) <> 0
				return
		    EndIf
		endif
		
		if !File(cDirNJSON)
			If MakeDir(cDirNJSON) <> 0
				return
		    EndIf	
		endif
		
		cAllJSONs := AllPedSite()
		
		if ! Empty(cAllJSONs)
			fPDadosJSON(cAllJSONs)
		endif
		
		
				
return

/*---------------------------------------------------------------------*
 | Func:  fPDadosJSON                                                  |
 | Autor: FBSolutions                                                  |
 | Data:  15/10/2019                                                   |
 | Desc:  Função que pega dados do JSON                                |
 | Obs.:                                                               |
 *---------------------------------------------------------------------*/
static function fPDadosJSON(cJSON)
Local  lRet        := .F.
Local  oJson       := tJsonParser():New()
Local  strJson     := Nil
Local  lenStrJson  := 0
Local  aJsonfields := {}
Local  nRetParser  := 0
Local  oJHM        := .F.
Local  cIDSC5     := ""
Local  aPedSit     := {}

Private aRetorno    := {}
Private oJsPedFeed	:= Nil

	lenStrJson := Len(cJSON)
	// Faz o Parser da mensagem JSon e extrai para Array (aJsonfields) e cria tambem um HashMap para os dados da mensagem (oJHM)
 	lRet := oJson:Json_Hash(cJSON, lenStrJson, @aJsonfields, @nRetParser, @oJHM)
 	
 	//Necessário para remover trecho do Json que dá erro na função FWJsonDeserialize
 	nLM := At('"locations_map"', cJSON)
 	nFV := At('"first_version"', cJSON)
 	
 	cJSON := StrTran(cJSON, SubStr(cJSON,nLM,nFV-nLM), "")
 	cJSON := StrTran(cJSON, 'breaks":{"0"', 'breaks":{"O"')			 	
 	
 	FWJsonDeserialize(cJSON, @oJsPedFeed)
 	
 	If ( lRet == .F. )
    	ConOut("##### [JSON][ERR] " + "Parser com erro" + " MSG len: " + AllTrim(Str(lenStrJson)) + " bytes lidos: " + AllTrim(Str(nRetParser)))
    	ConOut("Erro a partir: " + SubStr(cJSON, (nRetParser+1)))    	
    else    	
    	    	
		if type( "oJsPedFeed" ) <> "U"  
			aPedSit := oJsPedFeed
		else
			aPedSit := {}
		endif	
				
		For iX := 1 to len(aPedSit)			
			
			cIDSC5    := Posicione("SC5", 10, xFilial('SC5') + cValtochar(aPedSit[iX]:ID) , 'C5_X_IDSIT')	
			if Empty(cIDSC5 )
				fGravaBody(cDirJSON, IDPedSite(cValtochar(aPedSit[iX]:ID)), cValtochar(aPedSit[iX]:ID) ) 
			endif	
			
			cIDSC5     := ""
											
		Next iX	
						    	
    endif         
	

return 

/*---------------------------------------------------------------------*
 | Func:  fGravaBody                                                   |
 | Autor: FBSolutions                                                  |
 | Data:  12/03/2019                                                   |
 | Desc:  Função que grava no diretório                                |
 | Obs.:                                                               |
 *---------------------------------------------------------------------*/
static function fGravaBody(cDir, cConteudo, cNome)
	ConOut("Entrou na função fGravaBody. cDir: " + cDir + "  cNome: " + cNome + "  cConteudo: " + substr(cConteudo,1,10)+" ...")
	MemoWrite(cDir + "\" + cNome + ".txt", cConteudo)
	ConOut("gravou no diretorio")
return

/*---------------------------------------------------------------------*
 | Func:  IDPedSite                                                    |
 | Autor: FbSolutions                                                  |
 | Data:  15/10/2019                                                   |
 | Desc:  Função que pega um unico pedido através do ID                |
 | Obs.:  /                                                            |
 *---------------------------------------------------------------------*/
Static Function IDPedSite(cIDPed)
Local aArea    := GetArea()
Local cJSONSnd := ""

Private oRest   := FWRest():New("https://minhaempresa.com.br")
Private aHeader := {}
private cResPed := 'Pedido não localizado'
private cErro   := ''

	aAdd( aHeader, 'Content-Type: application/json;charset=utf-8' )
	aAdd( aHeader, 'User-Agent: Mozilla/4.0 (compatible; Protheus 7.00.100812P-20101227; ADVPL WSDL Client 1.101007)' )

	oRest:setPath("/wp-json/wc/v3/orders/"+cIDPed+"/?consumer_key=ck_161e0743956f2e627c5506872b89aff563bdac14&consumer_secret=cs_d7fbf510ae841b8e2f27e8ad32914444a4e596c9")
		
	If oRest:Get(aHeader)		  
		cResPed := oRest:GetResult()	   	
	Else	
		cErro := oRest:GetLastError()	
	Endif
	
	
	RestArea(aArea)
	
Return cResPed

/*---------------------------------------------------------------------*
 | Func:  AllPedSite                                                   |
 | Autor: FbSolutions                                                  |
 | Data:  15/10/2019                                                   |
 | Desc:  Função que pega os pedidos do site                           |
 | Obs.:  /                                                            |
 *---------------------------------------------------------------------*/
Static Function AllPedSite()
Local aArea    := GetArea()
Local cJSONSnd := ""
Local cDtPar   := substr(dtos(Date()), 1, 4 ) + "-" + substr(dtos(Date()), 5, 2 ) + "-" + substr(dtos(Date()), 7, 2 )
Local cHrPar   := "T00:00:00" //Time()    

Private oRest   := FWRest():New("https://minhaempresa.com.br")
Private aHeader := {}
private cResult := ''
private cErro   := ''

	aAdd( aHeader, 'Content-Type: application/json;charset=utf-8' )
	aAdd( aHeader, 'User-Agent: Mozilla/4.0 (compatible; Protheus 7.00.100812P-20101227; ADVPL WSDL Client 1.101007)' )

	//oRest:setPath("/wp-json/wc/v3/orders/?consumer_key=ck_161e0743956f2e627c5506872b89aff563bdac14&consumer_secret=cs_d7fbf510ae841b8e2f27e8ad32914444a4e596c9&status=processing&after=" + cDtPar + cHrPar )
	oRest:setPath("/wp-json/wc/v3/orders/?consumer_key=ck_161e0743956f2e627c5506872b89aff563bdac14&consumer_secret=cs_d7fbf510ae841b8e2f27e8ad32914444a4e596c9&status=processing&after=2018-08-27T10:45:00")
	
	//Verificar status do Pedido
		
	If oRest:Get(aHeader)		  
		cResult := oRest:GetResult()	   	
	Else	
		cErro := oRest:GetLastError()	
	Endif
	
	
	RestArea(aArea)
	
Return cResult


/*---------------------------------------------------------------------*
 | Func:  SndPed2                                                      |
 | Autor: FbSolutions                                                  |
 | Data:  25/05/2019                                                   |
 | Desc:  Função que envia a requisição REST                           |
 | Obs.:  modelo com a função XMLPostRet                               |
 *---------------------------------------------------------------------*/
User Function SndPed2()
Local nAux       := 1
Local cSoapSend
Local XMLHeadRet
Local aHeader   := {}
Local XMLPostRet		
	
	XMLHeadRet:= ""	
	aAdd( aHeader, 'Content-Type: application/json;charset=utf-8' )
	aAdd( aHeader, 'User-Agent: Mozilla/4.0 (compatible; Protheus 7.00.100812P-20101227; ADVPL WSDL Client 1.101007)' )
	
	For nAux := 1 To Len(aHeader)
		ConOut( "HeaderOut: " + aHeader[nAux] )
	Next

	_URL:= "https://minhaempresa.com.br/wp-json/wc/v3/orders/?consumer_key=ck_161e0743956f2e627c5506872b89aff563bdac14&consumer_secret=cs_d7fbf510ae841b8e2f27e8ad32914444a4e596c9&status=processing&after=2019-08-27T10:45:00"
	
	// HttpPost( < cUrl >, [ cGetParms ], [ cPostParms ], [ nTimeOut ], [ aHeadStr ], [ @cHeaderGet ] )
	XMLPostRet := HTTPSGet(_URL, "", "", "", aHeader, @XMLHeadRet)		

	If ValType(XmlPostRet) <> "U"			   	
	   	cMsgErro := ""	
	else				
		cMsgErro := erro		
	EndIf 
	
Return


 

Independentemente do método escolhido, a integração do ERP Protheus com o WooCommerce pode fornecer uma série de benefícios, como redução de erros de entrada de dados, maior eficiência no gerenciamento de estoque e processamento mais rápido de pedidos. Em resumo, o WooCommerce é uma excelente plataforma de comércio eletrônico, com muitas vantagens e recursos. Com sua escalabilidade, personalização e SEO amigável, é uma excelente escolha para proprietários de lojas on-line que desejam uma plataforma confiável e flexível para gerenciar seu negócio on-line.