spojenet/flexibee

用于轻松与捷克经济系统AbraFlexi交互的库。

2.25.3 2024-04-18 14:27 UTC

README

PHP AbraFlexi Logo

基于PHP7.1+的库,用于轻松与捷克会计系统AbraFlexi交互。

CZ: PHP库,用于轻松与捷克经济系统AbraFlexi交互

Latest Version Software License GitHub forks wakatime Docker pulls Latest stable

Latest Stable Version Total Downloads Total Downloads Latest Unstable Version License Monthly Downloads Daily Downloads

感谢

没有公司Spoje.Net的慷慨支持,这个库是无法诞生的,它承担了LMS / AbraFlexi连接解决方案的开发和库存导入。👍

Spoje.Net

我还要感谢技术支持公司ABRA Flexi s.r.o.在回答我的有时不够聪明的问题和bug报告时的耐心。

在GDPR日志记录的目的下,结果解析得到了<PureHTML>的友好支持。

安装

    composer require spojenet/flexibee

如果您的composer.json文件大致如下

{
    "name": "vendor/projectname",
    "description": "Test",
    "type": "project",
    "require": {
        "spojenet/flexibee": "*"
    },
    "license": "MIT",
    "authors": [
        {
            "name": "Vítězslav Dvořák",
            "email": "info@vitexsoftware.cz"
        }
    ],
    "minimum-stability": "stable"
}

通过运行命令 composer install 进行安装

Compser Install

配置

配置通过设置以下常量来完成

   /*
    * URL AbraFlexi API
    */
    define('ABRAFLEXI_URL', 'https://abraflexi-dev.spoje.net:5434');
   /*
    * Uživatel AbraFlexi API
    */
    define('ABRAFLEXI_LOGIN', 'apiuser');
   /*
    * Heslo AbraFlexi API
    */
    define('ABRAFLEXI_PASSWORD', 'apipass');
   /*
    * Společnost v AbraFlexi
    */
    define('ABRAFLEXI_COMPANY', 'test_s_r_o_');
   /*
    * Nebo pokud nechceme používat jméno a heslo 
    */
    define('ABRAFLEXI_AUTHSESSID', '6QuifebMits'); //Volitelné
   /*
    * Pomalý server, velká databáze a přes modem k tomu
    */
    define('ABRAFLEXI_TIMEOUT', 60); //Volitelné
   /*
    * Pomalý server, velká databáze a přes modem k tomu
    */
    define('ABRAFLEXI_EXCEPTIONS', true); //Vracet PHP vyjímku v případě že AbraFlexi vrátí chybu

如果没有设置常量,则使用与同名字符环境变量相同的配置类。例如 getenv('ABRAFLEXI_URL')

也可以在创建类实例时输入登录凭据。

    $invoicer = new \AbraFlexi\FakturaVydana(null,[
                'company' => 'Firma_s_r_o_',
                'url' => 'https://abraflexi.firma.cz/',
                'user' => 'rest',
                'password' => '-dj3x21xaA_'
            ]);

这种方法比上面定义的常量具有更高的优先级。

    $order = new \AbraFlexi\ObjednavkaPrijata('code:OBP0034/2019',['companyUrl'=> $_GET['companyUrl'], 'authSessionId'=>$_GET['authSessionId'] ])

这样,应用程序就可以通过传递值 companyUrlauthSessionId 的用户按钮来连接到abraflexi和特定的订单。

这是如何工作的?

整个库的核心组件是Třída RO类,它能够通过PHP扩展curl与AbraFlexi REST Api通信。

从它派生出了针对单个证据的类,包含常用的操作方法,例如在已接收发票的情况下“支付”。

新的派生类是通过将证据名称用作类名来创建的,但不包含连字符。这些在名称中用大写字母替换。

    function evidenceToClass($evidence)
    {
        return str_replace(' ', '', ucwords(str_replace('-', ' ', $evidence)));
    }

这意味着,如果我们想要为“Měrné jednotky”(计量单位)证据创建一个新的类,它将看起来像这样

    <?php
    /**
     * @link https://demo.abraflexi.eu/c/demo/merna-jednotka/properties Vlastnosti evidence
     */
    class MernaJednotka extends /AbraFlexi/RW
    {
        /**
         * Evidence užitá objektem.
         *
         * @var string
         */
        public $evidence = 'merna-jednotka';
    }

然后就可以轻松地在两行中列出计量单位

    $jednotky = new MernaJednotka();
    print_r( $jednotky->getAllFromAbraFlexi() );

如果希望新创建的类能够将数据写入abraflexi,则需要从AbraFlexiRW父类中派生它。

更多用法示例可以在独立项目中找到

证据、操作和关系的结构

在某些情况下,了解我们可以执行的操作或证据的结构是有用的。这些信息可以通过调用https://demo.abraflexi.eu/c/demo/*/properties.jsonhttps://demo.abraflexi.eu/c/demo/*/actions.json获得,但这些是相对耗时的操作。由于AbraFlexi的证据和操作或证据之间的关系结构通常不会改变,AbraFlexi提供了一个机制,允许在不必要查询服务器的情况下处理这些数据。

结构存储在Structure(Actions,Relations)类中,它包含一个静态定义的数组,包含从AbraFlexi获取的信息。

可以随时轻松显示证据列表中的条目https://demo.abraflexi.eu/c/demo/evidence-list

    echo \AbraFlexi\Structure::$evidence['faktura-vydana'];

