<?php
// the autoloader will find all needed files...
require_once 'autoloader.php';
use SKien\Sepa\Sepa;
use SKien\Sepa\SepaDoc;
use SKien\Sepa\SepaPmtInf;
use SKien\Sepa\SepaTxInf;
// some valid transactions
$aValidTransactions = array(
array(
'dblValue' => 104.45,
'strDescription' => 'Test Betreff 1',
'strName' => 'Mustermann, Max',
'strIBAN' => 'DE11682900000009215808',
'strBIC' => 'GENODE61LAH',
'strMandateId' => 'ID-0815',
'strDateOfSignature' => '2018-04-03'
),
array(
'dblValue' => 205.67,
'strDescription' => 'Test Betreff 2',
'strName' => 'Musterfrau, Karin',
'strIBAN' => 'DE71664500500070143559',
'strBIC' => 'SOLADES1OFG',
'strMandateId' => 'ID-0816',
'strDateOfSignature' => '2019-06-09'
)
);
// some invalid transactions to test validation
$aInvalidTransactions = array(
array(
'dblValue' => 104.45,
'strDescription' => 'Ein Eidgenosse...',
'strName' => '', // missing Name
'strIBAN' => 'CH18 0483 5029 8829 8100 0',
'strBIC' => 'CRESCHZZ80A',
'strMandateId' => 'ID-0815',
'strDateOfSignature' => '18-04-03' // Wrong Date
),
array(
// 'dblValue' => 104.45, // no value
'strDescription' => '', // missing descr
'strName' => 'Mustermann, Max',
'strIBAN' => 'FR14 2004 1010 0505 0001 3M02 606',
'strBIC' => 'GENODE61LAH',
// 'strMandateId' => 'ID-0815', // missing
// 'strDateOfSignature' => '18-04-03' // missing
),
array(
'dblValue' => 205.67,
'strDescription' => 'Test Betreff 2 - enthält Umlaute, Sonderzeichen {} _@ und ungültige Zeichen [&%]',
'strName' => 'Musterfrau, Karin',
'strIBAN' => 'DE71664600500070143559', // Wrong checksum
'strBIC' => 'SOLADES1OG', // missing sign
'strMandateId' => 'ID-0816',
'strDateOfSignature' => '2019-06-09'
)
);
$bValidTest = isset($_GET['valid']) && $_GET['valid'] == 1;
// initialize package
// - init() have to be called first before any use of the package!
// - full validation is by default activated
// - switch to german error messages
Sepa::init();
Sepa::setValidationLevel(Sepa::V_FULL_VALIDATION);
Sepa::loadErrorMsg('sepa_errormsg_de.json');
// test for dirct debit transdaction
$type = Sepa::CDD;
// create new SEPA document with header
$oSepaDoc = new SepaDoc($type);
$oSepaDoc->createGroupHeader('Test company 4711');
// create payment info instruction (PII) and set all needet creditor information
$oPPI = new SepaPmtInf($oSepaDoc);
$oPPI->setName('Testfirma');
$oPPI->setCI('CH51 ZZZ 12345678901');
$oPPI->setIBAN('DE71664500500070143559');
$oPPI->setBIC('GENODE61LAH');
$oPPI->setSeqType(Sepa::SEQ_RECURRENT);
// add the PII to the document.
// NOTE: dont' add any transaction to the PII bofore added to the doc!
if (($iErr = $oSepaDoc->addPaymentInstructionInfo($oPPI)) == Sepa::OK) {
// test for transactions through SepaTxInf::fromArray()
$aTransactions = $bValidTest ? $aValidTransactions : $aInvalidTransactions;
foreach ($aTransactions as $aTrans) {
$oTxInf = new SepaTxInf($type);
$oTxInf->fromArray($aTrans);
$iErr = $oPPI->addTransaction($oTxInf);
if ($iErr != Sepa::OK) {
echo '<h2>' . $oTxInf->getName() . ' (' . $oTxInf->getDescription() . ')</h2>';
echo $oTxInf->errorMsg($iErr, '<br />');
} else {
// ... may write back generated id to database
// $strPaymentId = $oTxInf->getPaymentId();
}
}
// test for direct call of SepaTxInf::setXXX Methods
$oTxInf = new SepaTxInf($type);
$oTxInf->setValue( 168.24 );
$oTxInf->setDescription('Test Betreff 3');
$oTxInf->setName('Doe, John');
$oTxInf->setIBAN('DE71664500500070143559');
$oTxInf->setBIC('SOLADES1OFG');
$oTxInf->setMandateId('ID-4711');
$oTxInf->setDateOfSignature(new DateTime('22.12.2017'));
$iErr = $oTxInf->validate();
if ($iErr == Sepa::OK) {
$oPPI->addTransaction($oTxInf);
} else {
echo $oTxInf->getName() . ' (' . $oTxInf->getDescription() . ')<br />';
echo $oTxInf->errorMsg($iErr, '<br />');
}
if ($oSepaDoc->getInvalidCount() == 0) {
// ... may cretae some loging etc.
/*
$strLog = date('Y-m-d H:i') . ': SEPA Direct Debit Transactions erzeugt (';
$strLog .= $oSepaDoc->getTxCount() . 'Transaktionen / ';
$strLog .= sprintf("%01.2f", $oSepaDoc->getCtrlSum()) . ' €)';
*/
$oSepaDoc->output('test.xml');
}
} else {
echo '<h2>' . $oPPI->getName() . '</h2>';
echo $oPPI->errorMsg($iErr, '<br />');
}
|