spojenet / flexibee
用于轻松与捷克经济系统AbraFlexi交互的库。
Requires
- ext-curl: *
- ext-gettext: *
- ext-json: *
- vitexsoftware/ease-core: dev-main
Requires (Dev)
- ext-iconv: *
- phing/phing: *
- phpunit/phpunit: *
README
基于PHP7.1+的库,用于轻松与捷克会计系统AbraFlexi交互。
CZ: PHP库,用于轻松与捷克经济系统AbraFlexi交互
感谢
没有公司Spoje.Net的慷慨支持,这个库是无法诞生的,它承担了LMS / AbraFlexi连接解决方案的开发和库存导入。👍
我还要感谢技术支持公司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 进行安装
配置
配置通过设置以下常量来完成
/* * 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'] ])
这样,应用程序就可以通过传递值 companyUrl 和 authSessionId 的用户按钮来连接到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.json或https://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 文件夹中包含这些使用示例
使用示例
- Flexplorer 开发者工具和记录编辑器
- FlexiProXY 修改 AbraFlexi 网络界面的模块
- Upomínač 提醒发送器
- Matcher 发票配对器
- Redmine2AbraFlexi 从Redmine生成工作时间发票
- FlexiPeeHP-Bricks 与AbraFlexi一起使用时的示例和常用类
- AbraFlexi Tools AbraFlexi命令行脚本工具
参考资料
- 从FAPI导入数据到AbraFlexi - blahasoft.cz
- 从iDoklad导入数据到AbraFlexi - blahasoft.cz
AbraFlexi的其他语言库
- Flexipy (Python) 文档
- Flexibee.rb (Ruby)
- UniMapper Flexibee扩展 (PHP)
- Flexibee客户端 (PHP)
- flexibee-client (PHP)
- flexibee-client (PHP)
- Flexibee (Java)
WakaTime项目工作统计 重命名前的项目工作统计(约250小时)