spoje.net/flexipeehp

此包已被弃用,不再维护。作者建议使用 spojenet/flexibee 包。

基于 PHP 的库,易于与捷克会计系统 Flexibee 交互。

2.0 2019-03-13 14:02 UTC

README

FlexiPeeHP Logo

基于 PHP 的库,易于与捷克会计系统 FlexiBee 交互。

CZ: PHP 库,用于轻松处理与捷克经济系统 FlexiBee 的交互

❗ 此库将被标记为过时。请注意其轻量级继任者 https://github.com/Spoje-NET/php-flexibee

Source Code Latest Version Software License Build Status Code Coverage Docker pulls Total Downloads Latest stable time tracker

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

SensioLabsInsight

感谢

本库的创建离不开 Spoje.Net 公司的慷慨支持,该公司承担了 LMS / FlexiBee 连接解决方案的开发和库存导入。👍

Spoje.Net

我还要感谢技术支持公司 ABRA Flexi s.r.o. 的耐心,他们在回答我时而愚蠢的问题和错误报告时表现出了极大的耐心。

GDPR 日志记录的解析得到了 <PureHTML> 的支持。

安装

composer require spoje.net/flexipeehp

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

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

使用 composer install 命令进行安装

Compser Install

配置

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

   /*
    * URL Flexibee API
    */
    define('FLEXIBEE_URL', 'https://flexibee-dev.spoje.net:5434');
   /*
    * Uživatel FlexiBee API
    */
    define('FLEXIBEE_LOGIN', 'apiuser');
   /*
    * Heslo FlexiBee API
    */
    define('FLEXIBEE_PASSWORD', 'apipass');
   /*
    * Společnost v FlexiBee
    */
    define('FLEXIBEE_COMPANY', 'test_s_r_o_');
   /*
    * Nebo pokud nechceme používat jméno a heslo 
    */
    define('FLEXIBEE_AUTHSESSID', '6QuifebMits'); //Volitelné
   /*
    * Pomalý server, velká databáze a přes modem k tomu
    */
    define('FLEXIBEE_TIMEOUT', 60); //Volitelné

或者可以在创建类实例时输入登录凭证。

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

此设置方式优先级高于上述定义的常量。

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

这样,可以通过用户点击传递值 companyUrlauthSessionId 的按钮来连接到 FlexiBee 和特定的订单。

它是如何工作的?

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

由此衍生出针对单个记录的类,包含常用的操作方法,例如“支付”接收到的发票。

新派生的类的名称是记录的名称,但没有破折号。破折号在名称中由大写字母替换。

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

例如,如果我们想为“计量单位”记录派生新类,它将看起来像这样

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

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

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

如果我们希望新创建的类能够写入 FlexiBee,则需要从 FlexiBeeRW 祖先类中派生它。

更多示例可以在 单独的项目中找到

记录、操作和关系的结构

在某些情况下,了解可以执行哪些操作以及证据的结构是很有用的。这些信息可以通过调用 https://demo.flexibee.eu/c/demo/*/properties.jsonhttps://demo.flexibee.eu/c/demo/*/actions.json 获取,但这些都是相对耗时的工作。由于 FlexiBee 的证据结构和动作或证据之间的关系通常不会改变,FlexiPeeHP 提供了一种机制,允许在不需要从服务器查询的情况下处理这些数据。

结构存储在 Structure(动作、关系)类中,该类包含一个静态定义的数组,包含从 FlexiBee 获取的信息。

证据列表中的项目可以通过以下链接随时轻松查看 https://demo.flexibee.eu/c/demo/evidence-list

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

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

    lcfirst(\FlexiPeeHP\FlexiBeeRO::evidenceToClassName($evidence))

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

cd tools/ 
./update_all.sh

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

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

调试模式

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

  • 是否存在定义的证据的插入字段?
  • 插入字段是否仅为读取?
  • 如果插入字段是链接,则该字段也是字段吗?

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

库包含向 FlexiBee 开发者发送记录错误的机制

如果 FlexiBee 返回内部服务器错误 500,则会将包含错误信息的电子邮件发送给开发者。

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

