Esta biblioteca mapeia os serviços da tecnologia G5 da Senior em um conjunto de classes PHP.
Adicione senior-g5-php no seu projeto via Composer:
composer require paulosscruz/senior-g5-php
Atualmente, esta biblioteca suporta todos os serviços da tecnologia G5 disponíveis na documentação oficial da Senior.
Versão | Sistema | Suporte |
---|---|---|
5.8.10 | ERP Senior | SIM |
5.8.11 | ERP Senior | SIM |
5.10.1 | ERP Senior | SIM |
6.2.33 | VetoRH | SIM |
6.2.34 | VetoRH | SIM |
6.2.35 | VetoRH | SIM |
Após o mapear o WSDL do serviço, será gerada uma classe principal que conterá um método para cada porta disponível, juntamente com um conjunto auxiliar de classes que mapeia todos os atributos de entrada e saída de suas respectivas portas.
Para isso, é necessário obter o WSDL do serviço que sera mapeado, você pode encontra-lo na documentação oficial da Senior.
Você utilizará o comando generator
via prompt para mapear o WSDL, abaixo a lista de argumentos disponíveis:
Argumento | Descrição | Obrigatório? |
---|---|---|
--wsdl |
URL WSDL do serviço (Disponível na documentação oficial da Senior). | SIM |
--serviceName |
Nome do serviço (Este será o nome da classe principal). | SIM |
--outputDir |
Diretório onde as classes geradas serão armazenadas (Por padrão, será criado um diretório adional a partir daqui para cada serviço mapeado). | SIM |
--operationNames |
Alguns serviços possuem muitas portas diferentes ou versões de uma mesma porta, portanto, aqui você pode especificar quais dessas portas você deseja mapear. | NÃO |
--namespace |
Especificar o namespace das classes que serão geradas, se não for informado as classes não terão um namespace. | NÃO |
Neste exemplo, vamos utilizar o serviço com.senior.g5.co.ger.cad.clientes
que possue várias portas, entre elas obterCliente
que é capaz de obter o cadastro de um cliente especifico.
# php vendor/paulosscruz/senior-g5-php/bin/generator --wsdl http://example.com/g5-senior-services/sapiens_Synccom_senior_g5_co_ger_cad_clientes?wsdl --serviceName Clientes --outputDir senior/services
ATENÇÃO: Lembre-se de executar este comando na raiz do seu projeto.
As classes serão geradas no diretório senior/services/Clientes
, lembrando que a biblioteca sempre cria um diretório adicional a partir de outputDir
, para separar as classes por serviço e evitar problemas de duplicidade.
Neste caso, teremos a classe Clientes.php
com todos os métodos que representam as portas disponíveis neste serviço. O método obterClientes
possui a seguinte assinatura:
/**
* @param string $user
* @param string $password
* @param int $encryption
* @param clientesobterClienteIn $parameters
* @return clientesobterClienteOut
*/
public function obterCliente($user, $password, $encryption, clientesobterClienteIn $parameters)
{
//
}
As classes
clientesobterClienteIn
eclientesobterClienteOut
são geradas automaticamente para mapear os atributos de entrada e saída da requisição.
Observação: Essas classes são nomeadas de acordo com o Stub dos Web Services da Senior, portanto, muitas vezes seu nome pode ser pouco conveniente ou longo demais. Estou trabalhando para melhorar isso.
Agora, basta utilizar a classe principal para acessar o Web Service G5 da Senior, como no exemplo abaixo:
require_once ('./senior/services/Clientes/autoload.php');
$usuarioErp = 'teste';
$senhaErp = '123456';
$tipoCriptografia = 0;
$parametros = new clientesobterClienteIn();
$parametros->setCodigoEmpresa(1)
->setCodigoFilial(1)
->setCodigoCliente(10);
$cliente = new Clientes();
$retorno = $cliente->obterCliente($usuarioErp, $senhaErp, $tipoCriptografia, $parametros);
/* O retorno é um objeto do tipo clientesobterClienteOut conforme assinatura do método */
echo $cliente->getNomeCliente();
echo $cliente->getSaldoDuplicatas();
Observação: Cada serviço terá em seu diretório um arquivo
autoload.php
responsável por mapear e incluir a classe principal e as auxiliares automaticamente.
Alguns serviços possuem muitas portas diferentes ou versões de uma mesma porta. Utilizando o argumento --operationNames
ao mapear o WSDL, você pode filtrar as portas que deseja mapear e evitar trabalho e código desnecessário.
# php vendor/paulosscruz/senior-g5-php/bin/generator --wsdl http://example.com/g5-senior-services/sapiens_Synccom_senior_g5_co_ger_cad_clientes?wsdl --serviceName Clientes --outputDir senior/services --operationNames obterCliente
Para mapear mais de uma porta, basta passar uma lista com todas separadas por uma vírgula e entre aspas.
# php vendor/paulosscruz/senior-g5-php/bin/generator --wsdl http://example.com/g5-senior-services/sapiens_Synccom_senior_g5_co_ger_cad_clientes?wsdl --serviceName Clientes --outputDir senior/services --operationNames "obterCliente, ExcluirClientes, GravarClientes_5"
Para especificar o namespace das classes que serão geradas, você deve utilizar o argumento --namespace
ao mapear o WSDL.
# php vendor/paulosscruz/senior-g5-php/bin/generator --wsdl http://example.com/g5-senior-services/sapiens_Synccom_senior_g5_co_ger_cad_clientes?wsdl --serviceName Clientes --outputDir senior/services --namespace Senior\Services\Clientes
Agora, você pode trabalhar utilizando os namespaces do PHP.
require_once ('./services/Clientes/autoload.php');
use Senior\Services\Clientes\Clientes;
use Senior\Services\Clientes\clientesobterClienteIn as ObterClientesIn;
use Senior\Services\Clientes\clientesobterClienteOut as ObterClientesOut;
$usuarioErp = 'teste';
$senhaErp = '123456';
$tipoCriptografia = 0;
$parametros = (new ObterClientesIn())
->setCodigoEmpresa(1)
->setCodigoFilial(1)
->setCodigoCliente(10);
$cliente = (new Clientes())
->obterCliente($usuarioErp, $senhaErp, $tipoCriptografia, $parametros);
/* O retorno é um objeto do tipo clientesobterClienteOut conforme assinatura do método */
echo $cliente->getNomeCliente();
echo $cliente->getSaldoDuplicatas();
Observação: Considere criar namespaces indepentes para cada serviço, evitando problemas com duplicidade.
Por padrão a classe principal mantém o endereço do Web Service fixo em sua implementação, portanto, sempre que você houver alterações no endereço onde o seu servidor de aplicação (Glassfish) fica hospedado, você deverá mapear novamente todos os serviços utilizados.
Se você reparar na implementação da classe principal, vai ver que o seu construtor possui alguns parâmetros que podem ser passados opcionalmente.
/**
* @param array $options A array of config values
* @param string $wsdl The wsdl file to use
*/
public function __construct(array $options = array(), $wsdl = null) {
//
}
Sugiro que você realize uma implementação adicional em sua aplicação e crie uma configuração baseada em arquivo ou classe para armazenar o endereço de todos os serviços utilizados.
Após isso, basta passar o endereço sempre que a classe principal for instanciada.
require_once ('./senior/services/Clientes/autoload.php');
$usuarioErp = 'teste';
$senhaErp = '123456';
$tipoCriptografia = 0;
$parametros = new clientesobterClienteIn();
$parametros->setCodigoEmpresa(1)
->setCodigoFilial(1)
->setCodigoCliente(10);
$cliente = new Clientes([], WSDL::CLIENTES);
$retorno = $cliente->obterCliente($usuarioErp, $senhaErp, $tipoCriptografia, $parametros);
/* O retorno é um objeto do tipo clientesobterClienteOut conforme assinatura do método */
echo $cliente->getNomeCliente();
echo $cliente->getSaldoDuplicatas();
senior-g5-php está licenciado sob a MIT License.