bluemove/sepadirectdebits

创建 SEPA XML 直接借记 XML 文件

dev-master 2016-08-24 08:12 UTC

This package is not auto-updated.

Last update: 2024-09-26 00:29:49 UTC


README

#SEPA SDD (Sepa Direct Debit) 2.0

Laravel 实现的 https://github.com/congressus/sepa-direct-debit

非常感谢!

##Laravel 设置 现在您需要在 Laravel 的 config 中注册 Service Provider。打开 app/config/app.php 并将您的 ServiceProvider 添加到数组的底部

  1. 在 providers 部分添加

'Bluemove\SepaDirectDebits\SepaDirectDebitsServiceProvider',

  1. 在 aliases 部分添加 facade

'Sepa' => 'Bluemove\SepaDirectDebits\Facades\Sepa',

  1. 发布配置

    php artisan config:publish bluemove/sepa-direct-debits

  2. 自定义发布的配置设置

##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

#####注意:当将 batch 设置为 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,荷兰

在此特此授予任何获得此软件及其相关文档副本(“软件”)的人免费处理软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许向软件提供方提供软件的人这样做,但必须遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、针对特定目的的适用性和非侵权性保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论该索赔、损害或其他责任是基于合同、侵权或其他方式,源于、因之产生或与此软件或软件的使用或其他交易有关。