function GenerateSepa($debit_id, $debit_type = null) { if ($debit_type != 'FRST' and $debit_type != 'RCUR') { error_log(__FUNCTION__ . '() invalid $debit_type ' . $debit_type); return FALSE; } // Check $debit_id if (defined($debit_id) and !is_numeric($debit_id)) { die('Invalid $debit_id'); } $sepa = GetSepaContent($debit_id, $debit_type); if ($sepa === FALSE) { error_log(__FUNCTION__ . "(): unable to fetch content from GetSepaContent() for direct debit {$debit_id} with type {$debit_type}. There is probably no transaction here"); return FALSE; } $company_rib = GetCompanyMaiRIB(); $nombre_virements = 0; $montant_total = 0; $montant_total_centimes = 0; $chaine_totale = ""; $nb_erreurs = 0; $erreurs_details = ""; require_once 'sepa_constants.php'; $config = array("name" => RAISON_SOCIALE, "IBAN" => preg_replace('/\\s+/', '', CODE_IBAN), "BIC" => preg_replace('/\\s+/', '', CODE_BIC), "batch" => "true", "creditor_id" => preg_replace('/\\s+/', '', CODE_ICS), "currency" => "EUR"); try { $SEPASDD = new SEPASDD($config); } catch (Exception $e) { echo $e->getMessage(); } foreach ($sepa as $line) { // On recherche les éléments pouvant bloquer la génération du paiement if (empty($config['IBAN']) or empty($config['BIC']) or empty($config['creditor_id'])) { $nb_erreurs++; $nb_erreurs_ligne++; $erreurs_details .= " - Aucun IBAN et/ou BIC et/ou ICS enregistré(s) pour la société <a href=\"/prospection/fiche_prospect.php?id={$line['id']}\">{$line['name']}</a>.<br />"; } if (strlen($line['iban']) > LONGUEUR_IBAN or empty($line['iban'])) { $nb_erreurs++; $nb_erreurs_ligne++; $erreurs_details .= " - Le code IBAN de \"" . $line['name'] . "\" permettant de générer un virement d'un montant de " . $line['montant'] . " EUR contient " . strlen($line['iban']) . " caractères au lieu de " . LONGUEUR_IBAN . " max. (valeur constatée : " . $line['iban'] . "). Cette ligne est abandonnée.<br />"; } if (strlen($line['bic']) > LONGUEUR_BIC or empty($line['bic'])) { $nb_erreurs++; $nb_erreurs_ligne++; $erreurs_details .= " - Le code BIC de \"" . $line['name'] . "\" permettant de générer un virement d'un montant de " . $line['montant'] . " EUR contient " . strlen($line['bic']) . " caractères au lieu de " . LONGUEUR_BIC . " max. (valeur constatée : " . $line['bic'] . "). Cette ligne est abandonnée.<br />"; } $montant_debit = $line['montant']; $payment = array("name" => $line['name'], "IBAN" => $line['iban'], "BIC" => $line['bic'], "amount" => "{$montant_debit}", "type" => $line['debit_type'], "collection_date" => date('Y-m-d'), "mandate_id" => $line['client_sepaid'], "mandate_date" => $line['mandat_date'], "description" => $line['ref']); try { $SEPASDD->addPayment($payment); } catch (Exception $e) { echo $e->getMessage(); } } if ($nb_erreurs > 0) { // Des erreurs bloquantes ont été detectées ?> <div class="mess_err"> <?php echo $nb_erreurs; ?> erreur(s) bloquante(s) détectée(s) pour la génération du fichier de remise :<br /> <?php echo $erreurs_details; ?> <br /> Remise d'ordre de virement abandonnée <!-- ' --> </div> <br /><br /> <?php return false; } try { $chaine_totale = $SEPASDD->save(); } catch (Exception $e) { echo $e->getMessage(); } $res = mysql_query("UPDATE direct_debit SET type = 'SEPA' WHERE id = {$debit_id}") or die(mysql_error()); $myFile = sys_get_temp_dir() . "/sepa-{$debit_id}-{$debit_type}.xml"; $fh = fopen($myFile, 'w') or die("can't open file"); fwrite($fh, $chaine_totale); fclose($fh); return $myFile; }
<?php require_once "SEPASDD.php"; $config = array("name" => "Test", "IBAN" => "NL50BANK1234567890", "BIC" => "BANKNL2A", "batch" => true, "creditor_id" => "00000", "currency" => "EUR"); $payment = array("name" => "Test von Testenstein", "IBAN" => "NL50BANK1234567890", "BIC" => "BANKNL2A", "amount" => "1000", "type" => "FRST", "collection_date" => date("Y-m-d"), "mandate_id" => "1234", "mandate_date" => date("2014-02-01"), "description" => "Test transaction"); try { $SEPASDD = new SEPASDD($config); $SEPASDD->addPayment($payment); print_r($SEPASDD->save()); } catch (Exception $e) { echo $e->getMessage(); exit; }