Gestione esportazione xml scadenzario
This commit is contained in:
parent
c7481b916b
commit
bcd57dfb2d
|
@ -46,7 +46,7 @@ switch (filter('op')) {
|
|||
return $item->id == $scadenza->id;
|
||||
});
|
||||
|
||||
// Generazione della descrizione del pagamento
|
||||
// Generazione della descrizione del pagamento
|
||||
if ($scadenze_documento->count() > 1) {
|
||||
$descrizione .= tr('_DOC_, pagamento _NUM_/_TOT_', [
|
||||
'_DOC_' => $descrizione,
|
||||
|
|
|
@ -0,0 +1,173 @@
|
|||
<?php
|
||||
|
||||
namespace Plugins\PresentazioniBancarie\Cbi;
|
||||
|
||||
use DOMDocument;
|
||||
use DOMXPath;
|
||||
|
||||
class CbiSepa
|
||||
{
|
||||
/**
|
||||
* @var Intestazione
|
||||
*/
|
||||
protected $intestazione;
|
||||
|
||||
/**
|
||||
* @var Ricevuta[]
|
||||
*/
|
||||
protected $ricevute = [];
|
||||
|
||||
public function __construct(Intestazione $intestazione)
|
||||
{
|
||||
$this->intestazione = $intestazione;
|
||||
}
|
||||
|
||||
public function addRicevuta(Ricevuta $ricevuta)
|
||||
{
|
||||
$this->ricevute[] = $ricevuta;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Intestazione
|
||||
*/
|
||||
public function getIntestazione()
|
||||
{
|
||||
return $this->intestazione;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Bonifico
|
||||
*/
|
||||
public function setIntestazione(Intestazione $intestazione)
|
||||
{
|
||||
$this->intestazione = $intestazione;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Ricevuta[]
|
||||
*/
|
||||
public function getRicevute()
|
||||
{
|
||||
return $this->ricevute;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Ricevuta[] $ricevute
|
||||
*
|
||||
* @return Bonifico
|
||||
*/
|
||||
public function setRicevute($ricevute)
|
||||
{
|
||||
$this->ricevute = $ricevute;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function asXML()
|
||||
{
|
||||
global $rootdir;
|
||||
$intestazione = $this->intestazione;
|
||||
$ricevute = $this->ricevute;
|
||||
$contenuto = '';
|
||||
|
||||
// Verifica sulla presenza di ricevute
|
||||
if (empty($ricevute)) {
|
||||
throw new \Exception();
|
||||
}
|
||||
|
||||
$credtm = date('Y-m-d\TH:i:s');
|
||||
$msgid = dechex(rand(100,999).date('siHdmY')).'-';
|
||||
|
||||
$content = file_get_contents(base_dir().'/plugins/presentazioni_bancarie/template/template_CBIPaymentRequest.xml');
|
||||
|
||||
$CtrlSum = 0.00;
|
||||
$NbOfTxs = 1;
|
||||
$domDoc = new DOMDocument;
|
||||
$domDoc->preserveWhiteSpace = false;
|
||||
$domDoc->formatOutput = true;
|
||||
$domDoc->loadXML($content);
|
||||
$xpath = new DOMXPath($domDoc);
|
||||
$rootNamespace = $domDoc->lookupNamespaceUri($domDoc->namespaceURI);
|
||||
$xpath->registerNamespace('x', $rootNamespace);
|
||||
$results = $xpath->query("//x:GrpHdr/x:MsgId")->item(0);
|
||||
$attrVal = $domDoc->createTextNode($msgid);
|
||||
$results->appendChild($attrVal);
|
||||
$results = $xpath->query("//x:GrpHdr/x:CreDtTm")->item(0);
|
||||
$attrVal = $domDoc->createTextNode($credtm);
|
||||
$results->appendChild($attrVal);
|
||||
$results = $xpath->query("//x:GrpHdr/x:InitgPty/x:Nm")->item(0);
|
||||
$attrVal = $domDoc->createTextNode($intestazione->descrizione_banca);
|
||||
$results->appendChild($attrVal);
|
||||
$results = $xpath->query("//x:GrpHdr/x:InitgPty/x:Id/x:OrgId/x:Othr/x:Id")->item(0);
|
||||
$attrVal = $domDoc->createTextNode('SIA'.$intestazione->codice_sia);
|
||||
$results->appendChild($attrVal);
|
||||
$results = $xpath->query("//x:PmtInf/x:PmtInfId")->item(0);
|
||||
$attrVal = $domDoc->createTextNode($msgid);
|
||||
$results->appendChild($attrVal);
|
||||
$results = $xpath->query("//x:PmtInf/x:ReqdExctnDt")->item(0);
|
||||
$attrVal = $domDoc->createTextNode(substr($credtm,0,10));
|
||||
$results->appendChild($attrVal);
|
||||
$results = $xpath->query("//x:PmtInf/x:Dbtr/x:Nm")->item(0);
|
||||
$attrVal = $domDoc->createTextNode($intestazione->descrizione_banca);
|
||||
$results->appendChild($attrVal);
|
||||
$results = $xpath->query("//x:PmtInf/x:Dbtr/x:Id/x:OrgId/x:Othr/x:Id")->item(0);
|
||||
$attrVal = $domDoc->createTextNode($intestazione->identificativo_creditore);
|
||||
$results->appendChild($attrVal);
|
||||
$results = $xpath->query("//x:PmtInf/x:DbtrAcct/x:Id/x:IBAN")->item(0);
|
||||
$attrVal = $domDoc->createTextNode($intestazione->iban);
|
||||
$results->appendChild($attrVal);
|
||||
$results = $xpath->query("//x:PmtInf/x:DbtrAgt/x:FinInstnId/x:ClrSysMmbId/x:MmbId")->item(0);
|
||||
$attrVal = $domDoc->createTextNode($intestazione->abi);
|
||||
$results->appendChild($attrVal);
|
||||
// creo gli elementi dei singoli bonifici
|
||||
foreach ($ricevute as $ricevuta) {
|
||||
$PmtInf = $xpath->query("//x:PmtInf")->item(0);
|
||||
$el = $domDoc->createElement("CdtTrfTxInf", "");
|
||||
$el1 = $domDoc->createElement("PmtId", "");
|
||||
$el2 = $domDoc->createElement("InstrId", $NbOfTxs);
|
||||
$el1->appendChild($el2);
|
||||
$el2 = $domDoc->createElement("EndToEndId", $msgid.$NbOfTxs);
|
||||
$el1->appendChild($el2);
|
||||
$el->appendChild($el1);
|
||||
$el1 = $domDoc->createElement("PmtTpInf", "");
|
||||
$el2 = $domDoc->createElement("CtgyPurp", "");
|
||||
$el3 = $domDoc->createElement("Cd", $ricevuta->ctgypurp);
|
||||
$el2->appendChild($el3);
|
||||
$el1->appendChild($el2);
|
||||
$el->appendChild($el1);
|
||||
$el1 = $domDoc->createElement("Amt", "");
|
||||
$el2 = $domDoc->createElement("InstdAmt", number_format(round($ricevuta->importo,2),2,'.',''));
|
||||
$newel2 = $el1->appendChild($el2);
|
||||
$newel2->setAttribute("Ccy", "EUR");
|
||||
$el->appendChild($el1);
|
||||
$el1 = $domDoc->createElement("Cdtr", "");
|
||||
$el2 = $domDoc->createElement("Nm", $ricevuta->nome_debitore);
|
||||
$el1->appendChild($el2);
|
||||
$el->appendChild($el1);
|
||||
$el1 = $domDoc->createElement("CdtrAcct", "");
|
||||
$el2 = $domDoc->createElement("Id", "");
|
||||
$el3 = $domDoc->createElement("IBAN", $ricevuta->iban);
|
||||
$el2->appendChild($el3);
|
||||
$el1->appendChild($el2);
|
||||
$el->appendChild($el1);
|
||||
$el1 = $domDoc->createElement("RmtInf", "");
|
||||
$el2 = $domDoc->createElement("Ustrd", $ricevuta->descrizione);
|
||||
$el1->appendChild($el2);
|
||||
$el->appendChild($el1);
|
||||
$PmtInf->appendChild($el);
|
||||
$NbOfTxs++;
|
||||
$CtrlSum += $ricevuta->importo;
|
||||
}
|
||||
$results = $xpath->query("//x:GrpHdr/x:NbOfTxs")->item(0);
|
||||
$attrVal = $domDoc->createTextNode($NbOfTxs-1);
|
||||
$results->appendChild($attrVal);
|
||||
$results = $xpath->query("//x:GrpHdr/x:CtrlSum")->item(0);
|
||||
$attrVal = $domDoc->createTextNode(number_format(round($CtrlSum,2),2,'.',''));
|
||||
$results->appendChild($attrVal);
|
||||
$contenuto = $domDoc->saveXML();
|
||||
|
||||
return $contenuto;
|
||||
}
|
||||
}
|
|
@ -6,8 +6,8 @@ namespace Plugins\PresentazioniBancarie\Cbi;
|
|||
* Classe per gestire l'intestazione del RiBa.
|
||||
*
|
||||
* @property int $abi
|
||||
* @property int $soggetto_veicolatore
|
||||
* @property int $cab
|
||||
* @property string $iban
|
||||
* @property string $conto
|
||||
* @property string $data_creazione
|
||||
* @property string $nome_supporto
|
||||
|
@ -18,7 +18,9 @@ namespace Plugins\PresentazioniBancarie\Cbi;
|
|||
* @property string $partita_iva_o_codice_fiscale_creditore
|
||||
* @property string $identificativo_creditore
|
||||
* @property string $codice_sia
|
||||
* @property int $soggetto_veicolatore
|
||||
* @property bool $eol
|
||||
* @property string $descrizione_banca
|
||||
*/
|
||||
class Intestazione extends Elemento
|
||||
{
|
||||
|
@ -28,13 +30,6 @@ class Intestazione extends Elemento
|
|||
* @var int Valore numerico di 5 cifre
|
||||
*/
|
||||
protected $abi;
|
||||
|
||||
/**
|
||||
* Codice ABI del soggetto veicolatore.
|
||||
*
|
||||
* @var int Valore numerico di 5 cifre
|
||||
*/
|
||||
protected $soggetto_veicolatore;
|
||||
/**
|
||||
* Codice CAB della banca del creditore.
|
||||
*
|
||||
|
@ -43,6 +38,10 @@ class Intestazione extends Elemento
|
|||
* @property
|
||||
*/
|
||||
protected $cab;
|
||||
/**
|
||||
* @var string Valore alfanumerico di 24 cifre
|
||||
*/
|
||||
protected $iban;
|
||||
/**
|
||||
* @var string Valore alfanumerico di 12 cifre
|
||||
*/
|
||||
|
@ -83,16 +82,27 @@ class Intestazione extends Elemento
|
|||
* @var string Valore alfanumerico di 5 cifre
|
||||
*/
|
||||
protected $codice_sia;
|
||||
/**
|
||||
* Codice ABI del soggetto veicolatore.
|
||||
*
|
||||
* @var int Valore numerico di 5 cifre
|
||||
*/
|
||||
protected $soggetto_veicolatore;
|
||||
/**
|
||||
* @var bool true per aggiungere i caratteri di fine rigo
|
||||
*/
|
||||
protected $eol = true;
|
||||
/**
|
||||
* @var string Valore alfanumerico di 24 cifre
|
||||
*/
|
||||
protected $descrizione_banca;
|
||||
|
||||
public function toRibaAbiCbiFormat()
|
||||
{
|
||||
return [
|
||||
$this->abi,
|
||||
$this->cab,
|
||||
$this->iban,
|
||||
$this->conto,
|
||||
$this->data_creazione,
|
||||
$this->nome_supporto,
|
||||
|
@ -105,6 +115,7 @@ class Intestazione extends Elemento
|
|||
$this->codice_sia,
|
||||
$this->soggetto_veicolatore,
|
||||
$this->eol,
|
||||
$this->descrizione_banca,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -171,7 +171,7 @@ class RiBa
|
|||
$contenuto .= $r70->toCBI().$eol;
|
||||
}
|
||||
|
||||
// Record 70
|
||||
// Record EF
|
||||
$ef = new RecordEF();
|
||||
$ef->codice_sia_mittente = $intestazione->codice_sia;
|
||||
$ef->abi_assuntrice = $intestazione->abi;
|
||||
|
|
|
@ -7,6 +7,7 @@ use DateTime;
|
|||
use Plugins\PresentazioniBancarie\Cbi\Intestazione;
|
||||
use Plugins\PresentazioniBancarie\Cbi\RiBa;
|
||||
use Plugins\PresentazioniBancarie\Cbi\Ricevuta;
|
||||
use Plugins\PresentazioniBancarie\Cbi\CbiSepa;
|
||||
use Digitick\Sepa\PaymentInformation;
|
||||
use Digitick\Sepa\TransferFile\Factory\TransferFileFacadeFactory;
|
||||
use Exception;
|
||||
|
@ -31,12 +32,14 @@ class Gestore
|
|||
protected static $banca_predefinita_azienda;
|
||||
|
||||
protected $id_riba;
|
||||
protected $id_bonifico;
|
||||
protected $id_debito_diretto;
|
||||
protected $id_credito_diretto;
|
||||
|
||||
protected $riba;
|
||||
protected $debito_diretto;
|
||||
protected $credito_diretto;
|
||||
protected $bonifico;
|
||||
|
||||
protected $numero_transazioni_debito_diretto = 0;
|
||||
|
||||
|
@ -59,6 +62,9 @@ class Gestore
|
|||
$this->id_riba = random_string();
|
||||
$this->initRiBa();
|
||||
|
||||
$this->id_bonifico = random_string();
|
||||
$this->initBonifico();
|
||||
|
||||
$this->id_credito_diretto = random_string();
|
||||
$this->initCreditoDiretto();
|
||||
|
||||
|
@ -95,6 +101,38 @@ class Gestore
|
|||
$this->riba = new RiBa($intestazione);
|
||||
}
|
||||
|
||||
/**
|
||||
* Inizializzazione del formato per il sistema Bonifico.
|
||||
*/
|
||||
public function initBonifico()
|
||||
{
|
||||
$iban = $this->banca_azienda->iban;
|
||||
$conto = substr($iban, 15, 12);
|
||||
$abi_assuntrice = substr($iban, 5, 5);
|
||||
$cab_assuntrice = substr($iban, 10, 5);
|
||||
$descrizione_banca = $this->banca_azienda->nome.' '.$this->banca_azienda->filiale;
|
||||
|
||||
$data = new Carbon();
|
||||
$supporto = $data->format('dmYHis');
|
||||
|
||||
// Generazione intestazione
|
||||
$intestazione = new Intestazione();
|
||||
$intestazione->codice_sia = $this->banca_azienda['codice_sia'];
|
||||
$intestazione->conto = $conto;
|
||||
$intestazione->abi = $abi_assuntrice;
|
||||
$intestazione->cab = $cab_assuntrice;
|
||||
$intestazione->iban = $iban;
|
||||
$intestazione->data_creazione = $data->format('dmy');
|
||||
$intestazione->nome_supporto = $supporto;
|
||||
$intestazione->citta_creditore = strtoupper($this->azienda['cap'].' '.$this->azienda['citta'].' '.$this->azienda['provincia']);
|
||||
$intestazione->ragione_sociale_creditore = strtoupper($this->azienda->ragione_sociale);
|
||||
$intestazione->indirizzo_creditore = strtoupper($this->azienda['indirizzo']);
|
||||
$intestazione->partita_iva_o_codice_fiscale_creditore = !empty($this->azienda->partita_iva) ? $this->azienda->partita_iva : $this->azienda->codice_fiscale;
|
||||
$intestazione->descrizione_banca = $descrizione_banca;
|
||||
|
||||
$this->bonifico = new CbiSepa($intestazione);
|
||||
}
|
||||
|
||||
/**
|
||||
* Inizializzazione del formato per il credito diretto.
|
||||
*
|
||||
|
@ -140,9 +178,10 @@ class Gestore
|
|||
$importo = $scadenza->da_pagare - $scadenza->pagato;
|
||||
$totale = (abs($scadenza->da_pagare) - abs($scadenza->pagato));
|
||||
|
||||
$is_credito_diretto = ($direzione == 'uscita' && in_array($pagamento->codice_modalita_pagamento_fe, ['MP05','MP09', 'MP10', 'MP11', 'MP19', 'MP20', 'MP21'])) || (empty($documento) && $importo < 0);
|
||||
$is_credito_diretto = ($direzione == 'uscita' && in_array($pagamento->codice_modalita_pagamento_fe, ['MP09', 'MP10', 'MP11', 'MP19', 'MP20', 'MP21'])) || (empty($documento) && $importo < 0 && $ctgypurp != "SALA");
|
||||
$is_debito_diretto = $direzione == 'entrata' && in_array($pagamento->codice_modalita_pagamento_fe, ['MP09', 'MP10', 'MP11', 'MP19', 'MP20', 'MP21']) && !empty($this->banca_azienda->creditor_id); // Mandato SEPA disponibile
|
||||
$is_riba = $direzione == 'entrata' && in_array($pagamento->codice_modalita_pagamento_fe, ['MP12']) && !empty($this->banca_azienda->codice_sia);
|
||||
$is_bonifico = $direzione == 'uscita' && in_array($pagamento->codice_modalita_pagamento_fe, ['MP05']) && !empty($this->banca_azienda->codice_sia) || (empty($documento) && $importo < 0 && $ctgypurp == "SALA");
|
||||
|
||||
if(in_array($pagamento->codice_modalita_pagamento_fe, ['MP19', 'MP21'])){
|
||||
$method = 'B2B';
|
||||
|
@ -157,6 +196,8 @@ class Gestore
|
|||
} elseif ($is_riba) {
|
||||
$totale = $totale*100;
|
||||
return $this->aggiungiRiBa($identifier, $controparte, $banca_controparte, $descrizione, $totale, $scadenza->scadenza);
|
||||
} elseif ($is_bonifico) {
|
||||
return $this->aggiungiBonifico($identifier, $controparte, $banca_controparte, $descrizione, $totale, $scadenza->scadenza, $ctgypurp);
|
||||
}
|
||||
|
||||
return false;
|
||||
|
@ -215,6 +256,61 @@ class Gestore
|
|||
return true;
|
||||
}
|
||||
|
||||
public function aggiungiBonifico(int $identifier, Anagrafica $controparte, Banca $banca_controparte, string $descrizione, int $totale, DateTime $data_prevista, $ctgypurp)
|
||||
{
|
||||
$data_scadenza = $data_prevista->format('dmy');
|
||||
|
||||
// Dati banca cliente
|
||||
$abi_cliente = substr($banca_controparte['iban'], 5, 5);
|
||||
$cab_cliente = substr($banca_controparte['iban'], 10, 5);
|
||||
|
||||
$descrizione_banca = $banca_controparte['nome'].' '.$banca_controparte['filiale'];
|
||||
|
||||
// Aggiunta codice CIG CUP se presenti
|
||||
if (!empty($controparte['cig'])) {
|
||||
$descrizione .= ' CIG:'.$controparte['cig'];
|
||||
}
|
||||
|
||||
if (!empty($controparte['cup'])) {
|
||||
$descrizione .= ' CUP:'.$controparte['cup'];
|
||||
}
|
||||
|
||||
// Salvataggio della singola ricevuta nel RiBa
|
||||
$ricevuta = new Ricevuta();
|
||||
$ricevuta->numero_ricevuta = $identifier;
|
||||
$ricevuta->scadenza = $data_scadenza;
|
||||
$ricevuta->importo = $totale;
|
||||
$ricevuta->abi_banca = $abi_cliente;
|
||||
$ricevuta->cab_banca = $cab_cliente;
|
||||
$ricevuta->iban = $banca_controparte['iban'];
|
||||
$ricevuta->codice_cliente = $controparte['codice'];
|
||||
$ricevuta->ctgypurp = $ctgypurp;
|
||||
|
||||
//controlli sulla ragione sociale
|
||||
$ragione_sociale = utf8_decode($controparte['ragione_sociale']);
|
||||
|
||||
// Sostituzione di alcuni simboli noti
|
||||
$replaces = [
|
||||
''' => "'",
|
||||
'"' => "'",
|
||||
'&' => '&',
|
||||
];
|
||||
$ragione_sociale = str_replace(array_keys($replaces), array_values($replaces), $ragione_sociale);
|
||||
|
||||
$ricevuta->nome_debitore = strtoupper($ragione_sociale);
|
||||
$ricevuta->identificativo_debitore = !empty($controparte->partita_iva) ? $controparte->partita_iva : $controparte->codice_fiscale;
|
||||
$ricevuta->indirizzo_debitore = strtoupper($controparte['indirizzo']);
|
||||
$ricevuta->cap_debitore = $controparte['cap'];
|
||||
$ricevuta->comune_debitore = strtoupper($controparte['citta']);
|
||||
$ricevuta->provincia_debitore = $controparte['provincia'];
|
||||
$ricevuta->descrizione_banca = $descrizione_banca;
|
||||
$ricevuta->descrizione = strtoupper($descrizione);
|
||||
|
||||
$this->bonifico->addRicevuta($ricevuta);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function aggiungiCreditoDiretto(int $identifier, Anagrafica $controparte, Banca $banca_controparte, string $descrizione, $totale, DateTime $data_prevista, $ctgypurp)
|
||||
{
|
||||
$id = 'pagamento_'.$identifier;
|
||||
|
@ -374,6 +470,20 @@ class Gestore
|
|||
} catch (Exception $e) {
|
||||
}
|
||||
|
||||
// File per il pagamento delle vendite Bonifico
|
||||
try {
|
||||
$content = $this->bonifico->asXML();
|
||||
|
||||
// Generazione filename
|
||||
$filename = $this->id_bonifico.'.xml';
|
||||
$file = $path.'/'.$filename;
|
||||
$files[] = base_url().'/'.$file;
|
||||
|
||||
// Salvataggio del file
|
||||
file_put_contents(base_dir().'/'.$file, $content);
|
||||
} catch (Exception $e) {
|
||||
}
|
||||
|
||||
// File per il pagamento degli acquisti SEPA
|
||||
try {
|
||||
$xml = $this->credito_diretto->asXML();
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<CBIPaymentRequest xsi:schemaLocation="urn:CBI:xsd:CBIPaymentRequest.00.04.00 CBIPaymentRequest.00.04.00.xsd" xmlns="urn:CBI:xsd:CBIPaymentRequest.00.04.00" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<GrpHdr>
|
||||
<MsgId/>
|
||||
<CreDtTm/>
|
||||
<NbOfTxs/>
|
||||
<CtrlSum/>
|
||||
<InitgPty>
|
||||
<Nm/>
|
||||
<Id>
|
||||
<OrgId>
|
||||
<Othr>
|
||||
<Id/>
|
||||
<Issr>CBI</Issr>
|
||||
</Othr>
|
||||
</OrgId>
|
||||
</Id>
|
||||
</InitgPty>
|
||||
</GrpHdr>
|
||||
<PmtInf>
|
||||
<PmtInfId/>
|
||||
<PmtMtd>TRA</PmtMtd>
|
||||
<BtchBookg>false</BtchBookg>
|
||||
<PmtTpInf>
|
||||
<InstrPrty>NORM</InstrPrty>
|
||||
<SvcLvl>
|
||||
<Cd>SEPA</Cd>
|
||||
</SvcLvl>
|
||||
</PmtTpInf>
|
||||
<ReqdExctnDt/>
|
||||
<Dbtr>
|
||||
<Nm></Nm>
|
||||
<Id>
|
||||
<OrgId>
|
||||
<Othr>
|
||||
<Id/>
|
||||
</Othr>
|
||||
</OrgId>
|
||||
</Id>
|
||||
</Dbtr>
|
||||
<DbtrAcct>
|
||||
<Id>
|
||||
<IBAN/>
|
||||
</Id>
|
||||
</DbtrAcct>
|
||||
<DbtrAgt>
|
||||
<FinInstnId>
|
||||
<ClrSysMmbId>
|
||||
<MmbId/>
|
||||
</ClrSysMmbId>
|
||||
</FinInstnId>
|
||||
</DbtrAgt>
|
||||
<ChrgBr>SLEV</ChrgBr>
|
||||
</PmtInf>
|
||||
</CBIPaymentRequest>
|
Loading…
Reference in New Issue