Probleme mit Terminüberweisungen
Hallo zusammen,
ich habe leider ein Problem, wenn ich mehrere Überweisungen terminiert schicken möchte. Bei mehreren Überweisungen meckert er, dass er den PARSER nicht verarbeiten kann. Bei einer einzelnen darf das Ausführungsdatum nicht belegt sein.
Hat hier jemand Erfahrung damit, mehrere Überweisungen terminiert an die Bank (ohne EBICS) zu senden?
Mein Code:
$transfer = new SEPATransfer([
'paymentInitiation' => 'pain.001.001.03',
'messageID' => 'dce-' . $directCreditExport->id,
'paymentID' => 'dce-' . $directCreditExport->id,
]);
$transfer->setDebitor(new SEPADebitor([
'name' => config('setting.site.company'),
'iban' => $this->bank->getIBAN(),
'bic' => $this->bank->bic,
]));
foreach ($directCreditExport->direct_credits()->get() as $directCredit) {
if (!$directCredit->due_date) $directCredit->due_date = new \DateTime();
if (!$directCredit->bank_partner) continue;
$name = $directCredit->bank_partner->name;
if (empty($name) && $directCredit->incoming && $directCredit->incoming->supplier) $name = $directCredit->incoming->supplier->getName();
if (empty($name)) $name = 'Zahlungsempf.';
$transfer->addCreditor(new SEPACreditor([
'info' => substr($directCredit->subject, 0, 140),
'name' => $name,
'iban' => $directCredit->bank_partner->getIBAN(),
'bic' => $directCredit->bank_partner->bic,
'amount' => $directCredit->amount,
'currency' => 'EUR',
'reqestedExecutionDate' => $directCredit->due_date,
]));
$directCredit->save();
}
$sendSEPATransfer = \Fhp\Action\SendSEPATransfer::create($this->account, $transfer->toXML());
if ($sendSEPATransfer->needsTan()) {
return $this->handleStrongAuthentication($sendSEPATransfer);
}
$this->fints->execute($sendSEPATransfer);
try {
} catch (\Throwable $exception) {
return $this->handleException($exception->getMessage());
}
if ($sendSEPATransfer->needsTan()) {
return $this->handleStrongAuthentication($sendSEPATransfer);
}
Soweit ich weiß sind das alles verschiedene Geschäftsvorfälle
- SEPA-Sammelüberweisungen (Segment HKCCM)
- Terminierte SEPA-Überweisung (Segment HKCSE)
- Terminierte SEPA-Sammelüberweisung (Segment HKCME)
phpFinTs unterstützt bislang lediglich SEPA Einzelüberweisung (Segment HKCCS).
Danke! Das würde natürlich einiges erklären.
Also muss ich irgendwie HKCME implementieren? Da versuche ich mich mal dran sonst.
Also muss ich irgendwie HKCME implementieren?
Ja. Das sollte hauptsächlich aus Copy & Paste bestehen. DEVELOPER-GUIDE.md ist eine gute erste Lektüre dafür.
SEPATransfer könnte/sollte auch je nach XML-Inhalt das jeweils richtige Segment auswählen.
SEPATransfer könnte/sollte auch je nach XML-Inhalt das jeweils richtige Segment auswählen.
Muss ich ggf. nur in meiner XML-Generierung oben etwas ändern? Ich nutze ja pain.001.001.03
Mein Request, versucht mit 001.001.03 sowie 001.001.09
hp\Protocol\ServerException {#3848 ▼ // packages/ds.bank/src/Connectors/HBCI.php:600
#message: """
FinTS errors:
9050 (global): Die Nachricht enthält Fehler.
9010 (wrt seg 3): Fehler beim Aufruf Parser.
FinTS warnings:
3905 (global): Es wurde keine Challenge erzeugt.
Request segments:
HKCCS:3:1+DE43403510600074856311:WELADED1STF:74856311::280:40351060+urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.001.09+@2927@<?xml version="1.0" encoding="UT
▶
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.09" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022
▶
<CstmrCdtTrfInitn>
<GrpHdr>
<MsgId>dce-2</MsgId>
<CreDtTm>2024-07-16T17:20:10Z</CreDtTm>
<NbOfTxs>2</NbOfTxs>
<CtrlSum>6.00</CtrlSum>
<InitgPty>
<Nm>test GmbH - Testinstanz</Nm>
</InitgPty>
</GrpHdr>
<PmtInf>
<PmtInfId>dce-2-3</PmtInfId>
<PmtMtd>TRF</PmtMtd>
<NbOfTxs>1</NbOfTxs>
<CtrlSum>5.00</CtrlSum>
<PmtTpInf>
<SvcLvl>
<Cd>SEPA</Cd>
</SvcLvl>
</PmtTpInf>
<ReqdExctnDt>2024-07-17</ReqdExctnDt>
<Dbtr>
<Nm>test GmbH - Testinstanz</Nm>
</Dbtr>
<DbtrAcct>
<Id>
<IBAN>XXXX</IBAN>
</Id>
<Ccy>EUR</Ccy>
</DbtrAcct>
<DbtrAgt>
<FinInstnId>
<BIC>XXXX</BIC>
</FinInstnId>
</DbtrAgt>
<ChrgBr>SLEV</ChrgBr>
<CdtTrfTxInf>
<PmtId>
<EndToEndId>dce-2-30</EndToEndId>
</PmtId>
<Amt>
<InstdAmt Ccy="EUR">5.00</InstdAmt>
</Amt>
<CdtrAgt>
<FinInstnId>
<BIC>XXXX</BIC>
</FinInstnId>
</CdtrAgt>
<Cdtr>
<Nm>XXX XXXXX</Nm>
</Cdtr>
<CdtrAcct>
<Id>
<IBAN>XXX</IBAN>
</Id>
</CdtrAcct>
<RmtInf>
<Ustrd>Test per KSK</Ustrd>
</RmtInf>
</CdtTrfTxInf>
</PmtInf>
<PmtInf>
<PmtInfId>dce-2-5</PmtInfId>
<PmtMtd>TRF</PmtMtd>
<NbOfTxs>1</NbOfTxs>
<CtrlSum>1.00</CtrlSum>
<PmtTpInf>
<SvcLvl>
<Cd>SEPA</Cd>
</SvcLvl>
</PmtTpInf>
<ReqdExctnDt>2024-07-15</ReqdExctnDt>
<Dbtr>
<Nm>test GmbH - Testinstanz</Nm>
</Dbtr>
<DbtrAcct>
<Id>
<IBAN>XXX</IBAN>
</Id>
<Ccy>EUR</Ccy>
</DbtrAcct>
<DbtrAgt>
<FinInstnId>
<BIC>XXX</BIC>
</FinInstnId>
</DbtrAgt>
<ChrgBr>SLEV</ChrgBr>
<CdtTrfTxInf>
<PmtId>
<EndToEndId>dce-2-50</EndToEndId>
</PmtId>
<Amt>
<InstdAmt Ccy="EUR">1.00</InstdAmt>
</Amt>
<CdtrAgt>
<FinInstnId>
<BIC>XXX</BIC>
</FinInstnId>
</CdtrAgt>
<Cdtr>
<Nm>XXX XXX</Nm>
</Cdtr>
<CdtrAcct>
<Id>
<IBAN>XXX</IBAN>
</Id>
</CdtrAcct>
<RmtInf>
<Ustrd>Test 2 KSK</Ustrd>
</RmtInf>
</CdtTrfTxInf>
</PmtInf>
</CstmrCdtTrfInitn>
</Document>
'
"""
#code: 0
#file: "vendor
/nemiah/php-fints/
lib/Fhp/Protocol/ServerException.php"
#line: 170
-errors: array:2 [▶]
-warnings: array:1 [▶]
-requestSegments: array:1 [▶]
-request:
Muss ich ggf. nur in meiner XML-Generierung oben etwas ändern?
Nein, das XML ist ja nur der Payload für einen bestimmten Geschäftsvorfall. Aber man kann in das XML gucken ob ein Termin angegeben ist oder mehrere Überweisungen enthalten sind. Abhängig davon würde dann der richtige Geschäftsvorfall an die Bank geschickt. Alternativ bräuchte man ja sonst für jeden Geschäftsvorfall eine eigene SendSEPATransfer-Action.
Ok, so ganz habe ich es noch nicht verstanden und es funktioniert noch nicht... Da muss ich noch mal viel testen.
Habe das ganze mal gepusht. Bin weiter vorgedrungen :-) https://github.com/nemiah/phpFinTS/pull/447
Nun jemand eine Idee?
FinTS errors:
9050 (global): Die Nachricht enthält Fehler.
9110 (wrt seg 3): Ungültige Auftragsnachricht: Unbekannter Aufbau. (wrt DE 3,2)
9160 (wrt seg 3): Pflichtfeld nicht gefunden (wrt DE 3,2)
9010 (wrt seg 4): Segment wegen anderer Fehler wirkungslos
Request segments:
HKCME:3:1+DE43403510600074856311:WELADED1STF:74856311::280:40351060+urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.001.09+@2927@<?xml version="1.0" encoding="UT
▶
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.09" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022
Habe im Pull Request geantwortet.
Ok, ich muss es doch wieder öffnen... Bei der Bank kommt die Anfrage zwar richtig an, doch erhalte ich nach Freigabe:
9050 (global): Die Nachricht enthält Fehler.
9010 (wrt seg 3): Der Auftrag wurde nicht ausgeführt.
9010 (wrt seg 3): Systemfehler - bitte wenden Sie sich an Ihren Kundenberater. (MDC17700200002)
Request segments:
HKTAN:3:7+S++++6153-08-07-19.12.56.700284+N'
HKTAN:3:7+S++++6153-08-07-19.12.56.700284+N' at bank/src/Connectors/HBCI.php:315)
Update: https://github.com/nemiah/phpSepaXml/issues/6#issuecomment-2274977111 Durch die Änderung (Rückwerts) wird das Payment Date nicht gesetzt und er springt, statt in Termin. Sammepl in Sammel. Und hier war mir ein Fehler beim Segment aufgefallen: Statt "HICCMS" stand dort "HICSES"
Fix hier: https://github.com/nemiah/phpFinTS/pull/450
Dennoch erhalte ich den gleichen Fehler.
Was sagt denn der Kundenberater? Ohne konkrete Fehlermeldung schwierig was zu sagen. Systemfehler klingt ja nach Fehler bei der Bank und nicht beim Client.
Was sagt denn der Kundenberater? Ohne konkrete Fehlermeldung schwierig was zu sagen. Systemfehler klingt ja nach Fehler bei der Bank und nicht beim Client.
Manchmal sieht man den Baum vor lauter Bäumen nicht... Abgelehnt, da 2 x die gleiche Überweisung in der Datei..
Dennoch gehen die Terminüberweisungen (noch) nicht, da die XML nicht geht: https://github.com/nemiah/phpSepaXml/issues/6#issuecomment-2274977111
Ok, ich sehe wieder mal das Problem nicht..
9210 (wrt seg 3): Summe der Beträge der Einzelzahlung und Kontrollsumme stimmen nicht überein. [694.73]
Ich dachte erst, dass es daran liegt, dass ich das $summenfeld nicht gesetzt habe. Aber damit geht es auch nicht... https://github.com/seem2810/phpFinTS/blob/master/lib/Fhp/Action/SendSEPATransfer.php#L67
Jemand noch eine Idee?
Würde auch denken, dass es am $summenfeld liegt. Kann mir an der Stelle auch Rundungsfehler vorstellen. Die Summe sollte doch eigentlich via $xmlAsObject->CstmrCdtTrfInitn->GrpHdr->CtrlSum schon vorhanden sein.
Würde auch denken, dass es am
$summenfeldliegt. Kann mir an der Stelle auch Rundungsfehler vorstellen. Die Summe sollte doch eigentlich via$xmlAsObject->CstmrCdtTrfInitn->GrpHdr->CtrlSumschon vorhanden sein.
Das hatte ich auch schon ausprobiert. Ohne Erfolg...
Edit: Rundungsfehler habe ich auch schon ausschließen können
Niemand eine Idee?
So, meine Sammelüberweisungen klappen nun.