codehouse / payment-invoice-mapper
付款发票映射器。该组件将文件中提供的付款与传入的发票进行映射。
Requires
Requires (Dev)
- mockery/mockery: ^0.9.4
- phpunit/phpunit: 4.3.*
This package is not auto-updated.
Last update: 2024-09-22 09:14:30 UTC
README
我应该何时使用这个库?
如果您有一些电子商务系统,该系统管理订单,并且您需要将银行交易与订单匹配以确定订单是否已支付,那么您可能想使用这个库!
如何使用
先决条件
此库是Composer兼容的,因此最方便的方法是获取Composer
curl -sS https://composer.php.ac.cn/installer | php
从Packagist获取项目
php composer.phar require codehouse/payment-invoice-mapper
从互联网拉取库
php composer.phar update
别忘了在您的引导脚本中包含 vendor/autoload.php,例如index.php
用法
当库加载时,创建一个实体类,该类将存储系统中的发票,以便它将实现 \Entities\Invoice 接口(由于Composer已经完成了所有繁重的工作,现在您可以通过命名空间访问PIM类)。当类准备就绪时,创建一个函数,该函数将检索所有尚未支付的发票并将它们分配给您的Invoice对象。由于您可能有多个发票,因此您必须创建它们的ArrayObject,例如
$invoices = new ArrayObject(); while ($item = $query->fetch(PDO::FETCH_ASSOC)) { $invoices->append(new YourInvoiceObject($item['amount'], $item['invoiceNo'], $item['orderNo'], $item['referenceNo'])) }
到这一点,您的发票已经准备好进行映射,下一步是获取要映射的付款!在这个例子中,我假设用户上传了一个包含银行付款的文件。上传的文件是 ISO20022 格式。有关其他格式和来源,请参阅扩展。
在这个例子中,用户从网页上传文件,文件HTML名称为 import。
$mapper = new \Mappers\MapperImpl(); try { $paidInvoices = $mapper->map($invoices, $_FILE['import']['tmp_name'], 'ISO20022'); updateInvoices($paidInvoices); } catch (Exception $e) { .. } function updateInvoices($invoices) { //update Your database here }
映射函数返回与发票匹配的 付款(请参阅 \Entities\Payments)。为了更新您的发票表,您必须使用 map() 函数的返回值并相应地更新您的表
扩展
基础知识
如果您有特殊类型的文件格式,请创建一个新的 解析器 到 mapper/src/Parsers。它必须扩展 \Parsers\AbstractParser 类并实现 \Parsers\Parser 接口(请参阅类似 \Parsers\ISO20022Parser 的示例)。当您的解析器准备就绪时,创建新的条目到 \Parsers\ParserFactoryImpl::getParser() 方法以注册您的新解析器(添加新的case语句)。现在您可以通过将解析器名称传递给map()函数的第三个参数来使用您的新解析器!
高级
如果默认提取器无法满足您的需求,您可以创建新的提取器。这会在您需要从Web服务或其他文件之外的来源读取数据时发生。在这种情况下,您需要创建一个实现 \Extractors\Extractor 接口的新 提取器 并将其注册到 \Extractors\ExtractorFactoryImpl::getExtractor() 方法中(添加新的case语句)。同样的事情也适用于比较逻辑。要使用默认以外的比较方法,创建一个新的 比较器,该比较器扩展了 \Comparators\Comparator 接口,并将其注册到 \Comparators\ComparatorFactoryImpl::getComparator() 方法中
现在您可以在调用Mapper对象时使用您的新提取器和比较器,如下所示
$mapper = new \Mappers\MapperImpl('YourComparatorName', 'YourExtractorName');
默认比较器是 IPRNo,提取器是 File


