paulosscruz / senior-g5-php
用于使用 ERP Senior 的 Web Service G5 的类生成器。
Requires
- php: ^7.2
- ext-json: *
- ext-soap: *
- wsdl2phpgenerator/wsdl2phpgenerator: ^3.4
README
这个库将 Senior 的 G5 技术服务映射到一个 PHP 类集合。
安装
通过 Composer 将 senior-g5-php 添加到您的项目中
composer require paulosscruz/senior-g5-php
支持
目前,该库支持 Senior 官方文档中提供的所有 G5 技术 服务。
工作原理
在映射服务 WSDL 之后,将生成一个主类,其中包含每个可用的端口的对应方法,以及一组辅助类,这些类映射了各自端口的输入和输出属性。
为此,您需要获取要映射的服务 WSDL,您可以在 Senior 的官方文档中找到它。
您将通过命令提示符使用 generator
命令来映射 WSDL,以下为可用参数列表:
在此示例中,我们将使用具有多个端口的 com.senior.g5.co.ger.cad.clientes
服务,其中包括 obterCliente
,该端口能够获取特定客户的登记信息。
映射 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
注意:请确保在项目根目录下执行此命令。
类将生成在 senior/services/Clientes
目录中,请注意,库始终会从 outputDir
创建一个额外的目录,以根据 服务 分隔类并避免重复问题。
在此情况下,我们将有一个包含代表该服务中所有可用端口的方法的 Clientes.php
类。方法 obterClientes
的签名如下
/** * @param string $user * @param string $password * @param int $encryption * @param clientesobterClienteIn $parameters * @return clientesobterClienteOut */ public function obterCliente($user, $password, $encryption, clientesobterClienteIn $parameters) { // }
自动生成
clientesobterClienteIn
和clientesobterClienteOut
类以映射请求的输入和输出属性。
注意:这些类的命名是根据 Senior Web Services 的 Stub 来的,因此,它们的名称可能不太方便或太长。我正在努力改进这一点。
现在,只需使用主类来访问 Senior 的 Web Service G5,如下面的示例所示
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();
注意:每个服务在其目录中都有一个
autoload.php
文件,负责自动映射和包含主类及其辅助类。
映射特定的 WSDL 端口
某些服务具有许多不同的端口或同一端口的多个版本。在映射 WSDL 时使用 --operationNames
参数,您可以过滤要映射的端口,从而避免不必要的劳动和代码。
# 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
要映射多个端口,只需传递一个包含所有端口(用逗号分隔,并用引号括起来)的列表即可。
# 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"
使用 命名空间
要指定要生成的类的 命名空间,您需要在映射 WSDL 时使用 --namespace
参数。
# 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
现在,您可以使用 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();
注意:考虑为每个服务创建独立的命名空间,以避免重复问题。
限制
默认情况下,主类在其实现中固定了Web服务的地址,因此,每当您的应用服务器(《Glassfish》)的托管地址发生更改时,您都需要重新映射所有使用的服务。
替代方案
如果您查看主类的实现,会发现其构造函数有一些可选参数。
/** * @param array $options A array of config values * @param string $wsdl The wsdl file to use */ public function __construct(array $options = array(), $wsdl = null) { // }
建议您在您的应用中实现额外的功能,并创建一个基于文件或类的配置来存储所有使用的服务的地址。
之后,每次实例化主类时只需传递地址即可。
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 在 MIT 许可协议 下发布。