paulosscruz/senior-g5-php

用于使用 ERP Senior 的 Web Service G5 的类生成器。

1.0.0 2021-03-19 13:27 UTC

This package is auto-updated.

Last update: 2024-09-19 20:50:26 UTC


README

这个库将 Senior 的 G5 技术服务映射到一个 PHP 类集合。

安装

通过 Composersenior-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)
{
    // 
}

自动生成 clientesobterClienteInclientesobterClienteOut 类以映射请求的输入和输出属性。

注意:这些类的命名是根据 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-phpMIT 许可协议 下发布。