byrokrat / autogiro
读取和写入瑞典直接借记系统autogirot的文件
1.1.0
2020-12-25 23:14 UTC
Requires
- php: ^7.3 || ^8.0
- ext-bcmath: *
- ext-mbstring: *
- byrokrat/banking: ^2.1
- byrokrat/id: ^2
- moneyphp/money: ^3
- neitanod/forceutf8: ~2.0
This package is auto-updated.
Last update: 2024-09-04 18:15:57 UTC
README
Autogiro
读取和写入瑞典直接借记系统autogirot的文件。
有关可以将autogiro文件转换为XML的命令行工具,请参阅
autogiro2xml
。
安装
composer require byrokrat/autogiro
目录
Autogiro规范
此库是根据2016年12月13日修订的直接借记系统(autogirot)的技术手册(瑞典语)开发的。有关此文档的较新版本,请参阅Bankgirocentralen。
生成autogiro请求文件
通过向WriterFactory
提供您的银行账户号码和BGC客户号码来创建一个写入器。
$writer = (new \byrokrat\autogiro\Writer\WriterFactory)->createWriter( '123456', (new \byrokrat\banking\BankgiroFactory)->createAccount('1111-1119') );
对写入器执行操作并生成文件。
$writer->deleteMandate('1234567890'); $rawFile = $writer->getContent(); echo $rawFile;
将输出类似以下内容
0120180114AUTOGIRO 1234560011111119
0300111111190000001234567890
解析autogiro文件
使用ParserFactory
创建一个解析器。
$factory = new \byrokrat\autogiro\Parser\ParserFactory; $parser = $factory->createParser();
默认情况下,创建的解析器将解析和验证货币金额、账户号码和识别号码。使用访问者常量之一来禁用此功能。
$factory->createParser(\byrokrat\autogiro\Parser\ParserFactory::VISITOR_IGNORE_OBJECTS);
解析文件创建一个节点对象。
use byrokrat\autogiro\Tree\Node; /** @var Node */ $node = $parser->parse($rawFile);
访问特殊对象
Account
、Amount
、StateId
和Date
节点是嵌套结构,其中子节点Object
包含构造的PHP对象。使用类似以下方式访问:
$money = $node->getChild(Node::AMOUNT)->getObjectValue();
遍历解析树
这样做的一种更简单的方法是使用访问者。见下文。
通过调用hasChild()
、getChild()
和getChildren()
来遍历树。
echo $node->getChild(Node::MANDATE_REQUEST_SECTION) ->getChild(Node::DELETE_MANDATE_REQUEST) ->getChild(Node::PAYER_NUMBER) ->getValue();
或访问所有Node::DELETE_MANDATE_REQUEST
节点。
$mandateRequests = $node->getChild(Node::MANDATE_REQUEST_SECTION); foreach ($mandateRequests->getChildren(Node::DELETE_MANDATE_REQUEST) as $deleteRequest) { // process... }
尝试访问不存在的子节点将返回一个NullNode
。
echo $node->getChild('this-does-not-exist') ->getChild('and-neither-does-this') ->isNull();
使用访问者访问节点
使用访问者可以根据名称或类型访问节点。
class MyVisitor extends \byrokrat\autogiro\Visitor\Visitor { function beforeDeleteMandateRequest($node) { echo "Delete mandate request found!"; } } $visitor = new MyVisitor; $node->accept($visitor);
这也可以动态完成。
$visitor = new \byrokrat\autogiro\Visitor\Visitor; $visitor->before(Node::DELETE_MANDATE_REQUEST, function ($node) { echo "Delete mandate request found!"; });
查找授权响应
$visitor->before(Node::MANDATE_RESPONSE, function ($node) { if ($node->hasChild(Node::CREATED_FLAG)) { // Mandate successfully created } if ($node->hasChild(Node::DELETED_FLAG)) { // Mandate successfully deleted } if ($node->hasChild(Node::ERROR_FLAG)) { // Mandate error state } });
查找支付响应
$visitor->before(Node::SUCCESSFUL_INCOMING_PAYMENT_RESPONSE, function ($node) { // successfull payment.. }); $visitor->before(Node::FAILED_INCOMING_PAYMENT_RESPONSE, function ($node) { // failed payment.. });
从节点树生成XML
使用此功能可以帮助您了解解析器如何解释各种布局。
$xmlWriter = (new \byrokrat\autogiro\Xml\XmlWriterFactory)->createXmlWriter(); echo $xmlWriter->asXml( $parser->parse($rawFile) );
黑客攻击
如果已将composer作为composer
安装
make
或者使用类似的方法
make COMPOSER_CMD=./composer.phar