电子邮件还包含有关许可证和授权模块的附加信息。

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

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

测试

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

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

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

注意:如果测试的是拥有大量发票和连接银行的公司,测试可能需要一些时间,因为还会测试自动对账单的调用。

如果您的项目决定继承 FlexiPeeHP 并为这些类编写测试,也可以继承 FlexiPeeHP 的测试,例如

class HookRecieverTest extends \Test\FlexiPeeHP\ChangesTest

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

"autoload-dev": {
    "psr-4": {
        "Test\\": "vendor/spoje.net/flexipeehp/testing/src/FlexiPeeHP/testing/",
        "Test\\Ease\\": "vendor/vitexsoftware/ease-framework/tests/src/Ease",
        "Test\\FlexiPeeHP\\": "vendor/spoje.net/flexipeehp/testing/src/FlexiPeeHP/",
     }
}

示例

示例位于 Examples 文件夹中

文件 描述
AttachmentSaveToFile.php 将附件保存到文件
AttachmentUpload.php 上传附件
AuthSessionIdUsage.php AuthSessionId 的示例
AuthentizeContact.php 接触认证
BatchOperation.php 在批量操作中使用过滤器
CreateLabel.php 与标签一起工作
DryRun.php 测试保存(dry-run)
DownloadInvoicePDF.php 下载 PDF 发票
错误404.php 处理不存在记录
FindOverdueInvoices.php 查找逾期发票
GetRecordWithRelation.php 获取包括凭证数据的记录
GetBankAccountForCompany.php 从目录中获取公司银行账户
InvoiceLockUnlock.php 锁定和解锁记录
InvoiceCopy.php 从存档创建税务单据
LoginLogout 用户登录和注销
NajdiDanovyDokladKzalohovemu.php 查找凭证
Naskladnění.php 带有序列号的库存产品
NewInvoice.php 作为json列出的具有到期日的新的发票
ObjectChaining.php 在单个调用中执行多个操作的链式对象
ObjectCooperation.php 在对象之间共享数据和连接参数
PerformingActions.php 如何对单据执行操作。例如,取消
ReadAddressColumns.php 返回特定列
sendInvoiceByMail.php 通过电子邮件发送发票
SendReminders.php 发送提醒
SetContactAuth.php 设置认证
TestConnection.php 检查连接

使用示例

参考

Docker

docker pull vitexsoftware/flexipeehp

Debian/Ubuntu

对于Linux,有可用的 .deb 软件包。请使用repo

wget -O - http://v.s.cz/info@vitexsoftware.cz.gpg.key|sudo apt-key add -
echo deb http://v.s.cz/ stable main > /etc/apt/sources.list.d/ease.list
aptitude update
aptitude install flexipeehp

在这种情况下,需要将以下内容添加到您的应用程序的 composer.json 文件中

    "require": {
        "spojenet_flexipeehp": "*",
        "vitexsoftware_ease-framework": "*"
    },
    "repositories": [
        {
            "type": "path",
            "url": "/usr/share/php/FlexiPeeHP",
            "options": {
                "symlink": true
            }
        },
        {
            "type": "path",
            "url": "/usr/share/php/Ease",
            "options": {
                "symlink": true
            }
        }
    ]

因此,在安装依赖项时,它将看起来像这样

Loading composer repositories with package information
Installing dependencies from lock file
  - Installing vitexsoftware_ease-framework (1.1.3.3)
    Symlinked from /usr/share/php/Ease

  - Installing spojenet_flexipeehp (0.2.1)
    Symlinked from /usr/share/php/FlexiPeeHP

可以通过 apt-get 在整个系统中全局更新。

我们还生成了一个名为 flexipeehp-doc 的软件包,其中包含由 ApiGen 生成的开发文档。文档可在http://flexibee-dev.spoje.net/flexipeehp/ 上在线查看。

测试

 cd /usr/share/doc/FlexiPeeHP/
 composer install
 php -f flexibeeping.php

Debian Test

构建

通过运行 make deb 创建Debian软件包

Docker镜像

docker build -t vitexsoftware/flexipeehp

FlexiBee库支持其他语言

WakaTime 项目工作统计