各个证据的结构随后存储在静态变量中。它们的名称遵循与创建新类名称相同的规则,只是首字母小写。即:

    lcfirst(\AbraFlexi\RO::evidenceToClassName($evidence))

如有需要,可以使用以下命令生成这些类及其当前内容

cd tools/ 
./update_all.sh

操作需要几分钟。我们可以这样查看进度

tail -f /var/log/syslog | grep  AbraFlexitest

调试模式

如果将 AbraFlexi 对象中的 $this->debug 设置为 true,则在将数据发送到 AbraFlexi 之前将执行额外的测试。检查以下可能的错误

  • 是否存在为证据定义的插入字段?
  • 插入字段是否仅为读取?
  • 如果插入字段是关联的,它是字段吗?

在调试模式下,所有对 abraflexi 的请求及其响应都存储在 /tmp 文件夹中

库包含向开发人员发送 AbraFlexi 运行时记录错误的机制

如果 AbraFlexi 返回 Internal Server Error 500,将向开发人员发送包含错误消息的电子邮件。

如果使用在相同服务器上运行的 AbraFlexi 并可以读取错误日志,则从其中提取相关片段并将其添加到电子邮件正文中。

电子邮件还包括有关许可证和授权模块的额外信息。

作为附件,还包括包含服务器请求正文、响应正文和 curl 信息文件的文件。

在对象的生命周期中,错误会被记录,并且只发送每种类型的第一个。

更新到版本 2.0

与 1.x 相比,以下内容已更改

  • FlexiBeeRO 和 FlexiBeeRW 类已消失(现在为 RO 和 RW)
  • AbraFlexi 的数据已类型化(不再是字符串)
  • 所有 FlexiBee 都已重命名为 AbraFlexi
  • 在服务器错误时抛出异常(以前仅记录日志)
  • 请求不指定结果数量(必须明确请求 api 请求的所有结果的限制 0)
  • 不再使用旧的数组字段表示法

默认 原生类型 将反映为从服务器收到的日期数据为 DateTime 对象,'id' 列为整数等。此行为可以通过构造函数参数 ['nativeTypes' = false] 禁用。

    new \AbraFlexi\FakturaVydaná( 'code:VF2-12345', ['nativeTypes'=>false,'debug'=>true,'ignore404'=>false] );

请参阅:RO 构造函数

可以设置以下参数之一

 * user,password,authSessionId - autentifikace
 * company,url,evidence - vynucení parametrů přístupu
 * prefix - pro url začínající jinak než  '/c/' pro  company
 * defaultUrlParams - pole vlastností pak automaticky přidávané
 * debug - pro zapnutí ladícího režimu
 * detail - pro specifikaci požadované [úrovně detailů](https://www.flexibee.eu/api/dokumentace/ref/detail-levels/). 
 * offline - nevykonávají se žádné síťové operace ( nepřiřipojit se při instancování objektu ) 
 * filter - viz [Filtrování](https://www.flexibee.eu/api/dokumentace/ref/filters}
 * ignore404 - v případě že nevím zdali požadovaný záznam existuje nastavte na true aby to nevyhodilo chybu
 * nativeTypes - pokud chci všecho ze serveru vracet jako stringy 
 * timeout - trpělivost než se vyhodí chyba síťové komunikace (předáváno do cURL)
 * companyUrl - načte si z řetězce všechny náležitosti k připojení (heslo pro API atd..)
 * ver - vynucení verze api (pokud chcete volat funkce určené pro nové webové rozhraní)
 * throwException - vyhodit vyjímku při každé vhodné příležitosti

数据自动加载

如果将对象的构造函数传递 int 类型的 ID 或记录代码(code:..),则调用此函数 loadFromAbraFlexi(id)。然后可以使用 $this->getData() 和 RO::getDataValue('nazev') 方法访问已加载的值。

数据类型

由于 API 返回的数据基本上是字符串,因此库执行数据类型自动转换。

测试

PHPUnit 测试位于 testing 文件夹中。如果您想测试非官方服务器(如 http://demo.abraflexi.eu/),则需要更改 bootstrap.php 文件中的设置。

$testServer 变量的内容确定将使用哪个预定义设置。当然,您也可以定义自己的设置。以下是一个示例测试服务器 spoje.net。

请首先创建测试公司 TESTING s.r.o. 并设置具有使用 REST API 权限的用户凭据。(这是在安装 AbraFlexi 时输入的管理员用户。)

注意:测试与包含大量发票和连接银行的公司的公司可能需要一些时间,因为还测试了自动配对发票的调用。

如果您决定在项目中继承 AbraFlexi 并为这些类编写测试,例如

class HookRecieverTest extends \Test\AbraFlexi\ChangesTest

请将 composer.json 中添加到原始测试的路径

    "autoload-dev": {
        "psr-4": {
            "Test\\": "vendor/spojenet/php-abraflexi/test/src/AbraFlexi/test/",
            "Test\\Ease\\": "vendor/vitexsoftware/ease-core/tests/src/Ease",
            "Test\\AbraFlexi\\": "vendor/spojenet/php-abraflexi/test/src/AbraFlexi/",
         }
    }

示例

在 Examples 文件夹中包含这些使用示例

使用示例

参考资料

AbraFlexi的其他语言库

WakaTime项目工作统计 重命名前的项目工作统计(约250小时)