nemiah / phpFinTS

PHP library to communicate with FinTS/HBCI servers
MIT License
130 stars 42 forks source link

directDebit "Wert im Summenfeld erwartet." #240

Closed ElishaDev closed 4 years ago

ElishaDev commented 4 years ago

Hey :)

Zusammen mit der FinTSNew-Class und und dem directDebit Example (https://github.com/nemiah/phpFinTS/blob/master/SamplesNew/directDebit.php), bekomme ich beim Einreichen der Lastschrift folgende Meldung (Postbank):

Jemand eine Idee, woran das liegen könnte?


HNVSK:998:3+PIN:1+998+1+2:
HNVSD:999:1+@85@HIRMG:2:2+9050::Teilweise fehlerhaft.
HIRMS:3:2:3+9210::Wert im Summenfeld erwartet.
HNHBS:4:1+3
ampaze commented 4 years ago

Kannst du evtl. das XML was generiert wird hier posten?

Vermutlich fehlt dort das Summenfeld, was deine Bank zwingend zu brauchen scheint.

(Ich kenne die abcaeffchen/sephpa lib nicht)

fbett commented 4 years ago

Lass uns mal ein paar Konfiguration abgleichen: $directDebitFile->addCollection ...:

und es wurde nur eine Zahlung per $directDebitCollection->addPayment hinzugefügt?

fbett commented 4 years ago

Kannst du evtl. das XML was generiert wird hier posten?

Vermutlich fehlt dort das Summenfeld, was deine Bank zwingend zu brauchen scheint.

(Ich kenne die abcaeffchen/sephpa lib nicht)

Ich meine, dass das Problem dadurch verursacht wird, dass in SendSEPADirectDebit::createRequest() nur unter bestimmten Umständen das Feld $hkdxe->summenfeld gesetzt wird, z.B. wenn es sich nicht um eine Batch-Verarbeitung bzw. nicht um mehrere Zahlungen handelt.

ampaze commented 4 years ago

Ich meine, dass das Problem dadurch verursacht wird, dass in SendSEPADirectDebit::createRequest() nur unter bestimmten Umständen das Feld $hkdxe->summenfeld gesetzt wird, z.B. wenn es sich nicht um eine Batch-Verarbeitung bzw. nicht um mehrere Zahlungen handelt.

Ich guck es mir noch mal an.

ampaze commented 4 years ago

@D3vJust Kannst du es mit #241 mal probieren?

ElishaDev commented 4 years ago

Lass uns mal ein paar Konfiguration abgleichen: $directDebitFile->addCollection ...:

  • 'btchBookg' => 'false'

und es wurde nur eine Zahlung per $directDebitCollection->addPayment hinzugefügt?

Korrekt, btchBookg auf false und über addPayment nur eine Zahlung hinzugefügt.

@D3vJust Kannst du es mit #241 mal probieren?

Habe ich gemacht, bringt leider die selbe Meldung.

Kannst du evtl. das XML was generiert wird hier posten?

Vermutlich fehlt dort das Summenfeld, was deine Bank zwingend zu brauchen scheint.

(Ich kenne die abcaeffchen/sephpa lib nicht)

Reiche ich nachher nach!

ElishaDev commented 4 years ago

Kannst du evtl. das XML was generiert wird hier posten?

Vermutlich fehlt dort das Summenfeld, was deine Bank zwingend zu brauchen scheint.

(Ich kenne die abcaeffchen/sephpa lib nicht)


<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.003.02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.008.003.02 pain.008.003.02.xsd">
    <CstmrDrctDbtInitn>
        <GrpHdr>
            <MsgId>*UniqueMessageID*</MsgId>
            <CreDtTm>2020-02-28T21:34:51</CreDtTm>
            <NbOfTxs>1</NbOfTxs>
            <CtrlSum>1.00</CtrlSum>
            <InitgPty>
                <Nm>*Toller Name*</Nm>
            </InitgPty>
        </GrpHdr>
        <PmtInf>
            <PmtInfId>PaymentID-1235-Test</PmtInfId>
            <PmtMtd>DD</PmtMtd>
            <BtchBookg>false</BtchBookg>
            <NbOfTxs>1</NbOfTxs>
            <CtrlSum>1.00</CtrlSum>
            <PmtTpInf>
                <SvcLvl>
                    <Cd>SEPA</Cd>
                </SvcLvl>
                <LclInstrm>
                    <Cd>CORE</Cd>
                </LclInstrm>
                <SeqTp>RCUR</SeqTp>
            </PmtTpInf>
            <ReqdColltnDt>2020-03-06</ReqdColltnDt>
            <Cdtr>
                <Nm>*Toller Name*</Nm>
            </Cdtr>
            <CdtrAcct>
                <Id>
                    <IBAN>*Unsere IBAN*</IBAN>
                </Id>
                <Ccy>EUR</Ccy>
            </CdtrAcct>
            <CdtrAgt>
                <FinInstnId>
                    <BIC>*Unsere BIC*</BIC>
                </FinInstnId>
            </CdtrAgt>
            <UltmtCdtr>
                <Nm>*Toller Name*</Nm>
            </UltmtCdtr>
            <ChrgBr>SLEV</ChrgBr>
            <CdtrSchmeId>
                <Id>
                    <PrvtId>
                        <Othr>
                            <Id>*GläubigerId*</Id>
                            <SchmeNm>
                                <Prtry>SEPA</Prtry>
                            </SchmeNm>
                        </Othr>
                    </PrvtId>
                </Id>
            </CdtrSchmeId>
            <DrctDbtTxInf>
                <PmtId>
                    <EndToEndId>R-0000/Testrechnung/20200226</EndToEndId>
                </PmtId>
                <InstdAmt Ccy="EUR">1.00</InstdAmt>
                <DrctDbtTx>
                    <MndtRltdInf>
                        <MndtId>*MandatsId*</MndtId>
                        <DtOfSgntr>2020-02-20</DtOfSgntr>
                        <AmdmntInd>false</AmdmntInd>
                    </MndtRltdInf>
                </DrctDbtTx>
                <DbtrAgt>
                    <FinInstnId>
                        <BIC>*BIC vom Kunden*</BIC>
                    </FinInstnId>
                </DbtrAgt>
                <Dbtr>
                    <Nm>*name vom Kunden*</Nm>
                </Dbtr>
                <DbtrAcct>
                    <Id>
                        <IBAN>*IBAN vom Kunden*</IBAN>
                    </Id>
                </DbtrAcct>
                <UltmtDbtr>
                    <Nm>*Toller Name*</Nm>
                </UltmtDbtr>
                <RmtInf>
                    <Ustrd>Testlastschrift-Abbuchung 02/2020</Ustrd>
                </RmtInf>
            </DrctDbtTxInf>
        </PmtInf>
    </CstmrDrctDbtInitn>
</Document>
ampaze commented 4 years ago

Also mit dem XML ist alles in Ordnung.

Bist du wirklich ganz sicher, dass bei deinem zweiten Test in SendSEPADirectDebit statt

if ($useSingleDirectDebit) {

die Negierung

if (!$useSingleDirectDebit) {

stand und auch aktiv war. (Opcache etc.)?


Ansonsten kommentier doch bitte mal testweise

if ($useSingleDirectDebit && !is_null($this->ctrlSum) && !is_null($bpd->getLatestSupportedParameters('HIDMES'))) {
    $useSingleDirectDebit = false;
}

aus. Dann wird es als Einzellastschrift gesendet, wofür dann auch kein Summenfeld nötig ist. (Aber dann funktioniert eine Sammellastschrift trotzdem noch nicht, also keine Lösung.)

ElishaDev commented 4 years ago

Die Negierung habe ich noch einmal überprüft, sie ist definitiv aktiv.

Wenn ich das if-Statement auskommentiere, scheint alles zu funktionieren.

Ich habe von der Bank jetzt folgende Rückmeldung bekommen: HIRMS:3:2:3+0020::Auftrag ausgeführt.

ampaze commented 4 years ago

Edit:

Es lag an einem Tippfehler. 🤦‍♂ Das Betragsfeld wurde daher nie gesendet, siehe #242

ElishaDev commented 4 years ago

Top, perfekt :D

Werde ich die nächsten Tage testen.

Ist es schwer was ordentliches bezüglich Callbacks zu implementieren?

ampaze commented 4 years ago

Was genau meinst du mit Callbacks? Was hast du vor?

ElishaDev commented 4 years ago

Aktuell erfahre ich ja nicht, ob ich von derBank z.B. ein "Wert im Summenfeld erwartet." oder ein "Auftrag ausgeführt." bekomme, außer ich schau mir die Log Messages an.

ampaze commented 4 years ago

Ah ok. Da ist das Beispiel nicht so gut momentan.

Du hast zwei Möglichkeiten:

$sendSEPADirectDebit->ensureSuccess();

Oder

if (!$sendSEPADirectDebit->isSuccess()) {
    $sendSEPADirectDebit->getError();
}
ElishaDev commented 4 years ago

Die Negierung habe ich noch einmal überprüft, sie ist definitiv aktiv.

Wenn ich das if-Statement auskommentiere, scheint alles zu funktionieren.

Ich habe von der Bank jetzt folgende Rückmeldung bekommen: HIRMS:3:2:3+0020::Auftrag ausgeführt.

Wenn nun keine Lastschrift abgebucht wurde. Wo fange ich mit der Fehlersuche an? Kann mir meine Bank da weiterhelfen?

Ah ok. Da ist das Beispiel nicht so gut momentan.

Du hast zwei Möglichkeiten:

$sendSEPADirectDebit->ensureSuccess();

Oder

if (!$sendSEPADirectDebit->isSuccess()) {
    $sendSEPADirectDebit->getError();
}

Top, danke :)

ampaze commented 4 years ago

Wenn nun keine Lastschrift abgebucht wurde. Wo fange ich mit der Fehlersuche an? Kann mir meine Bank da weiterhelfen?

Wenn die Bank den Auftrag entgegengenommen hat, dann hat FinTs seitig alles geklappt. Da musst du dann vermutlich mit der Bank sprechen. Ich kenne es so, dass die Lastschrift zum gewünschten Einzugstag als Umsatz auftaucht und falls die Lastschrift nicht geklappt hat, gibt es (evtl auch erst irgendwann später) einen Rücklastschriftumsatz.

ElishaDev commented 4 years ago

Dann schließe ich bis hierhin erst einmal das Issue. Vielen Dank auf jeden Fall schon einmal für die Unterstützung!