congressus / sepa-direct-debit
用于创建符合 pain.008.001.02 或 pain.008.001.03 标准的 SEPA 直接借记 XML (仅限 B2C,即企业对消费者) 文件的包。
Requires
- php: >=5.2
This package is not auto-updated.
Last update: 2024-09-28 19:51:39 UTC
README
#SEPA SDD (Sepa Direct Debit) 2.0
##1. 安装SEPA SDD 需要 PHP 5,不需要其他库。
要安装,请将 SEPASDD.php 类复制到 web 服务器上的一个文件夹中,并按以下方式包含它
require_once([path_from_webroot_to_folder]/SEPASDD.php);
##2. 配置
SEPA SSD 需要一个配置数组,该数组在初始化时进行验证。以下参数是必需的
- name: 债权人(组织)的名称。
- IBAN: 债权人的国际银行账户号码。
- BIC: 债权人的银行识别码。(可选)
- batch: 是否作为批量处理或作为单个交易处理。允许:True 或 False(必须是布尔值)。
- creditor_id: 债权人的 ID,如果您不知道这个 ID,请联系您的银行。
- currency: 定义金额的货币。允许:ISO 4217。
- version: PAIN.008.001 版本。(可选)允许:3
- validate: 是否使用 BIC 和 IBAN 的内部验证机制(可选)允许:True 或 False(必须是布尔值)。
#####注意:当将批量设置为 true 时,SEPASDD 将为每种直接借记交易类型(“FRST”、“RCUR”等)和所需的收款日期创建一个批量。这意味着所有 2014-01-30 收款日期的“FRST”交易将分组在一个批中。
####示例
$config = array("name" => "Test", "IBAN" => "NL50BANK1234567890", "BIC" => "BANKNL2A", "batch" => true, "creditor_id" => "00000", "currency" => "EUR" );
##3. 使用
###3.1 初始化
使用以下配置创建类的实例
try{ $SEPASDD = new SEPASDD($config); }catch(Exception $e){ echo $e->getMessage(); }
###3.2 创建付款
SEPA SDD 使用 addPayment 方法创建付款,它需要一个付款数组。以下参数是必需的
- name: 债务人的名称。允许:140 个 ASCII 字符(ISO 20022 MaxText140)
- IBAN: 债务人的国际银行账户号码。允许:/[a-zA-Z]{2}[0-9]{2}[a-zA-Z0-9]{4}[0-9]{7}([a-zA-Z0-9]?){0,16}/(注意:此类不执行校验位(索引 2 和 3)验证。请自行提供。)
- BIC: 债务人的银行识别码。(可选)允许:([a-zA-Z]{4}[a-zA-Z]{2}[a-zA-Z0-9]{2}([a-zA-Z0-9]{3})?)
- amount: 从债务人转给债权人的金额(以分为单位)。允许:int/string(不允许分隔符)例如 EUR 10.00 必须输入为 1000 或“1000”
- type: 直接借记交易类型。允许:FRST(第一次),RCUR(定期),OOFF(一次性),FNAL(最后)
- collection_date: 应从债务人那里收取金额的日期。允许:ISO 8601(YYYY-MM-DD)。此日期应在未来,具体取决于直接借记的类型。请参阅定义。
- mandate_id: 债务人书面的授权书的 ID。允许:35 个 ASCII 字符。(ISO 20022 MaxText35)
- mandate_date: 授权书签署的日期。允许:ISO 8601(YYYY-MM-DD)。对于在 SEPA 要求之前签订的授权书:2009-11-01。
- description: 交易的描述。允许:140 个 ASCII 字符(ISO 20022 MaxText140)
以下参数是可选的
- end_to_end_id: 引用此付款的唯一(对于债权人所做的所有交易)ID。允许:35 个 ASCII 字符。(ISO 20022 MaxText35)
该方法将返回 end_to_end_id。
####示例
$payment = array("name" => "Test von Testenstein", "IBAN" => "NL50BANK1234567890", "BIC" => "BANKNL2A", "amount" => "1000", "type" => "FRST", "collection_date" => "2013-07-12", "mandate_id" => "1234", "mandate_date" => "2009-11-01", "description" => "Test Transaction" );
然后使用 addPayment 方法将付款添加到文件中
####示例
try{ $endToEndId = $SEPASDD->addPayment($payment); }catch(Exception $e){ echo $e->getMessage(); }
您可以使用此方法多次添加更多付款。
###3.3 保存文件
要保存文件,请使用 save
方法,这将返回XML字符串。如果您想保存到文件,您必须自己完成。
####示例
try{ $SEPASDD->save(); }catch(Exception $e){ echo $e->getMessage(); }
之后,如果您想创建另一个文件,请重新初始化类。
###3.4 从直接借记中获取摘要
如果您想在保存之前或之后对直接借记有一些反馈,可以使用 getDirectDebitInfo()
方法。这将返回以下格式的数组
Batch mode:
Array
(
[MessageId] => "100120165539-15a2054e7b05"
[TotalTransactions] => 3
[TotalAmount] => "3000"
[FirstCollectionDate] => "2016-01-10"
[Batches] => Array
(
[0] => Array
(
[CollectionDate] => "2016-01-10"
[Type] => "FRST"
[BatchId] => "Test-d1837e0f72cb"
[BatchTransactions] => 2
[BatchAmount] => "2000"
)
[1] => Array
(
[CollectionDate] => "2016-01-10"
[Type] => "RCUR"
[BatchId] => "Test-145750c3b3a8"
[BatchTransactions] => 1
[BatchAmount] => "1000"
)
)
)
Non Batch mode:
Array
(
[MessageId] => "100120161833-fbba1f5fc10a"
[TotalTransactions] => 3
[TotalAmount] => "3000"
[FirstCollectionDate] => "2016-01-10"
)
####示例
try{ $SEPASDD->save(); }catch(Exception $e){ echo $e->getMessage(); }
之后,如果您想创建另一个文件,请重新初始化类。###3.4 添加自定义字段
SEPA SDD 拥有用于添加自定义字段的特殊方法。此方法称为 addCustomNode。重要的是要知道,您必须在调用此方法之前和之后保存直接借记。必需的参数包括
- parent_XPATH:父元素的XPATH选择器。
- name:节点/标签名称。
- value:其值,默认为 ""。
- attr:包含键 => 值对的数组,用于定义属性。
####示例
添加最后插入的债务人的邮寄地址。
注意,您应该知道在这里您在做什么。在使用之前,请参考 SEPA 直接借记核心规则手册和 XSD。
$payment = array("name" => "Test von Testenstein", "IBAN" => "NL50BANK1234567890", "BIC" => "BANKNL2A", "amount" => "1000", "type" => "FRST", "collection_date" => "2013-07-12", "mandate_id" => "1234", "mandate_date" => "2009-11-01", "description" => "Test Transaction" ); try{ $SEPASDD->addPayment($payment); $SEPASDD->save(); $SEPASDD->addCustomNode("//Document/CstmrDrctDbtInitn/PmtInf[last()]/DrctDbtTxInf[last()]/Dbtr","PstlAdr"); $SEPASDD->addCustomNode("//Document/CstmrDrctDbtInitn/PmtInf[last()]/DrctDbtTxInf[last()]/Dbtr/PstlAdr","AdrLine","Rode Weeshuisstraat 25"); $SEPASDD->addCustomNode("//Document/CstmrDrctDbtInitn/PmtInf[last()]/DrctDbtTxInf[last()]/Dbtr/PstlAdr","AdrLine","9712 ET Groningen"); $SEPASDD->save(); }catch(Exception $e){ echo $e->getMessage(); }
将创建
<PstlAdr> <AdrLine>Rode Weeshuisstraat 25</AdrLine> <AdrLine>9712 ET Groningen</AdrLine> </PstlAdr>
###3.5 验证
要针对 pain.008.001.02 或 pain.008.001.03 架构定义进行验证,可以使用 validate() 方法。这需要XML字符串作为参数。
#####注意:一些银行允许不指定BIC,SEPA SDD 也同样允许。
####示例
try{ $xml = $SEPASDD->save(); $validation = $SEPASDD->validate($xml); print_r($validation); }catch(Exception $e){ echo $e->getMessage(); }
##4 许可证
MIT 许可证
版权所有 (c) 2016 Congressus,荷兰
在此特此授予任何获得此软件及其相关文档文件(以下简称“软件”)副本的人免费使用权,无需限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许获得软件的人这样做,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何形式的保证,无论是明示的、暗示的,还是针对特定目的适用性和非侵权性的保证。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任负责,无论这些责任是由于合同、侵权或其他原因产生的,与软件或软件的使用或其他相关行为有关。