BillPay Techdocs
Navbar
XML Java PHP

E-Commerce Solutions

Getting Started

Diese Dokumentation beschreibt die technische Integration der BillPay Zahlarten im Bereich E-Commerce. Einen Überblick der Zahlarten und allgemeine Information zu BillPay finden Sie hier.

BillPay stellt Ihnen für verschiedene Programmiersprachen Integrationsbibliotheken zur Verfügung. Zu Beginn sollten Sie mit der Versionierung-Tabelle überprüfen, ob die Ihnen vorliegende BillPay Programmierbibliothek mit der aktuellen API Version kompatibel ist. Falls Sie die Anbindung an unsere XML API ohne Verwendung der Programmierbibliotheken realisieren möchten, finden Sie in der folgenden Tabelle die dafür notwendigen XSD Dateien:

API-Request Zweck XSD Links
prescore Anlegen der Bestellung Request / Response
preauthorize Anlegen der Bestellung Request / Response
capture Anlegen der Bestellung Request / Response
invoiceCreated Auftragsverwaltung Request / Response
cancel Auftragsverwaltung Request / Response
editCartContent Auftragsverwaltung Request / Response
updateOrder Auftragsverwaltung Request / Response
getBillPayBankData Auftragsverwaltung Request / Response

Frontend Integration

Das JavaScript Widget

Der Kern aller Integrationen ist das BillPay JavaScript Widget. Informationen zu den BillPay Zahlarten und alle relevanten Felder werden im Frontend Konversion optimiert angezeigt. Die standardisierte, einheitliche Darstellung stärkt den Wiedererkennungswert und fördert das Vertrauen der Kunden in die sicheren BillPay Zahlarten.

Konfiguration

Schritt 1: Laden des JavaScript

Um das BillPay JavaScript Widget für die Anzeige der BillPay-Zahlarten nutzen zu können, müssen Sie das JavaScript Snippet in Ihr Shop-Template einfügen.

<!-- Initialization & Konfiguration -->
<script type="application/javascript">

    var bpyReq = {},
            appPath = '//widgetcdn.billpay.de/checkout/1.x.x/';
    (function(win, doc, appPath, objectName) {
        bpyReq = {
            "deps": ['main'],
            "baseUrl": appPath,
            "skipDataMain": true,
            "callback": function() {}
        };
        win['BillPayCheckout'] = objectName;
        win[objectName] = win[objectName] || function() {
                    (win[objectName].queue = win[objectName].queue || []).push(arguments)
                };
        var requireJs = doc.createElement('script');
        requireJs.src = appPath + 'require.js';
        doc.getElementsByTagName('head')[0].appendChild(requireJs);
    })(window, document, appPath, 'billpayCheckout');

</script>

Anschließend steht die Funktion billpayCheckout zur Verfügung.

Schritt 2: Konfiguration

Zur Konfiguration des JavaScript Widgets wird die billpayCheckout Funktion aufgerufen und als ersten Parameter mit options befüllt. Als zweiter Parameter folgt ein JSON Objekt mit den Kunden- und Shopinformationen. Die Container Variable identifiziert den Container (z.B. div), in dem das BillPay Widget “gerendered” wird. Die checkout.form Variable beinhaltet den jQuery Selektor für das Formelement des Checkouts. Alle Rückgabewerte des BillPay Checkout Widgets werden diesem Element in Form von Hidden Input Feldern hinzugefügt und werden damit beim regulären Form-Submit an das Backend gesendet. Damit stehen diese Werte für die weitere serverseitige Verarbeitung zur Verfügung und können unter anderem für die Kommunikation mit der BillPay XML API verwendet werden.

<script type="application/javascript">
    billpayCheckout('options', {
        "container":".bpy-checkout-container",
        "checkout": {
            "form": "#payment_form"
        },
        "shop": {
            "apiKey": "710290a938e6b4770000005552",
            "live": false
        },
        "order": {
            "cartAmount": 161.94, // Total booking value without shipping or additional fees
            "orderAmount": 166.94, // Total booking value including shipping and additional fees
            "currency": "EUR" // the currency to be used for checkout
        },
        "customer": {
            "billing": {
                "salutation": "", // The customer's salutation. If this field is empty, the salutation input will be shown in the checkout widget.
                "firstName": "Thomas", // The customer's first name
                "lastName": "Testkunde", // The customer's last name
                "street": "Zinnowitzer Str.", // The customer's street (billing address)
                "streetNo": "1", // The customer's house number (billing address)
                "zip": "10115", // The customer's zip code (billing address)
                "city": "Berlin", // The customer's city (billing address)
                "phoneNumber": "3254234234234", // The customer's phone number. If this field is empty, the phone number input will be shown in the checkout widget.
                "countryIso2": "DE", // 2-digit country code of the customer's invoice address
                "countryIso3": "deu", // 3-digit country code of the customer's invoice address
                "dayOfBirth": "1970-01-15" // customer's date of birth in YYYY-MM-DD Format. If this field is set, it won't be Requested in the checkout widget.
            },
            "language": "de", // 2-digit language code for the checkout session
            "Identifier": "cee58750b29d5c9c6ce04a480d3ceb6d", // unique session ID hash
            "customerGroup": "private", // private or business customer
            "forceCustomerGroup": true // true: Widget takes the value for the customer group that your shop provides and the widget does not display the dropdown or false if you do not have this value
        },
        "inputNames": {
            "order": {
                "cartAmount": "billpay[cart_amount]",
                "orderAmount": "billpay[order_amount]",
                "currency": "billpay[currency]"
            },
            "customer": {
                "salutation": "billpay[customer_salutation]",
                "phoneNumber": "billpay[customer_phone_number]",
                "dayOfBirth": "billpay[customer_day_of_birth]",
                "language": "billpay[customer_language]",
                "companyName": "billpay[company_name]",
                "companyHolder": "billpay[company_holder]",
                "legalForm": "billpay[company_legal_form]",
                "registerNumber": "billpay[company_register_number]",
                "taxNumber": "billpay[company_tax_number]",
                "bankAccount": {
                    "iban": "billpay[customer_iban]",
                    "bic": "billpay[customer_bic]"
                },
                "accountHolder": "billpay[account_holder]"
            },
            "paymentMethods": {
                "invoice": {
                    "customerGroup": "billpay[invoice_customer_group]",
                    "termsOfService": "billpay[invoice_toc]"
                },
                "directDebit": {
                    "customerGroup": "billpay[direct_debit_customer_group]",
                    "termsOfService": "billpay[direct_debit_toc]"
                },
                "transactionCredit": {
                    "customerGroup": "billpay[transaction_credit_customer_group]",
                    "duration": "billpay[transaction_credit_duration]",
                    "instalmentsCount": "billpay[transaction_credit_instalments_count]",
                    "instalmentAmount": "billpay[transaction_credit_instalment_amount]",
                    "firstInstalmentAmount": "billpay[transaction_credit_first_instalment_amount]",
                    "totalAmount": "billpay[transaction_credit_total_amount]",
                    "feeAbsolute": "billpay[transaction_credit_fee_absolute]",
                    "feePercentage": "billpay[transaction_credit_fee_percentage]",
                    "processingFee": "billpay[transaction_credit_processing_fee_absolute]",
                    "annualPercentageRate": "billpay[transaction_credit_annual_percentage_rate]",
                    "termsOfService": "billpay[transaction_credit_toc]"
                },
                "paylater": {
                    "customerGroup": "billpay[paylater_customer_group]",
                    "duration": "billpay[paylater_duration]",
                    "instalmentsCount": "billpay[paylater_instalments_count]",
                    "instalmentAmount": "billpay[paylater_instalment_amount]",
                    "feeAbsolute": "billpay[paylater_fee_absolute]",
                    "totalAmount": "billpay[paylater_total_amount]",
                    "termsOfService": "billpay[paylater_toc]"
                }
            }
        }
    });
</script>
Variable Erklärung
container jQuery Selector, der den Container definiert, in dem das BillPay Widget “gerendered” wird. In diesem Beispiel: “.bpy-checkout-container”
checkout.form jQuery Selector (id) des Checkout-Formulars, in das die Widget-Felder übernommen werden, um die bei Submission zu übergeben
shop.apiKey Öffentlicher API Schlüssel, den Sie von BillPay erhalten haben
shop.live Definiert, ob der Checkout im "Live-” oder “Test-"Modus läuft
order.cartAmount Warenkorbwert (Artikelwert exkl. Versandkosten und zusätzlicher Gebühren)
order.orderAmount Gesamtbuchungswert (inkl. Versandkosten und zusätzlicher Gebühren)
order.currency ISO4217 ISO Code der Währung
customer.billing.salutation Anrede
customer.billing.firstName Vorname des Kunden
customer.billing.lastName Nachname des Kunden
customer.billing.street Straße der Kundenadresse
customer.billing.zip Postleitzahl der Kundenadresse
customer.billing.city Ort der Kundenadresse
customer.billing.phoneNumber Telefonnummer
customer.billing.countryIso2 ISO3166-1 (alpha-2)
customer.billing.countryIso3 ISO3166 (aplha-3)
customer.billing.dayOfBirth Geburtsdatum
customer.language ISO3166-1 (alpha-2)
customer.Identifier Eindeutiger Token zur Betrugsprävention (z.B. Hash der User-Session-Id)
customer.customerGroup "private” für Privatkunden (B2C) oder "business” für Geschäftskunden (B2B)
customer.forceCustomerGroup True: Das Widget übernimmt den Wert für die Kundengruppe, der vom Shop geliefert wird und zeigt das Drop-Down-Menü zur Auswahl der Kundengruppe nicht an.
False: Für den Fall, dass die Kundengruppe nicht bekannt ist.
inputNames IDs der vom JavaScript Widget zu erzeugenden "hidden” Input-Felder innerhalb des definierten checkout.form jQuery Selectors. (im Beispiel: billpay[NAME_DES_FORMULARFELDES])
inputNames.order Input-Felder für die Buchungsdaten
inputNames.customer Input-Felder für die Kundendaten
inputNames.paymentMethods Input-Felder für die zahlartspezifischen Daten
Request JSON Objekt, das die Request Informationen enthält (z. B. json_encode($_REQUEST);)

Schritt 3: Ausführen

Mit dem Ausführen von run ist das BillPay Widget “gerendert”. Der Container wird durch die options Call Container Variable bestimmt. Es ist zudem möglich den Container als zweiten Parameter (json object) bereitzustellen, wenn run ausgeführt wird. Den Container in der run-Methode bereitzustellen ermöglicht Ihnen, eine Vielzahl von Widgets in einer Checkout-Seite zu “rendern”.

<script type="application/javascript">
    billpayCheckout('run');
</script>

Falls Sie sich dazu entscheiden den Container mit Aufruf der Funktion run bereitzustellen, lassen Sie die Variable bei options weg und ergänzen Sie diese im Call run wie folgt:

<script type="application/javascript">
    billpayCheckout('run', {"container": ".bpy-checkout-container"});
</script>
Variable Info
container jQuery Selector definiert, in welchem Element die Zahlmethode dargestellt werden soll (In diesem Beispiel “.bpy-checkout-container”)

Schritt 4: Validierung des Widgets

<script type="application/javascript">
    $("#payment_form").submit(function( event ) {
        if(!billpayCheckout('isValid')){
            event.preventDefault();
        }
    });
</script>
Variable Info
’#payment_form’ jQuery Selector definiert die ID des Checkout-Formulars, die die Zahlungsmethoden enthält und übermittelt (in diesem Beispiel “#payment_form”)

Vollständiges Beispiel

<!DOCTYPE html>
<html>
<head></head>

<body>

<!-- Initialisierung & Konfiguration -->
<script type="application/javascript">

    var bpyReq = {},
            appPath = '//widgetcdn.billpay.de/checkout/1.x.x/';
    (function(win, doc, appPath, objectName) {
        bpyReq = {
            "deps": ['main'],
            "baseUrl": appPath,
            "skipDataMain": true,
            "callback": function() {}
        };
        win['BillPayCheckout'] = objectName;
        win[objectName] = win[objectName] || function() {
                    (win[objectName].queue = win[objectName].queue || []).push(arguments)
                };
        var requireJs = doc.createElement('script');
        requireJs.src = appPath + 'require.js';
        doc.getElementsByTagName('head')[0].appendChild(requireJs);
    })(window, document, appPath, 'billpayCheckout');

    billpayCheckout('options', {
        "checkout": {"form": "#payment_form"},
        "shop": {
            "apiKey": "dd9df504894ffc0e0000007847",
            "live": false
        },
        "order": {
            "cartAmount": 161.94, // Wert des Warenkorbs ohne etwaige Gebühren
            "orderAmount": 166.94, // Gesamtwert inkl. aller Gebühren
            "currency": "EUR"
        },
        "customer": {
            "billing": {
                "salutation": "", // Anrede des Kunden. Wird dieses Feld gefüllt, erscheint die Abfrage nicht im Widget.
                "firstName": "Thomas", // Vorname des Kunden
                "lastName": "Testkunde", // Nachname des Kunden
                "street": "Zinnowitzer Str.", // Straße der Rechnungsadresse des Kunden
                "streetNo": "1", // Hausnummer der Rechnungsadresse des Kunden
                "zip": "10115", // Postleitzahl der Rechnungsadresse des Kunden
                "city": "Berlin", // Ort der Rechnungsadresse des Kunden
                "phoneNumber": "3254234234234", // Telefonnummer der Rechnungsadresse des Kunden. Wird dieses Feld gefüllt, erscheint die Abfrage nicht im Widget.
                "countryIso2": "DE", // 2-stelliger Ländercode der Rechnungsadresse des Kunden
                "countryIso3": "deu", // 3-stelliger Ländercode der Rechnungsadresse des Kunden
                "dayOfBirth": "1970-01-15" // Geburtsdatum des Kunden im Format JJJ-MM-TT. Wird dieses Feld gefüllt, erscheint die Abfrage nicht im Widget
            },
            "language": "de", // 2-stelliger Code der gewünschten Sprache des Kunden
            "Identifier": "cee58750b29d5c9c6ce04a480d3ceb6d", // eindeutiger Hash für die Nutzersession
            "customerGroup": "private", //private oder business Kunde
            "forceCustomerGroup": true, // true: Widget übernimmt den vom Shop übergebenen customerGroup Wert oder false
        },
        "inputNames": {
            "order": {
                "cartAmount": "billpay[cart_amount]",
                "orderAmount": "billpay[order_amount]",
                "currency": "billpay[currency]"
            },
            "customer": {
                "salutation": "billpay[customer_salutation]",
                "phoneNumber": "billpay[customer_phone_number]",
                "dayOfBirth": "billpay[customer_day_of_birth]",
                "language": "billpay[customer_language]",
                "companyName": "billpay[company_name]",
                "companyHolder": "billpay[company_holder]",
                "legalForm": "billpay[company_legal_form]",
                "registerNumber": "billpay[company_register_number]",
                "taxNumber": "billpay[company_tax_number]",
                "bankAccount": {
                    "iban": "billpay[customer_iban]",
                    "bic": "billpay[customer_bic]"
                },
                "accountHolder": "billpay[account_holder]"
            },
            "paymentMethods": {
                "invoice": {
                    "customerGroup": "billpay[invoice_customer_group]",
                    "termsOfService": "billpay[invoice_toc]"
                },
                "directDebit": {
                    "customerGroup": "billpay[direct_debit_customer_group]",
                    "termsOfService": "billpay[direct_debit_toc]"
                },
                "transactionCredit": {
                    "customerGroup": "billpay[transaction_credit_customer_group]",
                    "duration": "billpay[transaction_credit_duration]",
                    "instalmentsCount": "billpay[transaction_credit_instalments_count]",
                    "instalmentAmount": "billpay[transaction_credit_instalment_amount]",
                    "firstInstalmentAmount": "billpay[transaction_credit_first_instalment_amount]",
                    "totalAmount": "billpay[transaction_credit_total_amount]",
                    "feeAbsolute": "billpay[transaction_credit_fee_absolute]",
                    "feePercentage": "billpay[transaction_credit_fee_percentage]",
                    "processingFee": "billpay[transaction_credit_processing_fee_absolute]",
                    "annualPercentageRate": "billpay[transaction_credit_annual_percentage_rate]",
                    "termsOfService": "billpay[transaction_credit_toc]"
                },
                "paylater": {
                    "customerGroup": "billpay[paylater_customer_group]",
                    "duration": "billpay[paylater_duration]",
                    "instalmentsCount": "billpay[paylater_instalments_count]",
                    "instalmentAmount": "billpay[paylater_instalment_amount]",
                    "feeAbsolute": "billpay[paylater_fee_absolute]",
                    "totalAmount": "billpay[paylater_total_amount]",
                    "termsOfService": "billpay[paylater_toc]"
                }
            }
        }
    });
</script>

<!-- Container -->
<form id="payment_form">
    <h1>Rechnungskauf</h1>
    <div class="bpy bpy-checkout-container" bpy-pm="invoice"></div>
    <h1>Lastschrift</h1>
    <div class="bpy bpy-checkout-container" bpy-pm="directDebit"></div>
    <h1>PayLater</h1>
    <div class="bpy bpy-checkout-container" bpy-pm="paylater"></div>

</form>

<!-- run the widget -->
<script type="application/javascript">
    billpayCheckout('run', {"container": ".bpy-checkout-container"});

    $("#payment_form").submit(function( event ) {
        if(!billpayCheckout('isValid')){
            event.preventDefault();
        }
    });
</script>

</body>
</html>

Neben der Einbindung des BillPay JavaScript Widget, ist es erforderlich die, durch BillPay bereitgestellten, Textbausteine in die AGB und Datenschutzbestimmungen des Händlers einzubinden.

Falls Sie im Footer Ihrer Webseite oder auf der Zahlartauswahlseite Logos der Zahlarten/Zahlungsanbieter anzeigen, ist es ebenfalls erforderlich das entsprechend BillPay Logo anzuzeigen. Die Logos stehen wahlweise im png oder svg-Format zur Verfügung und können hier heruntergeladen werden:

https://www.billpay.de/de/shopintegration/downloads/

XML API Überblick

Jeder XML-Service-Request besteht aus einem XML-Dokument. Mittels HTTP POST-Request muss der jeweilige Request an eine eindeutige Service-URL gesendet werden. Als Antwort auf einen Service-Request liefert die XML-Schnittstelle eine XML-Service-Response. Jede Service-Response besteht wiederum aus einem XML-Dokument, welches immer einen Fehlercode und Fehlermeldungen für Händler, Kunden und Entwickler beinhaltet. Nur wenn eine XML-Service-Response mit dem Fehlercode “0” vorliegt, kann die Aktion als gültig betrachtet werden. Andernfalls liefert die Schnittstelle detaillierte Fehlermeldungen zurück.

Die übergebenen XML-Daten an die Schnittstelle müssen als UTF-8 codiert sein. Ebenso werden die XML-Antworten in UTF-8 codiert zurückgegeben. Das Schema der Service-Requests beruht auf der Nutzung von XML-Attributen. Bitte vergewissern Sie sich, dass reservierte Zeichen in den Attributwerten entsprechend des XML-Standards durch Escape-Sequenzen ersetzt werden:

Reserviertes Zeichen Escape Sequenz
& &amp;
&quot;
&apos;
< &lt;
> &gt;

Webservice URL

Die URLs für die XML-Services bestehen aus einer Basis-URL, gefolgt vom Identifier für den jeweiligen Service.

Base URLs

Generische Parameter

Generische Parameter für alle XML-Requests

Einige Parameter werden für alle XML-Request erwartet, unabhängig davon um welchen Endpointe es sich handelt. Beispielsweise die API-Zugangsdaten zur Authentifizierung des Händlers. Die API-Zugangsdaten werden Ihnen von BillPay zur Verfügung gestellt.

Request

<?xml version="1.0" encoding="UTF-8"?>
<data apiversion="2.0.0">
    <default_params mid="1234" pid="9999" passwordhash="25d55ad283aa400af464c76d713c07ad" />
    <!-- additional Request specific data -->
</data>
Attribute Pflicht Data Type Info
mid + positive int Händler ID
pid + positive int Portal ID
passwordhash + string MD5 Hash des Security Key. Das Passwort wird durch BillPay zur Verfügung gestellt.

Response

Generische Parameter für alle XML-Responses

Mit jedem XML-Service-Response werden durch BillPay die folgenden Parameter zurückgegeben:

<?xml version="1.0" encoding="UTF-8"?>
<data apiversion="2.0.0" customermessage Bitte wählen Sie eine andere Zahlart. Leider können wir Ihnen für diese Transaktion die ausgewählte Zahlart von BillPay nicht anbieten." merchantmessage="Bitte wählen Sie eine andere Zahlart. Der Kunde wurde aufgrund fehlgeschlagener Identitäts- bzw. Bonitätsprüfung abgelehnt." developermessage="" `errorcode`="32">

    <!-- additional Request specific data -->
</data>
Attribute Pflicht Format Info
errorcode + non-negative int Fehlercode. Standardwert ist "0” und bedeutet kein Fehler.
merchantmessage + string Detaillierte Fehlermeldung nur für den Händler
customermessage + string Fehlermeldung für den Kunden
developermessage + string Detaillierte Fehlermeldung für den Entwickler, der XSD-Validierungsfehler benennt. Bei fehlerfreier Verarbeitung wird das Feld nicht befüllt.

Anlegen der Bestellung

Prozessüberblick

Prescoring

Bei Verwendung der Zahlartensteuerung von BillPay findet die Identitäts- und Bonitätsprüfung durch BillPay während des Bestellprozesses im Online-Shop vor der Anzeige der Zahlartenauswahlseite statt. Mit der Vorabprüfung wird ermöglicht, dass Zahlarten, für die der Kunde nicht zugelassen wurde, nicht eingeblendet werden. Dadurch sinkt die Kaufabbruchquote und die Konversionsrate steigt signifikant.

Flowchart prescoring

“Einstufiger Bestellablauf (Standardfall)”

Beim einstufigen Bestellablauf findet die Identitäts- und Bonitätsprüfung nach Auswahl der Zahlart statt, wenn der Kunde den Kauf abschließt. Bei positiver Response (status=“APPROVED”), kann die Bestellung als abgeschlossen betrachtet werden. Bei einer Ablehnung (status=“DENIED”) ist dem Kunden die Fehlermeldung des BillPay-Responses anzuzeigen (customermessage) und die BillPay Zahlarten auszublenden.

XML-Request Erklärung Zeitpunkt Service URL
preauthorize (manualcapture=“0”) Zur Identitäts- und Bonitätsprüfung des Kunden Nachdem der Kunde die Zahlart gewählt hat und auf den Bestätigungsbutton klickt. Nach positiver Response durch BillPay ist die Bestellung abgeschlossen. [Base-URL]/preauthorize

Flowchart classic scoring

“Zweistufiger Bestellablauf”

Beim zweistufigen Bestellungsprozess findet die Identitäts- und Bonitätsprüfung nach Auswahl der Zahlart jedoch vor Abschluss der Bestellung statt. In diesem Szenario ist es möglich, zu prüfen, ob der Kunde mit BillPay bezahlen kann, bevor er die Bestellung abschließen möchte. Im Falle einer Ablehnung (status=“DENIED”), sind dem Kunden die alternativen Zahlarten anzubieten und die Fehlermeldung (customermessage) aus der BillPay-Response anzuzeigen. Bei positivem Ergebnis der Identitäts- und Bonitätsprüfung (status=“APPROVED”), kann der Kunde auf die Bestellübersichtsseite geleitet werden und dort seine Bestellung abschließen. Falls der Kunde nach der Bonitätsprüfung auf der Bestellübersichtsseite Änderungen der Bestellung, die den Auftragswert ändern (z.B. Gutscheincodes oder andere Versandart), wird ein neuer Preauthorize-Request mit dem aktualisierten Betrag erwartet.

XML service Erklärung Zeitpunkt Service URL
preauthorize (manualcapture=“1”) Zur Identitäts- und Bonitätsprüfung Nachdem der Kunde die Zahlart ausgewählt hat, jedoch vor Abschluss der Bestellung. Bei positiver Response ist die Bestellung noch nicht abgeschlossen. [Base-URL]/preauthorize
capture Anlage der Bestellung im BillPay System Nach finaler Bestellanfrage [Base-URL]/capture

Flowchart prescoring

Ratenkauf/ PayLater mit Anzahlungsoption

Für unsere Zahlart “PayLater” (DEU) bieten wir Ihren Kunden zusätzlich die Möglichkeit, mittels Anzahlung von Teilbeträgen, durch unseren Partner giropay, ihre Bonitätsbewertung zu verbessern. Die Annahmequote für Teilzahlungsgeschäfte wird hierdurch maßgeblich gesteigert. Kunden werden im Fall einer entsprechenden Einstufung durch das BillPay Risikomanagement zum giropay-Banking-Gateway weitergeleitet, welches eine Überweisung des Anzahlungsbetrags per regulärer Onlineüberweisung der eigenen Bank in Echtzeit ermöglicht. Wurde der Betrag erfolgreich angezahlt, wird der Kunde in Ihren Checkout zurückgeleitet und die Bestellung wird abgeschlossen.

Flowchart prepayment

Prescore

Mit der Zahlartensteuerung von BillPay können Onlinehändler vor Anzeige der Zahlartenauswahlseite in ihrem Onlineshop kundenindividuell steuern, welche BillPay-Zahlarten den Endkunden angeboten werden sollen. Mit der Vorabprüfung wird ermöglicht, dass Zahlarten, für die der Kunde nicht zugelassen wurde, nicht eingeblendet werden. Dadurch wird ein negatives Kauferlebnis durch Ablehnung vermieden. Der Einsatz der Zahlartensteuerung impliziert, dass jeder Kunde einer Identitäts- und Bonitätsprüfung unterzogen wird, bevor eine Zahlart ausgewählt wird. Es ist erforderlich, dass die Kunden vorab aktiv (durch Bestätigen einer Checkbox) einer Identitäts- und Bonitätsprüfung, sowie den AGB und Datenschutzbestimmungen von BillPay zustimmen.
Die BillPay-Zahlartensteuerung ist damit als Alternative zur Prüfung der Endkundenanfrage nach Auswahl einer BillPay-Zahlart zu sehen. Ein Händlerportal bei BillPay kann entweder mit Zahlartensteuerung oder ohne Zahlartensteuerung arbeiten, aber nicht beides zur gleichen Zeit.

Die Antwort-Parameter sind nur solange gültig, solange alle Eingabeparameter des prescore-Requests unverändert bleiben. Sobald der Kunde seine personenbezogenen Daten oder den Warenkorb ändert, muss der prescore-Request erneut gesendet werden.

Request

Data-Knoten

<data
        requesttype="PRESCORE"
        apiversion="2.0.0"
        originofsale="o">
    <!-- additional Request specific data -->
</data>
prescoreRequest prescoreRequest = new PrescoreRequest();
prescoreRequest
    .setOriginOfSale(OriginOfSale.ONLINE_SHOP);    
<?php
use BillPay\Core\Commons\Constants;
use BillPay\Core\Requests\PrescoreFactory;

$prescoreRequest = PrescoreFactory::create();
$prescoreRequest
    ->setOriginOfSaleOnline();
Attribute Pflicht Data Type Werte Info
requesttype + string PRESCORE Name des Requests
tcaccepted + boolean 0/1 Kenner, ob die BillPay AGB und Datenschutzbestimmungen vom Kunden akzeptiert wurden
apiversion + string 2.0.0 BillPay API Version
originofsale + string A..1 Kennzeichnet den Vertriebskanal
u: Unknown
o: Online Shop
p: Offline / POS
t: Telesales / Call Center

Default Params-Knoten (Händler Zugangsdaten)

Ihre Händler-Zugangsdaten werden Ihnen durch BillPay zur Verfügung gestellt.

<default_params
        mid="1234"
        pid="9999"
        passwordhash="25d55ad283aa400af464c76d713c07ad" />
prescoreRequest
    .setMerchantId(1234)
    .setPortalId(9999)
    .setApiPassword("clear text password")
    .setSessionId("clear text session id");

<?php $prescoreRequest ->setMerchantId(1234) ->setPortalId(9999) ->setApiPassword(‘clear text password’) ->setSessionId('clear text session ID’); “`

Attribute Pflicht Format Info
mid + positive int Händler ID/Merchant ID
pid + positive int Portal ID
passwordhash + string MD5 Hash des Passworts, welches BillPay für Ihr Portal generiert und Ihnen zur Verfügung gestellt hat

Customer Details-Knoten (Rechnungsanschrift des Kunden)

<customer_details
        customerid="123456"
        customertype="e"
        salutation="Herr"
        title=""
        firstname="Thomas"
        lastname="Testkunde"
        street="Tinnowitzer Straße 1"
        streetnumber=""
        addressaddition=""
        zipcode="10115"
        city="Berlin"
        country="DEU"
        email="anyone@anymail.de"
        phone="03012345678"
        cellphone=""
        dateofbirth="19741012"
        language="de"
        ipaddress="80.111.120.1"
        customergroup="p" />
prescoreRequest.getCustomer()
    .setId("123456")
    .setCustomerType(CustomerType.EXISTING_CUSTOMER)
    .setCustomerGroup(CustomerGroup.PRIVATE_CLIENT)
    .setDateOfBirth(new SimpleDateFormat("yyyy/MM/dd").parse("1975/10/12"))
    .setEmail("anymail@gmx.de")
    .setIpAddress("80.111.120.1")
    .setLanguageIso2("de")
    .getBillingAddress()
        .setSalutation("Herr")
        .setFirstName("Thomas")
        .setLastName("Testkunde")
        .setStreet("Tinnowitzer Straße")
        .setStreetNumber("1")
        .setZipCode("10115")
        .setCity("Berlin")
        .setCountryIso3("DEU")
        .setPhone("03012345678");
<?php
$customer = $prescoreRequest->getCustomer();
$customer->setId('123456')
    ->setIsExistingCustomer()
    ->setIsPrivateCustomer()
    ->setDateOfBirth('1975-10-12')
    ->setEmail('anymail@gmx.de')
    ->setIpAddress('80.111.120.1')
    ->setLanguageIso2('de')
    ->getBillingAddress()
        ->setSalutation('Herr')
        ->setFirstName('Thomas')
        ->setLastName('Testkunde')
        ->setStreet('Tinnowitzer Straße')
        ->setStreetNumber('1')
        ->setZipCode('10115')
        ->setCity('Berlin')
        ->setCountryIso3('DEU')
        ->setPhone('03012345678');
Attribute Pflicht Format Werte Info
customerid - string AN..40 Kundennummer aus dem Händler-System (Zulässige Zeichen:
0-9, a-z, A-Z, .,-,_,/). Diese Kundennummer wird auf der Händlerabrechnung mit angegeben.
customertype - string A..1 Kundentyp
g: Gast
e: Existierender Kunde/Bestandskunde
n: Neukunde
salutation + string Anrede
Default: siehe Addendum Salutations
title - string AN..20 Titel (z.B. "Dr.” oder “Prof. Dr.”)
firstname + string AN..40 Vorname
lastname + string AN..40 Nachname
street + string AN..40 Straße
streetnumber - string AN..7 Hausnummer
addressaddition - string AN..40 Adresszusatz
zipcode + string AN..7 Postleitzahl
city + string AN..40 Ort
country + string A..3 Kundenland (z.B. “DEU”): ISO3166 (alpha-3)
email + string AN..40 (ausgenommen sind ungültige Sonderzeichen) E-Mail-Adresse
phone -* string AN..40 Telefonnummer
cellphone - string AN..40 Handynummer
dateofbirth + string YYYYMMDD Geburtsdatum - optional für B2B-Kunden
language + string A..2 Kundensprache (z.B. “de”): ISO3166-1 (alpha-2)
ipaddress + string IPv4 oder IPv6 (IPv4-Embedded IPv6 Adresse) Kunden IP Adresse. Lokale IP-Adressen sind nicht zugelassen.
customergroup + string A..1 Kundengruppe
p: Privatkunde/Endkunde
b: Business/Geschäftskunde

*phone ist ein Pflichtfeld, falls:
1) es sich um die Zahlart PayLater paymenttype =4 handelt,
2) bei der Zahlart Rechnung (paymenttype = “1”), wenn das Kundenland Niederlande ist und
3) zahlartübergreifend bei Kunden aus der Schweiz.

Shipping Details-Knoten (Lieferanschrift)

Dieser Knoten beinhaltet wahlweise den Parameter usebillingaddress=1 (true), oder alternativ die vollständige abweichende Lieferanschrift.

<shipping_details
        usebillingaddress="1"
        salutation=""
        title=""
        firstname=""
        lastname=""
        street=""
        streetnumber=""
        addressaddition=""
        zipcode=""
        city=""
        country=""
        phone=""
        cellphone="" />
prescoreRequest.getCustomer().createShippingAddress()
    .setSalutation("Herr")
    .setFirstName("Thomas")
    .setLastName("Testkunde")
    .setStreet("Tinnowitzerstrasse")
    .setStreetNumber("1")
    .setZipCode("10115")
    .setCity("Berlin")
    .setCountryIso3("DEU")
    .setPhone("03012345678");
<?php
/* 
if the shipping address is the same as the billing address, you do not need to do anything here.  If the shipping address is not the same as the billing address, the shipping address is set as follows:
*/
$customer->getShippingAddress()
    ->setSalutation('Herr')
    ->setFirstName('Thomas')
    ->setLastName('Testkunde')
    ->setStreet('Hardenberger Straße')
    ->setStreetNumber('1')
    ->setZipCode('10623')
    ->setCity('Berlin')
    ->setCountryIso3('DEU')
    ->setPhone('03012345678');
Attribute Pflicht Format Werte Info
usebillingaddress + boolean 0/1 Rechnungsanschrift gleicht der Lieferanschrift des Kunden
0: Abweichende Lieferanschrift existent
1: Rechnungsanschrift als Lieferadresse nutzen
salutation - string Anrede
Default: Siehe Addendum Salutations
title - string AN..20 Titel (z.B. “Dr.” oder “Prof. Dr.”)
firstname - string AN..40 Vorname
lastname - string AN..40 Nachname
street - string AN..40 Straße
streetnumber - string AN..7 Hausnummer
addressaddition - string AN..40 Adresszusatz
zipcode - string AN..7 Postleitzahl
city - string AN..40 Ort
country - string A..3 Kundenland (z.B. “DEU”): ISO3166 (alpha-3)
phone - string AN..40 Telefonnummer
cellphone - string AN..40 Handynummer

Company Details Knoten (Details zu Geschäftskunden)

Sollten Sie Ihre Ware an Geschäftskunden verkaufen (`customertype´ = “b”), müssen in diesem Knoten alle Details zum Geschäftskunden übergeben werden.

<company_details
        name="Testfirma"
        legalform="GmbH"
        registernumber="HRB 122 029 B"
        holdername="Testinhaber Owner"
        taxnumber="DE268874183" />
prescoreRequest.getCustomer().createCompany()
    .setName("Testfirma")
    .setLegalForm("GmbH")
    .setRegisterNumber("HRB 122 029 B")
    .setTaxNumber("DE268874183")
    .setCompanyProprietor("Testinhaber Owner");
<?php
$company = $customer->getCompany();
$company->setLegalFormGmbh()
    ->setName('Testfirma')
    ->setRegisterNumber('HRB 122 029 B')
    ->setCompanyProprietor('Testinhaber Owner')
    ->setTaxNumber('DE268874183');
Attribute Pflicht Format Werte Info
name + string AN..200 Name der Firma
legalform + string Rechtsform der Firma
Vorgabe siehe Glossar legalform
registernumber - string AN..20 Handelsregisternummer/Firmenbuch
holdername - string AN..100 Name des Inhabers der Firma
taxnumber - string gültige UStIdNr. (DEXXXXXXXXX)

Article Data-Knoten (Warenkorbpositionen)

Im article_data-Knoten werden alle Informationen rund um die in der Bestellung enthaltenen Warenkorbpositionen abgebildet. Pro einzigartigem Artikel wird ein article-Knoten gesetzt.

<article_data>
    <article 
        articleid="1234" 
        articlequantity="2" 
        articletype="0" 
        articlename="Shirt" 
        articlecategory="Clothing" 
        articlesubcategory1="Van Laack" 
        articlepricenet="10084" 
        articlepricegross="12000" />
    <article
        articleid="2345" 
        articlequantity="1" 
        articletype="0" 
        articlename="Hose" 
        articlecategory="Clothing" 
        articlesubcategory1="Ralph Lauren"  
        articlepricenet="16807" 
        articlepricegross="20000" />
</article_data>
prescoreRequest.getCart().createAndAddArticle()
    .setId("1234")
    .setQuantity(2)
    .setType(ArticleType.OTHER)
    .setName("Shirt")
    .setCategory("Clothing")
    .setFirstSubCategory("Van Laack")
    .setPriceNet(10084)
    .setPriceGross(12000);

prescoreRequest.getCart().createAndAddArticle()
    .setId("2345")
    .setQuantity(1)
    .setType(ArticleType.OTHER)
    .setName("Hose")
    .setCategory("Clothing")
    .setFirstSubCategory("Ralph Lauren")
    .setPriceNet(16807)
    .setPriceGross(20000);    
<?php
$cart = $prescoreRequest->getCart();
$cart->createAndAddArticle()->setName('Shirt')
    ->setPriceGross('12000')
    ->setPriceNet('10084')
    ->setQuantity('2')
    ->setCategory('Clothing')
    ->setFirstSubCategory('Van Laack')
    ->setId('1234');
$cart->createAndAddArticle()->setName('Hose')
    ->setPriceGross('20000')
    ->setPriceNet('16807')
    ->setQuantity('1')
    ->setCategory('Hose')
    ->setFirstSubCategory('Ralph Lauren')
    ->setId('2345');    
Attribute Pflicht Format Werte Info
articleid + string AN..20 Eindeutige Artikel-ID für die Warenkorbposition
articlename + string AN..50 Artikelname
articletype + non-negative int N..1 Klassifizierung der Artikelpositionen. Default = 0
articlequantity + positive int N..7 Menge des Artikels im Warenkorb
articlepricenet + int N..7 Nettopreis des Artikels in kleinster Währungseinheit (1,00 EUR = 100)
articlepricegross + int N..7 Bruttopreis des Artikels in kleinster Währungseinheit (1,00 EUR = 100)
articlecategory - string AN..50 Artikelkategorie
articlesubcategory1 - string AN..50 Artikel-Unterkategorie 1
articlesubcategory2 - string AN..50 Artikel-Unterkategorie 2

Total-Knoten

Der total-Knoten beinhaltet die Gesamtwerte und die Auftragsnummer.

<total 
    shippingname="Express Versand" 
    shippingpricenet="840" 
    shippingpricegross="1000" 
    rebatenet="1681" 
    rebategross="2000" 
    orderamountnet="36134" 
    orderamountgross="43000" 
    currency="EUR" />
prescoreRequest.getShipping()
    .setName("Express Versand")
    .setPriceNet(840)
    .setPriceGross(1000);

prescoreRequest.getCart()
    .setOrderAmountNet(36134)
    .setOrderAmountGross(43000)
    .setCurrencyIso3("EUR")
    .createAndAddRebate()
        .setRebateNet(1681)
        .setRebateGross(2000);
<?php
$shipping = $prescoreRequest->getShipping();
$shipping->setPriceGross('1000')
    ->setPriceNet('840')
    ->setTrackingNumber('123456')
    ->setName('Express Versand');

$rebate = $cart->createRebate();
$rebate->setPriceGross('2000')
    ->setPriceNet('1681');
$cart->setOrderAmountGross('43000')
    ->setOrderAmountNet('36134')
    ->setCurrencyIso3('EUR')
    ->addRebate($rebate);   
Attribute Pflicht Format Werte Info
shippingname + string AN..50 Versandart (z.B. “DHL Express”, “DPD” etc..)
shippingpricenet + non-negative int N..7 Bruttowert (mit Steuer) aller (Liefer-) Gebühren (z.B. Versand, Expresszuschläge).
Falls nicht gegeben bitte mit 0 belegen.
shippingpricegross + non-negative int N..7 Bruttowert (mit Steuer) aller (Liefer-) Gebühren (z.B. Versand, Expresszuschläge).
Falls nicht gegeben bitte mit 0 belegen.
rebatenet + non-negative int N..7 Positiver Nettowert (ohne Steuer) aller Rabatte, Coupons und sonstiger betragsmindernder Posten in kleinster Währungseinheit (1,00 EUR = 100).
Falls nicht gegeben bitte mit 0 belegen.
rebategross + non-negative int N..7 Positiver Bruttowert (mit Steuer) aller Rabatte, Coupons und sonstiger betragsmindernder Posten in kleinster Währungseinheit (1,00 EUR = 100).
Falls nicht gegeben bitte mit 0 belegen.
orderamountnet + positive int N..7 Nettowert (ohne Steuer) der Bestellung in kleinster Währungseinheit (1,00 EUR = 100)
[(articlequantity * articlepricenet) + shippingpricenet – rebatenet]
orderamountgross + positive int N..7 Bruttowert (mit Steuer) der Bestellung in kleinster Währungseinheit (1,00 EUR = 100)
[(articlequantity * articlepricegross) + shippingpricegross – rebategross]
currency + string A..3 3-stelliger Währungscode (z.B. “EUR”): ISO4217
reference - string AN..40 Eindeutige Bestell-ID aus dem Händlersystem. Diese Nummer wird als Kenner in der Abrechnungsdatei verwendet, sowie nachfolgende Anfragen zur Bearbeitung eines Auftrags.
Zulässige Zeichen:
0-9, a-z, A-Z, -,

Regex:
([A-Z]|[a-z]|[0-9]|-|
)*
trackingnumber - string AN..40 Trackingnummer der Sendung (falls bereits bekannt)

Fraud Detection-Knoten zur Betrugsprävention

In diesem Knoten wird die für die Session des Kunden vergebene einzigartige ID übergeben. Dies dient der Bekämpfung von Betrug in Ihrem Shop, indem verdächtige Kunden/Sessions ermittelt und gefiltert werden. Das Tool zur Betrugsprävention ist korrekt eingebunden, wenn der Wert der Session ID mit dem Identifier im JavaScript Widget übereinstimmt.

<fraud_detection sessionid="97d3d1b1cc6b0686bbc1f19feec80e6c" />
prescoreRequest
    .setSessionId("clear text session ID");
<?php
$prescoreRequest->setSessionId('session id'); 
Attribute Pflicht Format Werte Info
sessionid + string AN..100 Session ID der Usersitzung (muss der Session ID, welche im JavaScript Widget setzt wurde, entsprechen)

Response

Data-Knoten

Der data-Knoten enthält das Ergebnis der Bonitäts- und Identitätsprüfung durch BillPay. Zusätzlich zum Scoring-Ergebnis (APPROVED / DENIED), wird die durch BillPay vergebene eindeutige Transaktions-ID (transactionid) zurückgespielt.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<data
        responsetype="PRESCORE"
        errorcode="0"
        customermessage=""
        merchantmessage=""
        developermessage=""
        status="APPROVED"
        transactionid="1aa2fb2d-2b78-4393-bf06-be0012dda337">
    <!-- additional Response specific data -->
</data>
System.out.println(requestResponse.getErrorCode());
System.out.println(requestResponse.getMerchantMessage());
System.out.println(requestResponse.getDeveloperMessage());
System.out.println(requestResponse.getCustomerMessage());
System.out.println(requestResponse.getAuthorizationStatus());
System.out.println(requestResponse.getTransactionId());
<?php
// send the request to BillPay and retrieve the response
$prescoreResponse = $prescoreRequest->send();

// get data out of the response
if ($prescoreResponse->isError()) {
    echo $prescoreResponse->getStatus();
    echo $prescoreResponse->getErrorCode();
    echo $prescoreResponse->getMerchantMessage();
    echo $prescoreResponse->getDeveloperMessage();
    echo $prescoreResponse->getCustomerMessage();
} else {
    echo $prescoreResponse->getStatus();
    echo $prescoreResponse->getTransactionId();
}
Attribute Pflicht Format Werte Info
responsetype + string PRESCORE Name des Requests zu dem die Response gehört
errorcode + non-negative int N..3 Fehlercode. Der Standardwert ist “0” und bedeutet kein Fehler. Auflistung der Fehlercodes
merchantmessage + string Detaillierte Fehlermeldung für den Händler
customermessage + string Fehlermeldung für den Kunden zur Anzeige im Frontend
developermessage + string Detaillierte Fehlermeldung für den Entwickler, der mögliche XSD-Validierungsfehler benennt. Bei fehlerfreier Verarbeitung wird das Feld nicht befüllt.
status - string APPROVED / DENIED Ergebnis der Identitäts- und Bonitätsprüfung. Im Falle eines Validierungsfehlers, wird das Feld nicht befüllt. In diesem Fall kann der Kunde seine Eingabe korrigieren.
transactionid - string AN..50 Eindeutige BillPay Transaktionsnummer

Corrected Address-Knoten (Normalisierte Kundenadresse)

Dieser Knoten enthält die normalisierte Kundenadresse.

<corrected_address
        street="Zinnowitzer Str."
        streetnumber="1"
        zipcode="10115"
        city="Berlin"
        country="DEU" />
System.out.println(requestResponse.getCorrectedAddress().getStreet());
System.out.println(requestResponse.getCorrectedAddress().getStreetNumber());
System.out.println(requestResponse.getCorrectedAddress().getZipCode());
System.out.println(requestResponse.getCorrectedAddress().getCity());
System.out.println(requestResponse.getCorrectedAddress().getCountry());
<?php
echo $prescoreResponse->getNormalizedAddress()->getStreet();
echo $prescoreResponse->getNormalizedAddress()->getStreetNumber();
echo $prescoreResponse->getNormalizedAddress()->getZipCode();
echo $prescoreResponse->getNormalizedAddress()->getCity();
echo $prescoreResponse->getNormalizedAddress()->getCountry();
Attribute Pflicht Format Werte Info
street + string AN..50 Normalisierter Straßenname
streetnumber + string AN..15 Normalisierte Hausnummer
zipcode + string AN..7 Normalisierte Postleitzahl
city + string AN..50 Normalisierter Ort
country + string A..3 Normalisierter Ländercode (z.B. “DEU”): ISO3166 (alpha-3)

Customer Restriction-Knoten (Optional)

Dieser Knoten ist optional und benennt kundenspezifische Restriktionen (auf Grundlage der im Request enthaltenen Auftragsdaten), beispielsweise bezüglich der möglichen Versandart. Die Nutzung ist durch BillPay freizuschalten.

<customer_restriction
        shippingtypeobligation="IDENTITY_SHIPPING" />  
System.out.println(requestResponse.getCustomerRestriction().getShippingTypeObligation());
<?php
echo $prescoreResponse->getCustomerRestriction();
Attribute Pflicht Format Werte Info
shippingtypeobligation - string AN..50 Restriktionen hinsichtlich der Versandart

Allowed Methods-Knoten

Dieser Knoten enthält die erlaubten Zahlarten im Falle einer positiven Antwort. Jede Zahlart hat einen eigenen payment_method XML-Knoten.

<allowed_methods>
    <payment_method>
      <name>
        INVOICE_B2C
      </name>
      <customer_group>
        p
      </customer_group>
      <payment_type>
        1
      </payment_type>
      <additional_data/>
    </payment_method>
    <payment_method>
      <name>
        DIRECT_DEBIT_B2C
      </name>
      <customer_group>
        p
      </customer_group>
      <payment_type>
        2
      </payment_type>
      <additional_data/>
    </payment_method>
  </allowed_methods>
System.out.println(requestResponse.getAllowedPaymentOptions();
<?php
$allowed = $prescoreResponse->getAllowedPaymentMethods();
foreach($allowed as $billpaypm){
    echo $billpaypm->getCustomerGroup();
    echo $billpaypm->getPaymentId();
    echo $billpaypm->getName();
}
Attribute Pflicht Format Werte Info
name + String AN..50 Bezeichnung der Zahlart
customer_group + String A..1 Kundengruppe
p: Privatkunde (B2C)
b: Business /Geschäftskunde (B2B)
payment_type + String N..1 Kenner der jeweiligen Zahlart
1: Rechnung
2: Lastschrift
3: Ratenkauf CHE
4: PayLater

Preauthorize

Mit dem Preauthorize-Request übermitteln Sie alle erforderlichen Informationen (Kundendaten und Warenkorbdaten) an BillPay um die Identitäts- und Bonitätsprüfung bei BillPay anzustoßen. Das Ergebnis der Identitäts- und Bonitätsprüfung (“APPROVED” oder “DENIED”) wird an Ihr System in Echtzeit zurückgespielt. Bei Ablehnung “DENIED” kann der Kunde nicht mit BillPay bezahlen und die BillPay Zahlarten sind auszublenden.

Sofern der Parameter manualcapture = 0 gesetzt ist, wird die Bestellung unter der eindeutigen Bestellnummer (reference) angelegt – positives Ergebnis der Identitäts- und Bonitätsprüfung vorausgesetzt. Aus juristischer Sicht wird in diesem Moment die Forderung gegenüber dem Kunden, die sich aus der Bestellung ergibt, an BillPay abgetreten.

Request

Data-Knoten

<data
        requesttype="PREAUTHORIZE"
        tcaccepted="1"
        expecteddaystillshipping="0"
        manualcapture="0"
        paymenttype="1"
        apiversion="2.0.0"
        originofsale="o">
    <!-- additional Request specific data -->
</data>
preauthorizeRequest preauthorizeRequest = new PreauthorizeRequest();
preauthorizeRequest
    .setTermsAndConditionAccepted(true)
    .setManualCapture(false)
    .setOriginOfSale(OriginOfSale.ONLINE_SHOP);

preauthorizeRequest.getPaymentDetails()
    .setPaymentType(PaymentType.INVOICE);  

preauthorizeRequest.getShipping()
    .setDaysTillShipping(0);     
<?php
use BillPay\Core\Commons\Constants;
use BillPay\Core\Requests\PreauthorizeFactory;

$preauthorizeRequest = preauthorizeRequest::create();
$preauthorizeRequest->payment()->setById(Constants::PAYMENT_METHOD_ID_INVOICE);
$payment = $preauthorizeRequest->getPaymentMethod();
$payment->getPaymentMethod()
            ->acceptTermsOfUse();
$preauthorizeRequest
    ->setOriginOfSaleOnline()
    ->disableManualCapture();
Attribute Pflicht Format Werte Info
requesttype + string PREAUTHORIZE Name des Requests
tcaccepted + boolean 0/1 Kenner, ob die BillPay AGB und Datenschutzbestimmungen vom Kunden akzeptiert wurden.
expecteddaystillshipping + non-negative int Anzahl Tage bis zum Warenversand
manualcapture + boolean 0/1 Gibt an, ob ein separater Capture-Request erfolgt (1), oder ob das Anlegen einer Bestellung direkt beim Preauthorize-Request erfolgen soll (0).
paymenttype + positive int N..1 Kenner der gewünschten Zahlart
1: Rechnung
2: Lastschrift
3: Ratenkauf CHE
4: PayLater
apiversion + string 2.0.0 BillPay API Version
originofsale + string A..1 Kennzeichnet den Vertriebskanal
u: Unknown
o: Online Shop
p: Offline / POS
t: Telesales / Call Center

Default Params-Knoten (Händler Zugangsdaten)

Ihre Händler-Zugangsdaten werden Ihnen durch BillPay zur Verfügung gestellt.

<default_params
        mid="1234"
        pid="9999"
        passwordhash="25d55ad283aa400af464c76d713c07ad" />
preauthorizeRequest
    .setMerchantId(1234)
    .setPortalId(9999)
    .setApiPassword("clear text password")
    .setSessionId("clear text session id");
<?php
$preauthorizeRequest
    ->setMerchantId(1234)
    ->setPortalId(9999)
    ->setApiPassword('clear text password')
    ->setSessionId('clear text session ID');
Attribute Pflicht Format Info
mid + positive int Händler ID
pid + positive int Portal ID
passwordhash + string MD5 Hash des Passworts, welches Sie von BillPay erhalten haben

Preauth Params

Dieser Knoten ist nur dann erforderlich, wenn Ihr Portal unsere “Prescoring” Anfrage nutzt. Wenn Sie Prescoring vertraglich nicht vereinbart haben, können Sie diesen Knoten ignorieren.

<preauth_params
        isprescored="1"
        transactionid="1aa2fb2d-2b78-4393-bf06-be0012dda337" />
preauthorizeRequest
    .setPrescore("true", "1aa2fb2d-2b78-4393-bf06-be0012dda337");
<?php
$preauthorizeRequest
    ->setPrescoreTransactionId($transactionId);
Attribute Pflicht Format Werte Info
isprescored + boolean 0/1 Wert zeigt an, ob zuvor eine Prescore Anfrage gesendet wurde.
0: Kein Prescore
1: Prescore wurde gesendet

Hinweis: Prescoring muss für Ihr Portal gesondert freigeschaltet werden.
transactionid + string AN…50 BillPay Transaktionsnummer

Die Transaktionsnummer wird in der Response auf die Prescore Anfrage an Sie übermittelt. Die Transaktionsnummer dient dazu, die Prescore und Preauthorize-Request einander zu zuordnen.

Customer Details-Knoten (Rechnungsadresse des Kunden)

<customer_details
        customerid="123456"
        customertype="e"
        salutation="Herr"
        title=""
        firstname="Thomas"
        lastname="Testkunde"
        street="Tinnowitzer Straße 1"
        streetnumber=""
        addressaddition=""
        zipcode="10115"
        city="Berlin"
        country="DEU"
        email="anyone@anymail.de"
        phone="03012345678"
        cellphone=""
        dateofbirth="19741012"
        language="de"
        ipaddress="80.111.120.1"
        customergroup="p" />
preauthorizeRequest.getCustomer()
    .setId("123456")
    .setCustomerType(CustomerType.EXISTING_CUSTOMER)
    .setCustomerGroup(CustomerGroup.PRIVATE_CLIENT)
    .setDateOfBirth(new SimpleDateFormat("yyyy/MM/dd").parse("1974/10/12"))
    .setEmail("anyone@anymail.de")
    .setIpAddress("80.111.120.1")
    .setLanguageIso2("de")
    .getBillingAddress()
        .setSalutation("Herr")
        .setFirstName("Thomas")
        .setLastName("Testkunde")
        .setStreet("Tinnowitzer Straße")
        .setStreetNumber("1")
        .setZipCode("10115")
        .setCity("Berlin")
        .setCountryIso3("DEU")
        .setPhone("03012345678");
<?php
$customer = $preauthorizeRequest->getCustomer();
$customer->setId('123456')
    ->setIsExistingCustomer()
    ->setIsPrivateCustomer()
    ->setDateOfBirth('1975-10-12')
    ->setEmail('anymail@gmx.de')
    ->setIpAddress('80.111.120.1')
    ->setLanguageIso2('de')
    ->getBillingAddress()
        ->setSalutation('Herr')
        ->setFirstName('Thomas')
        ->setLastName('Testkunde')
        ->setStreet('Tinnowitzer Straße')
        ->setStreetNumber('1')
        ->setZipCode('10115')
        ->setCity('Berlin')
        ->setCountryIso3('DEU')
        ->setPhone('03012345678');
Attribute Pflicht Format Werte Info
customerid - string AN..40 Kundennummer aus dem Händler-System (Zulässige Zeichen:
0-9, a-z, A-Z, .,-,_,/). Die übergebene Kundennummer wird auf Ihrer Händlerabrechnung aufgeführt.
customertype - string A..1 Kundentyp
g: Gast
e: Existierender Kunde/Bestandskunde
n: Neukunde
salutation + string Anrede
Default: siehe Addendum Salutations
title - string AN..20 Titel (z.B. “Dr.” oder “Prof. Dr.”)
firstname + string AN..40 Vorname
lastname + string AN..40 Nachname
street + string AN..40 Straße
streetnumber - string AN..7 Hausnummer
addressaddition - string AN..40 Adresszusatz
zipcode + string AN..7 Postleitzahl
city + string AN..40 Ort
country + string A..3 Kundenland (z.B. “DEU”): ISO3166 (alpha-3)
email + string AN..40 (ausgenommen sind ungültige Sonderzeichen) E-Mail-Adresse
phone -* string AN..40 Telefonnummer
cellphone - string AN..40 Handynummer
dateofbirth + string YYYYMMDD Geburtsdatum - optional für B2B-Kunden
language + string A..2 Kundensprache (z.B. “de”): ISO3166-1 (alpha-2)
ipaddress + string IPv4 oder IPv6 (IPv4-Embedded IPv6 Adresse) Kunden IP Adresse. Lokale IP-Adressen sind nicht zugelassen.
customergroup + string A..1 Kundengruppe
p: Privatkunde/Endkunde (B2C)
b: Business/Geschäftskunde (B2B)

*phone ist ein Pflichtfeld, falls:
1) es sich um die Zahlart PayLater paymenttype =4 handelt,
2) bei der Zahlart Rechnung (paymenttype = “1”) wenn das Kundenland Niederlande ist und
3) zahlartübergreifend bei Kunden aus der Schweiz.

Shipping Details-Knoten (Lieferanschrift)

Dieser Knoten beinhaltet wahlweise den Parameter usebillingaddress =1 (true), oder alternativ die vollständige abweichende Lieferanschrift.

<shipping_details
        usebillingaddress="1"
        salutation=""
        title=""
        firstname=""
        lastname=""
        street=""
        streetnumber=""
        addressaddition=""
        zipcode=""
        city=""
        country=""
        phone=""
        cellphone="" />
preauthorizeRequest.getCustomer().createShippingAddress()
    .setSalutation("Herr")
    .setFirstName("Thomas")
    .setLastName("Testkunde")
    .setStreet("Tinnowitzerstrasse")
    .setStreetNumber("1")
    .setZipCode("10115")
    .setCity("Berlin")
    .setCountryIso3("DEU")
    .setPhone("03012345678");
<?php
/* 
if the shipping address is the same as the billing address, you do not need to do anything here.  If the shipping address is not the same as the billing address, the shipping address is set as follows:
*/
$customer->getShippingAddress()
    ->setSalutation('Herr')
    ->setFirstName('Thomas')
    ->setLastName('Testkunde')
    ->setStreet('Hardenberger Straße')
    ->setStreetNumber('1')
    ->setZipCode('10623')
    ->setCity('Berlin')
    ->setCountryIso3('DEU')
    ->setPhone('03012345678');
Attribute Pflicht Format Werte Info
usebillingaddress + boolean 0/1 Rechnungsanschrift gleicht der Lieferanschrift des Kunden
0: Abweichende Lieferanschrift existent
1: Rechnungsanschrift als Lieferadresse nutzen
salutation - string Anrede
Default: Siehe Addendum Salutations
title - string AN..20 Titel (z.B. “Dr.” oder “Prof. Dr.”)
firstname - string AN..40 Vorname
lastname - string AN..40 Nachname
street - string AN..40 Straße
streetnumber - string AN..7 Hausnummer
addressaddition - string AN..40 Adresszusatz
zipcode - string AN..7 Postleitzahl
city - string AN..40 Ort
country - string A..3 Kundenland (z.B. “DEU”): ISO3166 (alpha-3)
phone - string AN..40 Telefonnummer
cellphone - string AN..40 Handynummer

Company Details Knoten (Details zu Geschäftskunden)

Sollten Sie Ihre Ware an Geschäftskunden verkaufen (`customertype´ = “b”), müssen in diesem Knoten alle Details zum Geschäftskunden übergeben werden.

<company_details
        name="Testfirma"
        legalform="GmbH"
        registernumber="HRB 122 029 B"
        holdername="Testinhaber Owner"
        taxnumber="DE268874183" />
preauthorizeRequest.getCustomer().createCompany()
    .setName("Testfirma")
    .setLegalForm("GmbH")
    .setRegisterNumber("HRB 122 029 B")
    .setTaxNumber("DE268874183")
    .setCompanyProprietor("Testinhaber Owner");
<?php
$company = $customer->getCompany();
$company->setLegalFormGmbh()
    ->setName('Testfirma')
    ->setRegisterNumber('HRB 122 029 B')
    ->setCompanyProprietor('Testinhaber Owner')
    ->setTaxNumber('DE268874183');
Attribute Pflicht Format Werte Info
name + string AN..200 Name der Firma
legalform + string Rechtsform der Firma
Vorgabe siehe Glossar legalform
registernumber - string AN..20 Handelsregisternummer/Firmenbuch
holdername - string AN..100 Name des Inhabers der Firma
taxnumber - string gültige UStIdNr. (DEXXXXXXXXX)

Article Data-Knoten (Warenkorbpositionen)

Im article_data-Knoten werden alle Informationen rund um die in der Bestellung enthaltenen Warenkorbpositionen abgebildet. Pro einzigartigem Artikel wird ein article-Knoten gesetzt.

<article_data>
    <article 
        articleid="1234" 
        articlequantity="2" 
        articletype="0" 
        articlename="Shirt" 
        articlecategory="Clothing" 
        articlesubcategory1="Van Laack" 
        articlepricenet="10084" 
        articlepricegross="12000" />
    <article
        articleid="2345" 
        articlequantity="1" 
        articletype="0" 
        articlename="Hose" 
        articlecategory="Clothing" 
        articlesubcategory1="Ralph Lauren"  
        articlepricenet="16807" 
        articlepricegross="20000" />
</article_data>
preauthorizeRequest.getCart().createAndAddArticle()
    .setId("1234")
    .setQuantity(2)
    .setType(ArticleType.OTHER)
    .setName("Shirt")
    .setCategory("Clothing")
    .setFirstSubCategory("Van Laack")
    .setPriceNet(10084)
    .setPriceGross(12000);

preauthorizeRequest.getCart().createAndAddArticle()
    .setId("2345")
    .setQuantity(1)
    .setType(ArticleType.OTHER)
    .setName("Hose")
    .setCategory("Clothing")
    .setFirstSubCategory("Ralph Lauren")
    .setPriceNet(16807)
    .setPriceGross(20000);    
<?php
$cart = $preauthorizeRequest->getCart();
$cart->createAndAddArticle()->setName('Shirt')
    ->setPriceGross('12000')
    ->setPriceNet('10084')
    ->setQuantity('2')
    ->setCategory('Clothing')
    ->setFirstSubCategory('Van Laack')
    ->setId('1234');
$cart->createAndAddArticle()->setName('Hose')
    ->setPriceGross('20000')
    ->setPriceNet('16807')
    ->setQuantity('1')
    ->setCategory('Hose')
    ->setFirstSubCategory('Ralph Lauren')
    ->setId('2345');  
Attribute Pflicht Format Werte Info
articleid + string AN..20 Eindeutige Artikel-ID für die Warenkorbposition
articlename + string AN..50 Artikelname
articletype + non-negative int N..1 Klassifizierung der Artikelpositionen. Default = 0
articlequantity + positive int N..7 Menge des Artikels im Warenkorb
articlepricenet + int N..7 Nettopreis des Artikels in kleinster Währungseinheit (1,00 EUR = 100)
articlepricegross + int N..7 Bruttopreis des Artikels in kleinster Währungseinheit (1,00 EUR = 100)
articlecategory - string AN..50 Artikelkategorie
articlesubcategory1 - string AN..50 Artikel-Unterkategorie 1
articlesubcategory2 - string AN..50 Artikel-Unterkategorie 2

Bank Account-Knoten (Bankverbindung des Kunden)

Die Bankdaten werden nur für die Zahlarten Lastschrift und PayLater benötigt. Dies ist der Fall, wenn der Parameter payment_type die Werte “2” oder “4” enthält. Andernfalls werden die Bankdaten ignoriert.

<bank_account
        accountholder="Thomas Testkunde"
        accountnumber="DE12500105170648489890"
        sortcode="" />
preauthorizeRequest.getPaymentDetails()
     .createBankAccount()
     .setAccountHolder("Thomas Testkunde")
     .setAccountNumber("DE12500105170648489890");
<?php
$preauthorizeRequest->getBankAccount()
            ->setAccountHolder('Thomas Testkunde')
            ->setAccountNumber('DE12500105170648489890')
            ->setSortCode('');
Attribute Pflicht Format Werte Info
accountholder + (wenn paymentType in {2,4) string AN..100 Vor- und Nachname des Kontoinhabers
accountnumber + (wenn paymentType in {2,4}) int AN..30 IBAN - International Bank Account Number
sortcode + (wenn paymentType in {2,4} UND die IBAN nicht mit DE beginnt) int AN..11 BIC - Bank Identifier Code

Total-Knoten

Der total-Knoten beinhaltet die Gesamtbeträge und die Auftragsnummer, sowie weitere Auftragskopfdaten.

<total
        shippingname="Express Versand"
        shippingpricenet="840"
        shippingpricegross="1000"
        rebatenet="1681"
        rebategross="2000"
        orderamountnet="36134"
        orderamountgross="43000"
        currency="EUR"
        reference="1519088641"
        merchantinvoicenumber="1234567"
        trackingnumber="ABZ12398892131" />
preauthorizeRequest.getShipping()
    .setName("Express Versand")
    .setPriceNet(840)
    .setPriceGross(1000)
    .setTrackingNumber("ABZ12398892131");
preauthorizeRequest.getCart()
     .setOrderAmountNet(36134)
     .setOrderAmountGross(43000)
     .setCurrencyIso3("EUR")
     .setReference("1519088641")
     .setInvoiceNumber("1234567")
     .createAndAddRebate()
        .setRebateNet(1681)
        .setRebateGross(2000);
<?php
$shipping = $preauthorizeRequest->getShipping();
$shipping->setPriceGross('1000')
    ->setPriceNet('840')
    ->setTrackingNumber('123456')
    ->setName('Express Versand');

$rebate = $cart->createRebate();
$rebate->setPriceGross('2000')
    ->setPriceNet('1681');
$cart->setOrderAmountGross('43000')
    ->setOrderAmountNet('36134')
    ->setCurrencyIso3('EUR')
    ->addRebate($rebate); 
Attribute Pflicht Format Werte Info
shippingname + string AN..50 Versandart (z.B. “DHL”, “DPD” etc..)
shippingpricenet + non-negative int N..7 Nettowert (ohne Steuer) aller (Liefer-) Gebühren (z.B. Versand, Expresszuschläge, etc.).
Falls nicht gegeben bitte mit 0 belegen.
shippingpricegross + non-negative int N..7 Bruttowert (mit Steuer) aller (Liefer-) Gebühren (z.B. Versand, Expresszuschläge).
Falls nicht gegeben bitte mit 0 belegen.
rebatenet + non-negative int N..7 Positiver Nettowert (ohne Steuer) aller Rabatte, Coupons und sonstiger betragsmindernder Posten in kleinster Währungseinheit (1,00 EUR = 100).
Falls nicht gegeben bitte mit 0 belegen.
rebategross + non-negative int N..7 Positiver Bruttowert (mit Steuer) aller Rabatte, Coupons und sonstiger betragsmindernder Posten in kleinster Währungseinheit (1,00 EUR = 100).
Falls nicht gegeben bitte mit 0 belegen.
orderamountnet + positive int N..7 Nettowert (ohne Steuer) der Bestellung in kleinster Währungseinheit (1,00 EUR = 100)
[(articlequantity * articlepricenet) + shippingpricenet – rebatenet]
orderamountgross + positive int N..7 Bruttowert (mit Steuer) der Bestellung in kleinster Währungseinheit (1,00 EUR = 100)
[(articlequantity * articlepricegross) + shippingpricegross – rebategross]
currency + string A..3 3-stelliger Währungscode (z.B. “EUR”): ISO4217
reference - string AN..40 Eindeutige Bestell-ID aus dem Händlersystem. Diese Nummer wird als Kenner in der Abrechnungsdatei verwendet, sowie nachfolgende Anfragen zur Bearbeitung eines Auftrags.
Zulässige Zeichen:
0-9, a-z, A-Z, -,

Regex:
([A-Z]|[a-z]|[0-9]|-|
)*
merchantinvoicenumber - string AN..40 Rechnungsnummer aus dem Händler-System
Zulässige Zeichen:
0-9, a-z, A-Z, -, , #, ., :

Regex:
([A-Z]|[a-z]|[0-9]|-|
|#|:|.)*
trackingnumber - string AN..40 Tracking ID für den Versand dieses Auftrags (falls bereits bekannt)

Fraud Detection-Knoten zur Betrugsprävention

In diesem Knoten wird die für die Session des Kunden vergebene einzigartige ID übergeben. Dies dient der Bekämpfung von Betrug in Ihrem Shop, indem verdächtige Kunden/Sessions ermittelt und gefiltert werden. Das Tool zur Betrugsprävention ist korrekt eingebunden, wenn der Wert der Session ID mit dem Identifier im JavaScript Widget übereinstimmt.

<fraud_detection sessionid="97d3d1b1cc6b0686bbc1f19feec80e6c" />
    preauthorizeRequest
        .setSessionId("clear text session ID");
<?php
$preauthorizeRequest->setSessionId('session id'); 
Attribute Pflicht Format Werte Info
sessionid + string AN..100 Session ID der Usersitzung (muss der Session ID, welche im JavaScript Widget gesetzt wurde, entsprechen)

Rate-Request-Knoten

Für die Zahlart PayLater/Ratenkauf (paymenttype = “4” & “3” CHE) sind zusätzlich spezifische Parameter für den Teilzahlungsplan zu übergeben. Diese zusätzlichen Parameter beschreiben den Ratenplan selbst.

Der Kunde wählt im BillPay JavaScript Widget die gewünschte Laufzeitoption. Diesen Wert speichern Sie zwischen und übergeben die gewünschte Laufzeit im Preauthorize-Request an BillPay.

<rate_request ratecount="6" terminmonths="6" totalamountgross="46883" />
    preauthorizeRequest.getPaymentDetails().createInstalment()
        .setRateCount(6)
        .setTermInMonths(6)
        .setTotalAmountGross(46883);
<?php
$payment->setRateCount('6')
    ->setRateTerm('6')
    ->setTotal('46883');
Attribute Pflicht Format Werte Info
ratecount + int N..2 Anzahl der Raten, die während der Laufzeit zu zahlen sind. Entspricht dem billpay[paylater_instalments_count] Wert aus den Widget inputNames.
terminmonths + int N..2 Laufzeit des Ratenplans in Monaten. Entspricht dem billpay[paylater_duration] Wert aus den Widget inputNames.
totalamountgross + positive int N..7 Gesamtbetrag des Ratenplans inklusive Zinsen/PayLater-Gebühren. Entspricht dem billpay[paylater_total_amount] Wert aus den Widget inputNames.

Async-Capture-Request-Knoten (Anzahlungsprozess)

Für die Zahlungsarten PayLater bietet BillPay ein einzigartiges Feature: Die Anzahlung eines Teilbetrags, um das Scoring-Ergebnis positiv zu beeinflussen. Sollte ein Kunde auf Grund der Identitäts- und Bonitätsprüfung nicht zum Kauf über BillPay zugelassen worden sein, kann er/sie diese Entscheidung ggf. durch die Anzahlung via Online-Überweisung mit giropay positiv beeinflussen. In diesem Knoten übergeben Sie uns die für die Weiterleitung des Kunden relevante URL sowie die URL für die asynchrone BillPay Server-Response.

<async_capture_request>
    <redirect_url><![CDATA[http://url1.de/redirect]]></redirect_url>
    <notify_url><![CDATA[http://url1.de/notify]]></notify_url>
</async_capture_request>
    preauthorizeRequest
        .setRedirectUrl("http://url1.de/redirect")
        .setNotifyUrl("http://url1.de/notify");
<?php
$payment->setRedirectUrl('www.redirect.de')
    ->setNotifyUrl('www.notify.de');
Attribute Pflicht Format Werte Info
redirect_url + string AN Die Landingpage Ihres Shops, die den Kunden nach der Anzahlung über dessen Erfolg/Misserfolg informiert.
notify_url + string AN Händlerseitiger Webservice für das Statusupdate nach Anzahlung.

Response

Data-Knoten

Der data-Knoten enthält das Ergebnis der Bonitäts- und Identitätsprüfung durch BillPay. Zusätzlich zum Scoring-Ergebnis (APPROVED / DENIED), wird die durch BillPay vergebene eindeutige Transaktions-ID (transactionid) zurückgespielt.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<data
        responsetype="PREAUTHORIZE"
        errorcode="0"
        customermessage=""
        merchantmessage=""
        developermessage=""
        status="APPROVED"
        transactionid="1aa2fb2d-2b78-4393-bf06-be0012dda337">
    <!-- additional response specific data -->
</data>
System.out.println(requestResponse.getErrorCode());
System.out.println(requestResponse.getMerchantMessage());
System.out.println(requestResponse.getDeveloperMessage());
System.out.println(requestResponse.getCustomerMessage());
System.out.println(requestResponse.getAuthorizationStatus());
System.out.println(requestResponse.getTransactionId());
<?php
// send the request to BillPay and retrieve the response
$preauthorizeResponse = $preauthorizeRequest->send();

// get data out of the response
if ($preauthorizeResponse->isError()) {
    echo $preauthorizeResponse->getStatus();
    echo $preauthorizeResponse->getErrorCode();
    echo $preauthorizeResponse->getMerchantMessage();
    echo $preauthorizeResponse->getDeveloperMessage();
    echo $preauthorizeResponse->getCustomerMessage();
} else {
    echo $preauthorizeResponse->getStatus();
    echo $preauthorizeResponse->getTransactionId();
}
Attribute Pflicht Format Werte Info
responsetype + string PREAUTHORIZE Name des Requests zu dem die Response gehört
errorcode + non-negative int N..3 Fehlercode. Der Standardwert ist “0” und bedeutet kein Fehler. Auflistung der Fehlercodes
merchantmessage + string Detaillierte Fehlermeldung für den Händler
customermessage + string Fehlermeldung für den Kunden zur Anzeige im Frontend
developermessage + string Detaillierte Fehlermeldung für den Entwickler, der mögliche XSD-Validierungsfehler benennt. Bei fehlerfreier Verarbeitung wird das Feld nicht befüllt.
status - string APPROVED / DENIED Ergebnis der Identitäts- und Bonitätsprüfung. Im Falle eines Validierungsfehlers, wird das Feld nicht befüllt. In diesem Fall kann der Kunde seine Eingabe korrigieren.
transactionid - string AN..50 Eindeutige BillPay Transaktionsnummer

Corrected Address-Knoten (Normalisierte Kundenadresse)

Dieser Knoten enthält die normalisierte Kundenadresse.

<corrected_address
        street="Zinnowitzer Str."
        streetnumber="1"
        zipcode="10115"
        city="Berlin"
        country="DEU" />
System.out.println(requestResponse.getCorrectedAddress().getStreet());
System.out.println(requestResponse.getCorrectedAddress().getStreetNumber());
System.out.println(requestResponse.getCorrectedAddress().getZipCode());
System.out.println(requestResponse.getCorrectedAddress().getCity());
System.out.println(requestResponse.getCorrectedAddress().getCountry());
<?php
echo $preauthorizeResponse->getNormalizedAddress()->getStreet();
echo $preauthorizeResponse->getNormalizedAddress()->getStreetNumber();
echo $preauthorizeResponse->getNormalizedAddress()->getZipCode();
echo $preauthorizeResponse->getNormalizedAddress()->getCity();
echo $preauthorizeResponse->getNormalizedAddress()->getCountry();
Attribute Pflicht Format Wert Info
street + string AN..50 Normalisierter Straßenname
streetnumber + string AN..15 Normalisierte Hausnummer
zipcode + string AN..7 Normalisierte Postleitzahl
city + string AN..50 Normalisierter Ort
country + string A..3 Normalisierter Ländercode (z.B. “DEU”): ISO3166 (alpha-3)

Customer Restriction-Knoten (Optional)

Dieser Knoten ist optional und benennt kundenspezifische Restriktionen (auf Grundlage der im Request enthaltenen Auftragsdaten), beispielsweise bezüglich der möglichen Versandart. Die Nutzung ist durch BillPay freizuschalten.

<customer_restriction
        shippingtypeobligation="DHL Ident Verfahren"/> 
System.out.println(requestResponse.getCustomerRestriction().getShippingTypeObligation());
<?php
echo $preauthorizeResponse->getCustomerRestriction();
Attribute Pflicht Format Werte Info
shippingtypeobligation - string AN..50 Restriktionen hinsichtlich der Versandart

Invoice Bank Account-Knoten (bezieht sich nur auf “Rechnung” - paymenttype = “1” und Ratenkauf Schweiz - paymenttype = “3”)

Dieser Knoten liefert die Bankverbindung von BillPay zurück, an die der Kunde überweisen soll. Die BillPay Bankverbindung ist auf der Rechnung, die der Kunde vom Händler enthält, auszudrucken. Falls es nicht möglich ist, den Verwendungszweck aus der BillPay API-Response zu übernehmen, kann der Verwendungszweck nach folgendem Schema erzeugt werden: BP/ Beispiel: BP123456789/1234 Bedeutet, dass die Auftragsnummer reference aus dem Preauthorize-Request 123456789 lautet und die durch BillPay vergebene statische Händler- ID 1234.

<invoice_bank_account
        activationperformed="0"
        accountholder="BillPay GmbH"
        accountnumber="DE07312312312312312"
        bankcode="BELADEBEXXX"
        bankname="Sparkasse Berlin"
        invoiceduedate=""
        invoicereference="BP1519088641/9999" />
System.out.println(requestResponse.getInvoiceBankAccount().isActivationPerformed());
System.out.println(requestResponse.getInvoiceBankAccount().getAccountHolder());
System.out.println(requestResponse.getInvoiceBankAccount().getAccountNumber());
System.out.println(requestResponse.getInvoiceBankAccount().getBankCode());
System.out.println(requestResponse.getInvoiceBankAccount().getBankName());
System.out.println(requestResponse.getInvoiceBankAccount().getInvoiceDueDate());
System.out.println(requestResponse.getInvoiceBankAccount().getInvoiceReference());
<?php
$bankAccount = $preauthorizeResponse->getInvoiceBankAccount();
echo $bankAccount->isActivationPerformed();
echo $bankAccount->getAccountHolder();
echo $bankAccount->getAccountNumber();
echo $bankAccount->getBankCode();
echo $bankAccount->getBankName();
echo $bankAccount->getInvoiceDueDate();
echo $bankAccount->getInvoiceReference();
echo $bankAccount->getEsrReference();
echo $bankAccount->getEsrCodeLine();
Attribute Pflicht Format Werte Info
activationperformed + boolean 0/1 Gibt zurück, ob die Bestellung aktiviert wurde (das Zahlungsziel gesetzt wurde)
accountholder + string AN..255 Kontoinhaber/Begünstigter
accountnumber + string AN..40 BillPay IBAN - International Bank Account Number
bankcode + string AN..16 BillPay BIC - Bank Identifier Code
bankname + string AN..255 Name der BillPay Bank
invoiceduedate + string N..8 Fälligkeitsdatum im Format: YYYYMMDD
invoicereference + string AN..255 Verwendungszweck
esrreference - string AN Referenz-Nummer für den Schweizer orange Einzahlungsschein
esrcodeline - string AN ESR Codeline für den Schweizer orange Einzahlungsschein

Invoice Numbers-Knoten

Für den Ausnahmefall, dass BillPay die Kundenrechnung generiert und versendet, liefert der Knoten die Rechnungsnummer an den Händler zurück.

<assigned_invoice_number>
    <invoice_number
        invoiceid="REBP1234/1700186R1"
        billpayinvoicenumber="1519088641#1" />
</assigned_invoice_number>        
InvoiceNumber invoiceNumber = requestResponse.getInvoiceNumbers().get(0);

System.out.println(invoiceNumber.getBillpayInvoiceNumber());
System.out.println(invoiceNumber.getInvoiceId());
<?php
$invoiceNumber = $preauthorizeResponse->getInvoiceNumbers();
echo $invoiceNumber->getInvoiceId();
echo $invoiceNumber->getBillpayInvoiceNumber();
Attribute Pflicht Format Werte Info
invoice_number + Unterknoten des assigned_invoice_number-Knotens
  ↳invoiceid + string AN..255 Eindeutige Rechnungsnummer, die auf der Kundenrechnung ausgedruckt ist.
  ↳billpayinvoicenumber + string AN..40 Interne BillPay-Rechnungs-/Forderungsnummer
Zeichen:
0-9, a-z, A-Z, -, , #, ., :

Regex:
([A-Z]|[a-z]|[0-9]|-|
|#|:|.)*

Instalment Details-Knoten (betrifft nur Ratenzahlung (paymenttype = “3”) und PayLater (paymenttype = “4”))

In diesem Knoten gibt BillPay alle relevanten Informationen zur Ratenzahlung zurück.

Paylater (paymenttype = “4”)

<instalment_details>
    <instl_plan numinst="6">
        <calc>
            <duration_in_months>
                6
            </duration_in_months>
            <fee_percent>
                6.00
            </fee_percent>
            <fee_total>
                2520
            </fee_total>
            <total_pymt>
                45520
            </total_pymt>
            <eff_anual>
                24.21
            </eff_anual>
            <nominal>
                20.57
            </nominal>
        </calc>
        <instl_list>
            <instl date="20160531" type="immediate">
                3520
            </instl>
            <instl date="20160630" type="first">
                7000
            </instl>
            <instl date="20160731" type="date">
                7000
            </instl>
            <instl date="20160831" type="date">
                7000
            </instl>
            <instl date="20160930" type="date">
                7000
            </instl>
            <instl date="20161031" type="date">
                7000
            </instl>
            <instl date="20161130" type="date">
                7000
            </instl>
        </instl_list>
    </instl_plan>
</instalment_details>
InstalmentPlan instalmentPlan = requestResponse.getInstalmentDetails().getInstalmentPlan();
System.out.println(instalmentPlan.getDurationInMonths());
System.out.println(instalmentPlan.getFeePercent());
System.out.println(instalmentPlan.getFeeTotal());
System.out.println(instalmentPlan.getTotalPayment());
System.out.println(instalmentPlan.getEffAnual());
System.out.println(instalmentPlan.getNominal());

InstalmentItem instalmentItem = instalmentPlan.getInstalmentList().get(0);
System.out.println(instalmentItem.getAmount());
System.out.println(instalmentItem.getDate());
System.out.println(instalmentItem.getType());
<?php
$instalmentDetails = $preauthorizeResponse->getInstalmentDetails();
echo $instalmentDetails->getDurationInMonth();
echo $instalmentDetails->getFeePercentage();
echo $instalmentDetails->getFee();
echo $instalmentDetails->getTotalAmount();
echo $instalmentDetails->getAnnualPercentageRate();
echo $instalmentDetails->getNominalPercentageRate();
$instalments = $instalmentDetails->getInstalments();
echo $instalments[0]->getAmount();
echo $instalments[0]->getDateString();
echo $instalments[0]->getType();
Attribute Pflicht Format Werte Info
instl_plan + Parent-Knoten – wird nur für paymenttype = “4” (PayLater/Ratenzahlung) erzeugt
numinst + positive int N Ratenanzahl
calc + Unterknoten des instl_plan-Knotens
  ↳duration_in_months + int N Laufzeit des Ratenplans in Monaten
  ↳fee_percent + decimal PayLater-Gebühr in Prozent (%)
zwischen 0.00 und 100.00
  ↳fee_total + non-negative int N Gesamt PayLater-Gebühr
  ↳total_pymt + positive int N Gesamtbetrag der Bestellung inklusive PayLater-Gebühren
  ↳eff_anual + decimal Effektiver Jahreszins in Prozent (%)
zwischen 0.00 und 100.00
  ↳nominal + decimal Nominalzinssatz in Prozent (%)
zwischen 0.00 und 100.00
instl_list +-Knoten Unterknoten des instl_plan-Knotens
  ↳instl +-Knoten Unterknoten des instl_list-Knotens
      ↳date + DATE YYYYMMDD Fälligkeitsdatum der Rate/Gebühr
      ↳type + string AN Gebühren- bzw. Ratentyp (“immediate”, “first”, “date”, “fee”)

Ratenzahlung (paymenttype = “3”)

<instalment_details>
    <option ratecount="6" term="6">
      <calculation>
        <base>
          14345
        </base>
        <cart>
          14444
        </cart>
        <surcharge>
          420
        </surcharge>
        <intermediate>
          14765
        </intermediate>
        <total>
          15039
        </total>
        <interest>
          49
        </interest>
        <anual>
          1542
        </anual>
        <fee>
          175
        </fee>
      </calculation>
      <dues>
        <due date="" type="first">
          2739
        </due>
        <due date="" type="following">
          2460
        </due>
        <due date="" type="date">
          2460
        </due>
        <due date="" type="date">
          2460
        </due>
        <due date="" type="date">
          2460
        </due>
        <due date="" type="date">
          2460
        </due>
      </dues>
    </option>
</instalment_details>
RateOption rateOption = requestResponse.getInstalmentDetails().getRateOption();
System.out.println(rateOption.getRateCount());
System.out.println(rateOption.getTerm());
System.out.println(rateOption.getCalculationBaseAmount());
System.out.println(rateOption.getCartTotalGross());
System.out.println(rateOption.getSurcharge());
System.out.println(rateOption.getTotalPaymentAmount());
System.out.println(rateOption.getMonthlyInterestRate());
System.out.println(rateOption.getAnualInterestRate());
System.out.println(rateOption.getAdditionalFee());

DueDetail dueDetail = rateOption.getDueDetailsList().get(0);
System.out.println(dueDetail.getAmount());
System.out.println(dueDetail.getDate());
System.out.println(dueDetail.getRateType());
<?php
$instalmentDetails = $preauthorizeResponse->getInstalmentDetails();
echo $instalmentDetails->getInstalmentCount();
echo $instalmentDetails->getDurationInMonth();
echo $instalmentDetails->getBase();
echo $instalmentDetails->getCart();
echo $instalmentDetails->getSurcharge();
echo $instalmentDetails->getTotalAmount();
echo $instalmentDetails->getAnnualPercentageRate();
echo $instalmentDetails->getNominalPercentageRate();
$instalments = $instalmentDetails->getInstalments();
echo $instalments[0]->getAmount();
echo $instalments[0]->getDateString();
echo $instalments[0]->getType();
Attribute Pflicht Format Werte Info
option + Parent-Knoten – wird nur für paymenttype=“3” erzeugt
ratecount + positive int N Ratenanzahl
terminmonths + positive int N Laufzeit des Ratenplans in Monaten
calculation + Unterknoten des option-Knotens
  ↳base + positive int N Basisbetrag für die Finanzierung (Auftragswert ohne Versandkosten oder sonstige Gebühren)
  ↳cart + positive int N Gesamtbetrag der Bestellung inklusive Versandkosten, jedoch ohne Finanzierungsgebühren
  ↳surcharge + positive int N Kalkulierter Zinsaufschlag der Finanzierung (in kleinster Währungseinheit z.B. 100,00 Euro = 10000)
  ↳intermediate + positive int N Gesamtbetrag der Bestellung inklusive Finanzierungsgebühren (in kleinster Währungseinheit z.B. 100,00 Euro = 10000)
  ↳total + positive int N Gesamtbetrag der Bestellung (Brutto) inklusive Versandkosten und Finanzierungsgebühren (in kleinster Währungseinheit z.B. 100,00 Euro = 10000)
  ↳interest + positive int N Monatlicher Zinssatz in % (e.g: 59 = 0.59%)
  ↳anual + positive int N Jährliche Zinsrate in % (z.B: 1614 = 16,14%)
  ↳fee + positive int N Gebühr, die BillPay für diese Transaktion erhebt (in kleinster Währungseinheit z.B. 100,00 Euro = 10000)
dues + Unterknoten des option-Knotens
  ↳due + N…7 Gesamtwert der Rate (in kleinster Währungseinheit z.B. 100,00 Euro = 10000)
      ↳date + DATE YYYYMMDD Fälligkeitsdatum der Rate
      ↳type + string AN Gebühren- bzw. Ratentyp (“immediate”, “first”, “date”, “fee”)

Async Capture Parameters-Knoten – ausschließlich für PayLater

Dieser Knoten liefert die erforderlichen Links und Redirects für die Implementierung des Anzahlungsprozesses via Giropay.

<async_capture_params>
    <rate_plan_url></rate_plan_url>
    <external_redirect_url></external_redirect_url>
</async_capture_params>        
System.out.println(requestResponse.getForwardingDetails().getRatePlanUrl());
System.out.println(requestResponse.getForwardingDetails().getExternalRedirectUrl());
Attribute Pflicht Format Werte Info
rate_plan_url + string AN..255 Link zum Ratenplan.
external_redirect_url + string AN..40 Externer Link zu Giropay um die Anzahlung zu tätigen.

Campaign-Knoten (ausschließlich für PayLater und Anzahlung via Giropay relevant)

Dieser Knoten liefert die notwendigen Informationen zur Anzeige in Ihrem Shop, welche PayLater-Bestellung unter Voraussetzung einer Anzahlung via Giropay akzeptiert wurde.

<campaign>
    <type></type>
    <display_text></display_text>
    <display_image_url></display_image_url>
</campaign>        
System.out.println(requestResponse.getForwardingDetails().getType());
System.out.println(requestResponse.getForwardingDetails().getDisplayText());
System.out.println(requestResponse.getForwardingDetails().getImageUrl());
Attribute Pflicht Format Werte Info
type + string AN..255 Benennt, wofür der Text und das Bild stehen.
display_text + string AN Text zur Anzeige im Frontend um den Kunden über die Anzahlungsoption zu informieren
display_image_url + string AN Bild zur Anzeige im Frontend um den Kunden über die Anzahlungsoption zu informieren

Capture

Der Capture-Request wird verwendet, um die Bestellanfrage final abzuschließen. Dies ist beim 2-stufigen Bestellprozess erforderlich, bei dem im Preauthorize-Request das Attribut manualcapture auf “1” gesetzt wurde. Bei manualcapture=1 wird ein separater Capture-Request erwartet, welcher die Bestellung abschließt. Aus juristischer Sicht wird in diesem Moment die Forderung gegenüber dem Kunden, die sich aus der Bestellung ergibt, an BillPay abgetreten.

Request

Data-Knoten

<data 
    requesttype="CAPTURE" 
    apiversion="2.0.0">
    <!-- Request Data -->
</data>
Attribute Format Werte Info
requesttype string CAPTURE Name des Requests
apiversion string 2.0.0 BillPay API Version

Default Params-Knoten (Händler Zugangsdaten)

Ihre Händler-Zugangsdaten werden Ihnen durch BillPay zur Verfügung gestellt.

<default_params
        mid="1234"
        pid="9999"
        passwordhash="25d55ad283aa400af464c76d713c07ad" />
captureRequest
    .setMerchantId(1234)
    .setPortalId(9999)
    .setApiPassword("clear text password")
Attribute Pflicht Format Info
mid + positive int Händler ID
pid + positive int Portal ID
passwordhash + string MD5 Hash des Passworts

Capture Params-Knoten

Dieser Knoten beinhaltet die eindeutige BillPay Transaktions-ID (welche in der preauthorize-Response an Sie übermittelt wurde) und Ihre neue gewünschte Auftragsnummer, unter der der Auftrag künftig prozessiert werden soll.

<capture_params
        transactionid="1aa2fb2d-2b78-4393-bf06-be0012dda337"
        orderamountgross="43230" 
        currency="EUR" 
        reference="1519088641" 
        merchantinvoicenumber="1234567"
        customerid="123456789" />
captureRequest
    .setTransactionId("1aa2fb2d-2b78-4393-bf06-be0012dda337")
    .setMerchantInvoiceNumber("1234567");

captureRequest.getCustomer()
    .setCustomerId("123456789");

captureRequest.getCart()
    .setReference("1519088641")
    .setCurrencyIso3("EUR")
    .setOrderAmountGross(43000);
Attribute Pflicht Format Werte Info
transactionid + string AN..50 Eindeutige BillPay Transaktionsnummer, welche Sie in der Response zum Preauthorize-Request erhalten haben
orderamountgross + positive int N..7 Bruttogesamtwert (inkl. MwSt.) der Bestellung in kleinster Währungseinheit (1,00 EUR = 100)
[(articlequantity * articlepricegross) + shippingpricegross – rebategross]
currency + string A..3 3-stelliger Währungscode (z.B. “EUR”): ISO4217
reference - string AN..40 Eindeutige Bestell-ID aus dem Händlersystem. Diese Nummer wird als Kenner in der Abrechnungsdatei verwendet, sowie nachfolgende Anfragen zur Bearbeitung eines Auftrags.
Zulässige Zeichen:
0-9, a-z, A-Z, -,

Regex:
([A-Z]|[a-z]|[0-9]|-|
)*
merchantinvoicenumber - string AN..40 Rechnungsnummer aus dem Händler-System
Zulässige Zeichen:
0-9, a-z, A-Z, -, , #, ., :

Regex:
([A-Z]|[a-z]|[0-9]|-|
|#|:|.)*
customerid - string AN.40 Kundennummer aus dem Händler-System (Zulässige Zeichen:
0-9, a-z, A-Z, .,-,_,/). Diese Kundennummer wird auf der Händlerabrechnung mit angegeben.

Response

Anhand der Capture-Response können Sie feststellen, ob die Bestellung bei BillPay erfolgreich abgeschlossen werden konnte. Im Erfolgsfall liefert BillPay error_code=“0” zurück. Bei einem abweichenden Fehlercode konnte die Bestellung nicht abgeschlossen werden.

Data-Knoten

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<data
        responsetype="CAPTURE"
        errorcode="0"
        customermessage=""
        merchantmessage=""
        developermessage="">
</data>
System.out.println(requestResponse.getErrorCode());
System.out.println(requestResponse.getMerchantMessage());
System.out.println(requestResponse.getDeveloperMessage());
System.out.println(requestResponse.getCustomerMessage());
Attribute Pflicht Format Werte Info
responsetype + string CAPTURE Name des Requests zu dem die Response gehört
errorcode + non-negative int N..3 Fehlercode. Der Standardwert ist “0” und bedeutet kein Fehler. Auflistung der Fehlercodes
merchantmessage + string Detaillierte Fehlermeldung für den Händler
customermessage + string Fehlermeldung für den Kunden zur Anzeige im Frontend
developermessage + string Detaillierte Fehlermeldung für den Entwickler, der mögliche XSD-Validierungsfehler benennt. Bei fehlerfreier Verarbeitung wird das Feld nicht befüllt.

Customer Restriction-Knoten (Optional)

Dieser Knoten ist optional und benennt kundenspezifische Restriktionen (auf Grundlage der im Request enthaltenen Auftragsdaten), beispielsweise bezüglich der möglichen Versandart. Die Nutzung ist durch BillPay freizuschalten.

<customer_restriction
        shippingtypeobligation="DHL Ident Verfahren"/> 
System.out.println(requestResponse.getCustomerRestriction().getShippingTypeObligation());
Attribute Pflicht Format Werte Info
shippingtypeobligation - string AN..50 Restriktionen hinsichtlich der Versandart

Invoice Bank Account-Knoten - ausschließlich für Rechnung (paymenttype=“1”) und Ratenkauf Schweiz (paymenttype=“3”)

Dieser Knoten liefert die Bankverbindung von BillPay zurück, an die der Kunde überweisen soll. Die BillPay Bankverbindung ist auf der Kundenrechnung, die der Kunde vom Händler erhält, auszudrucken. Die Rechnungsstellung erfolgt durch den Händler.

<invoice_bank_account
        activationperformed="0"
        accountholder="BillPay GmbH"
        accountnumber="DE07312312312312312"
        bankcode="BELADEBEXXX"
        bankname="Sparkasse Berlin"
        invoiceduedate=""
        invoicereference="BP1519088641/9999" />
System.out.println(requestResponse.getInvoiceBankAccount().isActivationPerformed());
System.out.println(requestResponse.getInvoiceBankAccount().getAccountHolder());
System.out.println(requestResponse.getInvoiceBankAccount().getAccountNumber());
System.out.println(requestResponse.getInvoiceBankAccount().getBankCode());
System.out.println(requestResponse.getInvoiceBankAccount().getBankName());
System.out.println(requestResponse.getInvoiceBankAccount().getInvoiceDueDate());
System.out.println(requestResponse.getInvoiceBankAccount().getInvoiceReference());
Attribute Pflicht Format Werte Info
activationperformed + boolean 0/1 Gibt zurück, ob die Bestellung aktiviert wurde (das Zahlungsziel gesetzt wurde)
accountholder + string AN..255 Kontoinhaber/Begünstigter
accountnumber + string AN..40 BillPay IBAN - International Bank Account Number
bankcode + string AN..16 BillPay BIC - Bank Identifier Code
bankname + string AN..255 Name der BillPay Bank
invoiceduedate + string N..8 Fälligkeitsdatum im Format: YYYYMMDD
invoicereference + string AN..255 Verwendungszweck
esrreference - string AN Referenz-Nummer für den Schweizer orange Einzahlungsschein
esrcodeline - string AN ESR Codeline für den Schweizer orange Einzahlungsschein

Invoice Numbers-Knoten

Für den Ausnahmefall, dass BillPay die Kundenrechnung generiert und versendet, liefert der Knoten die Rechnungsnummer an den Händler zurück.

<assigned_invoice_number>
    <invoice_number
        invoiceid="REBP1234/1700186R1"
        billpayinvoicenumber="1519088641#1" />
</assigned_invoice_number>        
InvoiceNumber invoiceNumber = requestResponse.getInvoiceNumbers().get(0);

System.out.println(invoiceNumber.getBillpayInvoiceNumber());
System.out.println(invoiceNumber.getInvoiceId());
Attribute Pflicht Format Werte Info
invoice_number + Unterknoten des assigned_invoice_number-Knotens
  ↳invoiceid + string AN..255 Eindeutige Rechnungsnummer, die auf der Kundenrechnung ausgedruckt ist.
  ↳billpayinvoicenumber + string AN..40 Interne BillPay-Rechnungs-/Forderungsnummer
Zeichen:
0-9, a-z, A-Z, -, , #, ., :

Regex:
([A-Z]|[a-z]|[0-9]|-|
|#|:|.)*

Instalment Details-Knoten (betrifft nur Ratenzahlung (paymenttype = “3”) und PayLater (paymenttype = “4”))

In diesem Knoten gibt BillPay alle relevanten Informationen zur Ratenzahlung zurück.

PayLater (paymenttype = “4”)

<instalment_details>
    <instl_plan numinst="6">
        <calc>
            <duration_in_months>
                6
            </duration_in_months>
            <fee_percent>
                6.00
            </fee_percent>
            <fee_total>
                2520
            </fee_total>
            <total_pymt>
                45520
            </total_pymt>
            <eff_anual>
                24.21
            </eff_anual>
            <nominal>
                20.57
            </nominal>
        </calc>
        <instl_list>
            <instl date="20160531" type="immediate">
                3520
            </instl>
            <instl date="20160630" type="first">
                7000
            </instl>
            <instl date="20160731" type="date">
                7000
            </instl>
            <instl date="20160831" type="date">
                7000
            </instl>
            <instl date="20160930" type="date">
                7000
            </instl>
            <instl date="20161031" type="date">
                7000
            </instl>
            <instl date="20161130" type="date">
                7000
            </instl>
        </instl_list>
    </instl_plan>
</instalment_details>
InstalmentPlan instalmentPlan = requestResponse.getInstalmentDetails().getInstalmentPlan();
System.out.println(instalmentPlan.getDurationInMonths());
System.out.println(instalmentPlan.getFeePercent());
System.out.println(instalmentPlan.getFeeTotal());
System.out.println(instalmentPlan.getTotalPayment());
System.out.println(instalmentPlan.getEffAnual());
System.out.println(instalmentPlan.getNominal());

InstalmentItem instalmentItem = instalmentPlan.getInstalmentList().get(0);
System.out.println(instalmentItem.getAmount());
System.out.println(instalmentItem.getDate());
System.out.println(instalmentItem.getType());
Attribute Pflicht Format Werte Info
instl_plan + Parent-Knoten – wird nur für paymenttype = “4” (PayLater/Ratenzahlung) erzeugt
numinst + positive int N Ratenanzahl
calc + Unterknoten des instl_plan-Knotens
  ↳duration_in_months + int N Laufzeit des Ratenplans in Monaten
  ↳fee_percent + decimal PayLater-Gebühr in Prozent (%)
zwischen 0.00 und 100.00
  ↳fee_total + non-negative int N Gesamt PayLater-Gebühr
  ↳total_pymt + positive int N Gesamtbetrag der Bestellung inklusive PayLater-Gebühren
  ↳eff_anual + decimal Effektiver Jahreszins in Prozent (%)
zwischen 0.00 und 100.00
  ↳nominal + decimal Nominalzinssatz in Prozent (%)
zwischen 0.00 und 100.00
instl_list +-Knoten Unterknoten des instl_plan-Knotens
  ↳instl +-Knoten Unterknoten des instl_list-Knotens
      ↳date + DATE YYYYMMDD Fälligkeitsdatum der Rate/Gebühr
      ↳type + string AN Gebühren- bzw. Ratentyp (“immediate”, “first”, “date”, “fee”)

Ratenzahlung (paymenttype = “3”)

<instalment_details>
    <option ratecount="6" term="6">
      <calculation>
        <base>
          14345
        </base>
        <cart>
          14444
        </cart>
        <surcharge>
          420
        </surcharge>
        <intermediate>
          14765
        </intermediate>
        <total>
          15039
        </total>
        <interest>
          49
        </interest>
        <anual>
          1542
        </anual>
        <fee>
          175
        </fee>
      </calculation>
      <dues>
        <due date="" type="first">
          2739
        </due>
        <due date="" type="following">
          2460
        </due>
        <due date="" type="date">
          2460
        </due>
        <due date="" type="date">
          2460
        </due>
        <due date="" type="date">
          2460
        </due>
        <due date="" type="date">
          2460
        </due>
      </dues>
    </option>
</instalment_details>
RateOption rateOption = requestResponse.getInstalmentDetails().getRateOption();
System.out.println(rateOption.getRateCount());
System.out.println(rateOption.getTerm());
System.out.println(rateOption.getCalculationBaseAmount());
System.out.println(rateOption.getCartTotalGross());
System.out.println(rateOption.getSurcharge());
System.out.println(rateOption.getTotalPaymentAmount());
System.out.println(rateOption.getMonthlyInterestRate());
System.out.println(rateOption.getAnualInterestRate());
System.out.println(rateOption.getAdditionalFee());

DueDetail dueDetail = rateOption.getDueDetailsList().get(0);
System.out.println(dueDetail.getAmount());
System.out.println(dueDetail.getDate());
System.out.println(dueDetail.getRateType());
Attribute Pflicht Format Werte Info
option + Parent-Knoten – wird nur für paymenttype=“3” erzeugt
ratecount + positive int N Ratenanzahl
terminmonths + positive int N Laufzeit des Ratenplans in Monaten
calculation + Unterknoten des option-Knotens
  ↳base + positive int N Basisbetrag für die Finanzierung (Auftragswert ohne Versandkosten oder sonstige Gebühren)
  ↳cart + positive int N Gesamtbetrag der Bestellung inklusive Versandkosten, jedoch ohne Finanzierungsgebühren
  ↳surcharge + positive int N Kalkulierter Zinsaufschlag der Finanzierung (in kleinster Währungseinheit z.B. 100,00 Euro = 10000)
  ↳intermediate + positive int N Gesamtbetrag der Bestellung inklusive Finanzierungsgebühren (in kleinster Währungseinheit z.B. 100,00 Euro = 10000)
  ↳total + positive int N Gesamtbetrag der Bestellung (Brutto) inklusive Versandkosten und Finanzierungsgebühren (in kleinster Währungseinheit z.B. 100,00 Euro = 10000)
  ↳interest + positive int N Monatlicher Zinssatz in % (e.g: 59 = 0.59%)
  ↳anual + positive int N Jährliche Zinsrate in % (z.B: 1614 = 16,14%)
  ↳fee + positive int N Gebühr, die BillPay für diese Transaktion erhebt (in kleinster Währungseinheit z.B. 100,00 Euro = 10000)
dues + Unterknoten des option-Knotens
  ↳due + N…7 Gesamtwert der Rate (in kleinster Währungseinheit z.B. 100,00 Euro = 10000)
      ↳date + DATE YYYYMMDD Fälligkeitsdatum der Rate
      ↳type + string AN Gebühren- bzw. Ratentyp (“immediate”, “first”, “date”, “fee”)

Auftragsverwaltung

Request Überblick

XML-Request Erklärung Zeitpunkt Service URL
Aktivierung Rechnung: Starten des Zahlungsziels (20 bzw. 30 Tage); Lastschrift: Initiierung des Bankeinzugs; PayLater: Meldung der Rechnungsstellung/des Versands an BillPay Bei Erstellung der Rechnung. Wird i.d.R. im Backend durch eine Aktion oder einen Cron-Job/Batch getriggert. [Base-URL]/invoiceCreated
Vollstornierung Stornierung der gesamten Bestellung Wird i.d.R. im Backend durch eine Aktion / einen Job ausgelöst. [Base-URL]/cancel
Warenkorbänderung Änderung des Warenkorbinhalts oder der Liefergebühren bzw. Rabatte der Bestellung. Wird i.d.R. durch Gutschrift, Teilstornierung oder Änderung der Bestellung ausgelöst. [Base-URL]/editCartContent
Update der Bestellnummer Aktualisierung der Bestell-ID. Nach Bestellung, falls sich die Referenznummer erneut ändern sollte. [Basis-URL]/updateOrder
Nochmaliges Abholen der BillPay Bankdaten Nur für Rechnungskauf: Nochmaliges Abholen der BillPay Bankdaten zu einer bestehenden Bestellung, um die Bankdaten auf der Kundenrechnung auszudrucken. Wird aus dem Backend heraus gesendet, falls das Abgreifen der Bankdaten von der Capture- oder InvoiceCreated-Response nicht möglich ist. [Basis-URL]/getBillPayBankData

Rechnungsstellung

Der “invoiceCreated”-Request wird genutzt um bei Rechnungskauf und Ratenkauf CHE das Zahlungsziel des Kunden bei BillPay zu starten bzw. die Zahlung bei Lastschrift und PayLater anzustoßen. Dieser Vorgang wird “Aktivierung der Forderung” genannt und muss für jede Bestellung immer unmittelbar vor der Rechnungsstellung bzw. dem Versand der Ware abgesendet werden. Erst nach dem Erhalt einer fehlerfreien Antwort auf diesen Request stehen alle notwendigen Daten zur Verfügung, die auf der Kundenrechnung angezeigt werden müssen. Für die Zahlarten Lastschrift und PayLater wird durch diesen Request das Einzugsdatum des Bestellwerts bzw. der Raten festgelegt. BillPay bietet neben der Aktivierung der gesamten Bestellung auch die Aktivierung in Teilbeträgen für die Zahlarten Rechnung und Lastschrift an.

Request

Data-Knoten

<data
        requesttype="INVOICE_CREATED"
        apiversion="2.0.0">
    <!-- Request Data -->
</data>
Attribute Format Werte Info
requesttype string INVOICE_CREATED Name des Requests
apiversion string 2.0.0 BillPay API Version

Default Params-Knoten (Händler Zugangsdaten)

Ihre Händler-Zugangsdaten werden Ihnen durch BillPay zur Verfügung gestellt.

<default_params
        mid="1234"
        pid="9999"
        passwordhash="25d55ad283aa400af464c76d713c07ad" />
invoiceCreatedRequest
    .setMerchantId(1234)
    .setPortalId(9999)
    .setApiPassword("clear text password")
Attribute Pflicht Format Info
mid + positive int Händler ID
pid + positive int Portal ID
passwordhash + string MD5 Hash des Passworts

Invoice Params-Knoten

<invoice_params
    invoiceamountnet="19327"
    invoiceamountgross="23000"
    is_partial="0" 
    rebatenet="1681" 
    rebategross="2000"
    shippingname="Express Versand" 
    shippingpricenet="840" 
    shippingpricegross="1000" 
    currency="EUR" 
    reference="1773673332" 
    deliverydelayindays="0" 
    merchantinvoicenumber="1234567"
    trackingnumber="ABZ12398892131" />
invoiceCreatedRequest
    .setTransactionId("1aa2fb2d-2b78-4393-bf06-be0012dda337")
    .setMerchantInvoiceNumber("1234567")
    .setIsPartial(0)
    .setDeliveryDelayInDays(0);

invoiceCreatedRequest.getShipping()
    .setName("Express Versand")
    .setPriceNet(840)
    .setPriceGross(1000)
    .setTrackingNumber("ABZ12398892131"); 

invoiceCreatedRequest.getCart()
    .setReference("1519088641")
    .setInvoiceNumber("1234567")
    .setCurrencyIso3("EUR")
    .setOrderAmountGross(43000);       
Attribute Pflicht Format Werte Info
invoiceamountnet - positive int N..7 Nettowert (ohne Steuer) der Bestellung in kleinster Währungseinheit (1,00 EUR = 100)
[(articlequantity * articlepricenet) + shippingpricenet – rebatenet]
invoiceamountgross + positive int N..7 Bruttowert (mit Steuer) der Bestellung in kleinster Währungseinheit (1,00 EUR = 100)
[(articlequantity * articlepricegross) + shippingpricegross – rebategross]
ispartial + boolean 0/1 0: Versand der gesamten Bestellung
1: Teilversand der Bestellung
rebatenet - non-negative int N..7 Positiver Nettowert (ohne Steuer) aller Rabatte, Coupons und sonstiger betragsmindernder Posten in kleinster Währungseinheit (1,00 EUR = 100).
Falls nicht gegeben bitte mit 0 belegen.
rebategross - non-negative int N..7 Positiver Bruttowert (mit Steuer) aller Rabatte, Coupons und sonstiger betragsmindernder Posten in kleinster Währungseinheit (1,00 EUR = 100).
Falls nicht gegeben bitte mit 0 belegen.
shippingname - string AN..50 Versandart (z.B. “DHL Express”, “DPD” etc..)
shippingpricenet - non-negative int N..7 Bruttowert (mit Steuer) aller (Liefer-) Gebühren (z.B. Versand, Expresszuschläge).
Falls nicht gegeben bitte mit 0 belegen.
shippingpricegross - non-negative int N..7 Bruttowert (mit Steuer) aller (Liefer-) Gebühren (z.B. Versand, Expresszuschläge).
Falls nicht gegeben bitte mit 0 belegen.
currency + string A..3 3-stelliger Währungscode (z.B. “EUR”): ISO4217
reference - string AN..40 Eindeutige Bestell-ID aus dem Händlersystem. Diese Nummer wird als Kenner in der Abrechnungsdatei verwendet, sowie nachfolgende Anfragen zur Bearbeitung eines Auftrags.
Zulässige Zeichen:
0-9, a-z, A-Z, -,

Regex:
([A-Z]|[a-z]|[0-9]|-|
)*
merchantinvoicenumber - string AN..40 Rechnungsnummer aus dem Händler-System
Zulässige Zeichen:
0-9, a-z, A-Z, -, , #, ., :

Regex:
([A-Z]|[a-z]|[0-9]|-|
|#|:|.)*
trackingnumber - string AN..40 Trackingnummer der Sendung (falls bereits bekannt)
deliverydelayindays + non-negative int N..3 Anzahl der Tage um die sich die Lieferung und damit das Zahlungsziel nach hinten verschiebt

Article Data-Knoten – Liste der fakturierten Artikel Im article_data-Knoten werden alle Informationen rund um die versendeten/fakturierten Warenkorbpositionen abgebildet. Pro einzigartigem Artikel wird ein article-Knoten gesetzt.

<article_data>
    <article
            articleid="2345"
            articlequantity="1"
            articlename="Hose"
            articlecategory="Clothing"
            articlesubcategory1="Ralph Lauren"
            articlepricenet="16807"
            articlepricegross="20000" />
</article_data>
invoiceCreatedRequest.getCart().createAndAddArticle()
    .setId("2345")
    .setQuantity(1)
    .setType(ArticleType.OTHER)
    .setName("Hose")
    .setCategory("Clothing")
    .setFirstSubCategory("Ralph Lauren")
    .setPriceNet(16807)
    .setPriceGross(20000);    
Attribute Pflicht Format Werte Info
articleid + string AN..20 Eindeutige Artikel-ID für die Warenkorbposition
articlename + string AN..50 Artikelname
articlequantity + positive int N..7 Menge des Artikels im Warenkorb
articlepricenet + int N..7 Nettopreis des Artikels in kleinster Währungseinheit (1,00 EUR = 100)
articlepricegross + int N..7 Bruttopreis des Artikels in kleinster Währungseinheit (1,00 EUR = 100)

Die Teillieferung ist nur für die folgenden Zahlarten möglich:

Payment Method ID Zahlart
1 Rechnung
2 Lastschrift

Response

Mit der “InvoiceCreated”-Response wird im Fall der Zahlarten “Rechnung” & “Ratenkauf Schweiz” die Bankverbindung übertragen, auf die die Zahlung durch den Kunden zu leisten ist. Diese Bankverbindung, sowie das zusätzlich übertragene Fälligkeitsdatum für die Zahlung, muss auf der Rechnung des Kunden (z.B. in der Warensendung enthalten oder per E-Mail zugestellt) ausgedruckt werden. Für PayLater und Lastschrift spielen diese Felder keine Rolle und können ignoriert werden. Es ist ein statischer Text auszudrucken, welcher durch Ihren Ansprechpartner bei BillPay bereitgestellt wird.

Data-Knoten

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<data
        responsetype="INVOICE_CREATED"
        errorcode="0"
        customermessage=""
        merchantmessage=""
        developermessage=""
        transactionid="1aa2fb2d-2b78-4393-bf06-be0012dda337">
    <!-- weitere Antwortdaten -->
</data>
System.out.println(requestResponse.getErrorCode());
System.out.println(requestResponse.getMerchantMessage());
System.out.println(requestResponse.getDeveloperMessage());
System.out.println(requestResponse.getCustomerMessage());
Attribute Pflicht Format Werte Info
responsetype + string INVOICE_CREATED Name des Requests zu dem die Response gehört
errorcode + non-negative int N..3 Fehlercode. Der Standardwert ist “0” und bedeutet kein Fehler. Auflistung der Fehlercodes
merchantmessage + string Detaillierte Fehlermeldung für den Händler
customermessage + string Fehlermeldung für den Kunden zur Anzeige im Frontend
developermessage + string Detaillierte Fehlermeldung für den Entwickler, der mögliche XSD-Validierungsfehler benennt. Bei fehlerfreier Verarbeitung wird das Feld nicht befüllt.

Invoice Bank Account-Knoten - ausschließlich für Rechnung (paymenttype=“1”) und Ratenkauf Schweiz (paymenttype=“3”)

Dieser Knoten liefert die Bankverbindung von BillPay zurück, an die der Kunde überweisen soll. Die BillPay Bankverbindung ist auf der Rechnung, die der Kunde vom Händler erhält, auszudrucken. Falls Sie die Teilaktivierung (Versand in mehreren Einheiten) anbieten, sind die Bankdaten für alle Rechnungen, die zu einer Bestellung gehören, identisch.

<invoice_bank_account
        activationperformed="1"
        accountholder="BillPay GmbH"
        accountnumber="DE07312312312312312"
        bankcode="BELADEBEXXX"
        bankname="Sparkasse Berlin"
        invoiceduedate="20170707"
        invoicereference="BP555666777/9999"/>
System.out.println(requestResponse.getInvoiceBankAccount().isActivationPerformed());
System.out.println(requestResponse.getInvoiceBankAccount().getAccountHolder());
System.out.println(requestResponse.getInvoiceBankAccount().getAccountNumber());
System.out.println(requestResponse.getInvoiceBankAccount().getBankCode());
System.out.println(requestResponse.getInvoiceBankAccount().getBankName());
System.out.println(requestResponse.getInvoiceBankAccount().getInvoiceDueDate());
System.out.println(requestResponse.getInvoiceBankAccount().getInvoiceReference());
Attribute Pflicht Format Werte Info
activationperformed + boolean 0/1 Gibt zurück, ob die Bestellung aktiviert wurde (das Zahlungsziel gesetzt wurde)
accountholder + string AN..255 Kontoinhaber/Begünstigter
accountnumber + string AN..40 BillPay IBAN - International Bank Account Number
bankcode + string AN..16 BillPay BIC - Bank Identifier Code
bankname + string AN..255 Name der BillPay Bank
invoiceduedate + string N..8 Fälligkeitsdatum im Format: YYYYMMDD
invoicereference + string AN..255 Verwendungszweck
esrreference - string AN Referenz-Nummer für den Schweizer orange Einzahlungsschein
esrcodeline - string AN ESR Codeline für den Schweizer orange Einzahlungsschein

Invoice Numbers-Knoten

Für den Ausnahmefall, dass BillPay die Kundenrechnung generiert und versendet, liefert der Knoten die Rechnungsnummer an den Händler zurück.

<assigned_invoice_number>
    <invoice_number
        invoiceid="REBP1234/1700186R1"
        billpayinvoicenumber="Z2I8EB#1" />
</assigned_invoice_number>        
InvoiceNumber invoiceNumber = requestResponse.getInvoiceNumbers().get(0);

System.out.println(invoiceNumber.getBillpayInvoiceNumber());
System.out.println(invoiceNumber.getInvoiceId());
Attribute Pflicht Format Werte Info
invoice_number + Unterknoten des assigned_invoice_number-Knotens
  ↳invoiceid + string AN..255 Eindeutige Rechnungsnummer, die auf der Kundenrechnung ausgedruckt ist.
  ↳billpayinvoicenumber + string AN..40 Interne BillPay-Rechnungs-/Forderungsnummer
Zeichen:
0-9, a-z, A-Z, -, , #, ., :

Regex:
([A-Z]|[a-z]|[0-9]|-|
|#|:|.)*

Instalment Details-Knoten (betrifft nur Ratenzahlung (paymenttype = “3”) und PayLater (paymenttype = “4”))

In diesem Knoten gibt BillPay alle relevanten Informationen zur Ratenzahlung zurück.

Paylater (paymenttype = “4”)

<instalment_details>
    <instl_plan numinst="6">
        <calc>
            <duration_in_months>
                6
            </duration_in_months>
            <fee_percent>
                6.00
            </fee_percent>
            <fee_total>
                2520
            </fee_total>
            <total_pymt>
                45520
            </total_pymt>
            <eff_anual>
                24.21
            </eff_anual>
            <nominal>
                20.57
            </nominal>
        </calc>
        <instl_list>
            <instl date="20160531" type="immediate">
                3520
            </instl>
            <instl date="20160630" type="first">
                7000
            </instl>
            <instl date="20160731" type="date">
                7000
            </instl>
            <instl date="20160831" type="date">
                7000
            </instl>
            <instl date="20160930" type="date">
                7000
            </instl>
            <instl date="20161031" type="date">
                7000
            </instl>
            <instl date="20161130" type="date">
                7000
            </instl>
        </instl_list>
    </instl_plan>
</instalment_details>
InstalmentPlan instalmentPlan = requestResponse.getInstalmentDetails().getInstalmentPlan();
System.out.println(instalmentPlan.getDurationInMonths());
System.out.println(instalmentPlan.getFeePercent());
System.out.println(instalmentPlan.getFeeTotal());
System.out.println(instalmentPlan.getTotalPayment());
System.out.println(instalmentPlan.getEffAnual());
System.out.println(instalmentPlan.getNominal());

InstalmentItem instalmentItem = instalmentPlan.getInstalmentList().get(0);
System.out.println(instalmentItem.getAmount());
System.out.println(instalmentItem.getDate());
System.out.println(instalmentItem.getType());
Attribute Pflicht Format Werte Info
instl_plan + Parent-Knoten – wird nur für paymenttype = “4” (PayLater/Ratenzahlung) erzeugt
numinst + positive int N Ratenanzahl
calc + Unterknoten des instl_plan-Knotens
  ↳duration_in_months + int N Laufzeit des Ratenplans in Monaten
  ↳fee_percent + decimal PayLater-Gebühr in Prozent (%)
zwischen 0.00 und 100.00
  ↳fee_total + non-negative int N Gesamt PayLater-Gebühr
  ↳total_pymt + positive int N Gesamtbetrag der Bestellung inklusive PayLater-Gebühren
  ↳eff_anual + decimal Effektiver Jahreszins in Prozent (%)
zwischen 0.00 und 100.00
  ↳nominal + decimal Nominalzinssatz in Prozent (%)
zwischen 0.00 und 100.00
instl_list +-Knoten Unterknoten des instl_plan-Knotens
  ↳instl +-Knoten Unterknoten des instl_list-Knotens
      ↳date + DATE YYYYMMDD Fälligkeitsdatum der Rate/Gebühr
      ↳type + string AN Gebühren- bzw. Ratentyp (“immediate”, “first”, “date”, “fee”)

Ratenzahlung (paymenttype = “3”)

<instalment_details>
    <option ratecount="6" term="6">
      <calculation>
        <base>
          14345
        </base>
        <cart>
          14444
        </cart>
        <surcharge>
          420
        </surcharge>
        <intermediate>
          14765
        </intermediate>
        <total>
          15039
        </total>
        <interest>
          49
        </interest>
        <anual>
          1542
        </anual>
        <fee>
          175
        </fee>
      </calculation>
      <dues>
        <due date="" type="first">
          2739
        </due>
        <due date="" type="following">
          2460
        </due>
        <due date="" type="date">
          2460
        </due>
        <due date="" type="date">
          2460
        </due>
        <due date="" type="date">
          2460
        </due>
        <due date="" type="date">
          2460
        </due>
      </dues>
    </option>
</instalment_details>
RateOption rateOption = requestResponse.getInstalmentDetails().getRateOption();
System.out.println(rateOption.getRateCount());
System.out.println(rateOption.getTerm());
System.out.println(rateOption.getCalculationBaseAmount());
System.out.println(rateOption.getCartTotalGross());
System.out.println(rateOption.getSurcharge());
System.out.println(rateOption.getTotalPaymentAmount());
System.out.println(rateOption.getMonthlyInterestRate());
System.out.println(rateOption.getAnualInterestRate());
System.out.println(rateOption.getAdditionalFee());

DueDetail dueDetail = rateOption.getDueDetailsList().get(0);
System.out.println(dueDetail.getAmount());
System.out.println(dueDetail.getDate());
System.out.println(dueDetail.getRateType());
Attribute Pflicht Format Werte Info
option + Parent-Knoten – wird nur für paymenttype=“3” erzeugt
ratecount + positive int N Ratenanzahl
terminmonths + positive int N Laufzeit des Ratenplans in Monaten
calculation + Unterknoten des option-Knotens
  ↳base + positive int N Basisbetrag für die Finanzierung (Auftragswert ohne Versandkosten oder sonstige Gebühren)
  ↳cart + positive int N Gesamtbetrag der Bestellung inklusive Versandkosten, jedoch ohne Finanzierungsgebühren
  ↳surcharge + positive int N Kalkulierter Zinsaufschlag der Finanzierung (in kleinster Währungseinheit z.B. 100,00 Euro = 10000)
  ↳intermediate + positive int N Gesamtbetrag der Bestellung inklusive Finanzierungsgebühren (in kleinster Währungseinheit z.B. 100,00 Euro = 10000)
  ↳total + positive int N Gesamtbetrag der Bestellung (Brutto) inklusive Versandkosten und Finanzierungsgebühren (in kleinster Währungseinheit z.B. 100,00 Euro = 10000)
  ↳interest + positive int N Monatlicher Zinssatz in % (e.g: 59 = 0.59%)
  ↳anual + positive int N Jährliche Zinsrate in % (z.B: 1614 = 16,14%)
  ↳fee + positive int N Gebühr, die BillPay für diese Transaktion erhebt (in kleinster Währungseinheit z.B. 100,00 Euro = 10000)
dues + Unterknoten des option-Knotens
  ↳due + N…7 Gesamtwert der Rate (in kleinster Währungseinheit z.B. 100,00 Euro = 10000)
      ↳date + DATE YYYYMMDD Fälligkeitsdatum der Rate
      ↳type + string AN Gebühren- bzw. Ratentyp (“immediate”, “first”, “date”, “fee”)

Cancel

Mit den “Cancel”-Request wird eine zuvor bei BillPay eröffnete Forderung vollständig storniert. Falls der Kunde bereits Zahlungen an BillPay geleistet hat (“Kauf auf Rechnung”, “Ratenkauf Schweiz”), oder der fällige Betrag bereits vom Konto eingezogen wurde (“Lastschrift”, “PayLater”), wird der geleistete Betrag automatisiert an den Kunden zurücküberwiesen und eine entsprechende Mitteilung versendet.

Request

Data-Knoten

<data
    requesttype="CANCEL"
    apiversion="2.0.0">
    <!-- Request Data -->
</data>
Attribute Format Werte Info
requesttype string CANCEL Name des Requests
apiversion string 2.0.0 BillPay API Version

Default Params-Knoten (Händler Zugangsdaten)

Ihre Händler-Zugangsdaten werden Ihnen durch BillPay zur Verfügung gestellt.

<default_params
        mid="1234"
        pid="9999"
        passwordhash="25d55ad283aa400af464c76d713c07ad" />
cancelRequest
    .setMerchantId(1234)
    .setPortalId(9999)
    .setApiPassword("clear text password")
Attribute Pflicht Format Info
mid + positive int Händler ID
pid + positive int Portal ID
passwordhash + string MD5 Hash des Passworts

Cancel Params-Knoten

<cancel_params
        reference="1519088641"
        orderamountgross="43000"
        currency="EUR" />
cancelRequest.getCart()
    .setReference("1519088641")
    .setCurrencyIso3("EUR")
    .setOrderAmountGross(43000);
Attribute Pflicht Format Werte Info
reference + string AN..40 Auftragsnummer aus Ihrem System
Zulässige Zeichen:
0-9, a-z, A-Z, -, _
orderamountgross + positive int N..7 Bruttogesamtwert (inkl. MwSt.) der Bestellung in kleinster Währungseinheit (1,00 EUR = 100)
[(articlequantity * articlepricegross) + shippingpricegross – rebategross]
currency + string A..3 3-stelliger Währungscode (z.B. “EUR”): ISO4217

Response

Als Response auf den “Cancel”-Request liefert das BillPay System keine zusätzlichen Parameter außer dem Fehlercode und der Fehlermeldung zurück. Data-Knoten

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<data
        responsetype="CANCEL"
        errorcode="0"
        customermessage=""
        merchantmessage=""
        developermessage="">
</data>
System.out.println(cancelResponse.getErrorCode());
System.out.println(cancelResponse.getMerchantMessage());
System.out.println(cancelResponse.getDeveloperMessage());
System.out.println(cancelResponse.getCustomerMessage());
Attribute Pflicht Format Werte Info
responsetype + string CANCEL Name des Requests zu dem die Response gehört
errorcode + non-negative int N..3 Fehlercode. Der Standardwert ist “0” und bedeutet kein Fehler. Auflistung der Fehlercodes
merchantmessage + string Detaillierte Fehlermeldung für den Händler
customermessage + string Fehlermeldung für den Kunden zur Anzeige im Frontend
developermessage + string Detaillierte Fehlermeldung für den Entwickler, der mögliche XSD-Validierungsfehler benennt. Bei fehlerfreier Verarbeitung wird das Feld nicht befüllt.

Edit Cart Content

Mit dem “EditCartContent”-Request kann der Warenkorb einer Bestellung im BillPay-System sowohl vor als auch nach Aktivierung geändert werden. Es können bspw. im Falle einer Retoure einzelne Artikel oder ganze Warenkorbpositionen aus dem Warenkorb entfernt werden. Es können aber auch nachträglich Artikel in den Warenkorb eingefügt werden. Hierfür gelten die folgenden Regeln:

  • Ist der neue Warenkorbwert kleiner oder gleich dem alten Warenkorb, wird die Änderung in jedem Fall akzeptiert.
  • Ist der neue Warenkorbwert größer als der alte Warenkorb, wird auf Seiten von BillPay versucht den Kunden für den höheren Bestellwert zu autorisieren. Ist dies erfolgreich, wird der Warenkorb entsprechend der Anfrage angepasst. Schlägt die Autorisierung fehl, wird die Anfrage mit dem Fehlercode 105 abgelehnt und der alte Warenkorb bleibt für die Bestellung bestehen.

Inhaltlich meldet der Händler mit diesem Request den neuen Warenkorbinhalt an BillPay. Bei erfolgreicher Verarbeitung wird der alte Warenkorb bzw. die im neuen Warenkorb nicht mehr enthaltenen Bestandteile verworfen und der neu übergebene Warenkorb übernommen.

Request

Data-Knoten

<data
        requesttype="EDIT_CART_CONTENT"
        apiversion="2.0.0"
    <!-- Request Data -->
</data>
Attribute Format Werte Info
requesttype string EDIT_CART_CONTENT Name des Requests
apiversion string 2.0.0 BillPay API Version

Default Params-Knoten (Händler Zugangsdaten)

Ihre Händler-Zugangsdaten werden Ihnen durch BillPay zur Verfügung gestellt.

<default_params
        mid="1234"
        pid="9999"
        passwordhash="25d55ad283aa400af464c76d713c07ad" />
editCartContentRequest
    .setMerchantId(1234)
    .setPortalId(9999)
    .setApiPassword("clear text password")
Attribute Pflicht Format Info
mid + positive int Händler ID
pid + positive int Portal ID
passwordhash + string MD5 Hash des Passworts

Total-Knoten

Der total-Knoten beinhaltet die Gesamtwerte sowie Gebühren/Rabatte und die Auftragsnummer.

<total
        shippingname="Express Versand"
        shippingpricenet="840"
        shippingpricegross="1000"
        rebatenet="1681"
        rebategross="2000"
        orderamountnet="26050"
        orderamountgross="31000"
        currency="EUR"
        reference="1519088641" />
editCartContentRequest.getShipping()
    .setName("Express Versand")
    .setPriceNet(840)
    .setPriceGross(1000);

editCartContentRequest.getCart()
    .setOrderAmountNet(26050)
    .setOrderAmountGross(31000)
    .setCurrencyIso3("EUR")
    .setReference("1519088641")
    .createAndAddRebate()
        .setRebateNet(1681)
        .setRebateGross(2000);
Attribute Pflicht Format Werte Info
shippingname + string AN..50 Versandart (z.B. “DHL Express”, “DPD” etc..)
shippingpricenet + non-negative int N..7 Bruttowert (mit Steuer) aller (Liefer-) Gebühren (z.B. Versand, Expresszuschläge).
Falls nicht gegeben bitte mit 0 belegen.
shippingpricegross + non-negative int N..7 Bruttowert (mit Steuer) aller (Liefer-) Gebühren (z.B. Versand, Expresszuschläge).
Falls nicht gegeben bitte mit 0 belegen.
rebatenet + non-negative int N..7 Positiver Nettowert (ohne Steuer) aller Rabatte, Coupons und sonstiger betragsmindernder Posten in kleinster Währungseinheit (1,00 EUR = 100).
Falls nicht gegeben bitte mit 0 belegen.
rebategross + non-negative int N..7 Positiver Bruttowert (mit Steuer) aller Rabatte, Coupons und sonstiger betragsmindernder Posten in kleinster Währungseinheit (1,00 EUR = 100).
Falls nicht gegeben bitte mit 0 belegen.
orderamountnet + positive int N..7 Nettowert (ohne Steuer) der Bestellung in kleinster Währungseinheit (1,00 EUR = 100)
[(articlequantity * articlepricenet) + shippingpricenet – rebatenet]
orderamountgross + positive int N..7 Bruttowert (mit Steuer) der Bestellung in kleinster Währungseinheit (1,00 EUR = 100)
[(articlequantity * articlepricegross) + shippingpricegross – rebategross]
currency + string A..3 3-stelliger Währungscode (z.B. “EUR”): ISO4217
reference - string AN..40 Eindeutige Bestell-ID aus dem Händlersystem. Diese Nummer wird als Kenner in der Abrechnungsdatei verwendet, sowie nachfolgende Anfragen zur Bearbeitung eines Auftrags.
Zulässige Zeichen:
0-9, a-z, A-Z, -,

Regex:
([A-Z]|[a-z]|[0-9]|-|
)*

Article Data-Knoten (Warenkorbpositionen)

Im article_data-Knoten werden alle Informationen rund um die in der aktualisierten Bestellung enthaltenen Warenkorbpositionen abgebildet. Pro einzigartigem Artikel wird ein article-Knoten gesetzt.

<article_data>
    <article
            articleid="2345"
            articlequantity="1"
            articletype="0"
            articlename="Hose"
            articlecategory="Clothing"
            articlesubcategory1="Ralph Lauren"
            articlepricenet="16807"
            articlepricegross="20000" />
</article_data>
editCartContentRequest.getCart().createAndAddArticle()
    .setId("2345")
    .setQuantity(1)
    .setType(ArticleType.OTHER)
    .setName("Hose")
    .setCategory("Clothing")
    .setFirstSubCategory("Ralph Lauren")
    .setPriceNet(16807)
    .setPriceGross(20000);    
Attribute Pflicht Format Werte Info
articleid + string AN..20 Eindeutige Artikel-ID für die Warenkorbposition
articlename + string AN..50 Artikelname
articlequantity + positive int N..7 Menge des Artikels im Warenkorb
articletype + non-negative int N..1 Klassifizierung der Artikelpositionen. Default = 0
articlepricenet + int N..7 Nettopreis des Artikels in kleinster Währungseinheit (1,00 EUR = 100)
articlepricegross + int N..7 Bruttopreis des Artikels in kleinster Währungseinheit (1,00 EUR = 100)

Sonderfall: Bearbeiten einer Teillieferung / Teilaktivierung

Neben den oben genannten Parametern wird bei vorheriger Teilaktivierung eine “invoice_list” erwartet, falls eine zuvor zum Teil ausgelieferte Bestellung angepasst wird. Wird der “invoice_list”-Knoten nicht im Request geliefert, werden die zuvor aktivierten Teilbestellungen wieder storniert. Dieser referenziert die einzelnen Teilrechnungen mit einem “invoice_number” Parameter. Darunter wird für jede Teilrechnung eine Liste “invoice_params” übergeben, welche Gesamtrechnungswert, Versandkosten und Rabatt beinhaltet. Hierin wiederum findet sich eine vollständige Auflistung aller mit dieser Rechnung fakturierten Artikel als “article_data”.

Invoice List-Knoten

<invoice_list>
    <invoice merchantinvoicenumber="1234567">
        <invoice_params
            invoiceamountnet="19327"
            invoiceamountgross="23000"
            rebatenet="1681" 
            rebategross="2000"
            shippingname="Express Versand" 
            shippingpricenet="840" 
            shippingpricegross="1000" 
            currency="EUR" 
            reference="1773673332" 
            trackingnumber="ABZ12398892131" />
         <article_data>
            <article
                    articleid="2345"
                    articlequantity="1"
                    articlename="Hose"
                    articlepricenet="16807"
                    articlepricegross="20000" />
        </article_data>   
    </invoice>
</invoice_list>            
  Invoice invoice1 = editCartContentRequest.createAndAddInvoice("1234567")
        .setTotalPriceNet(15966)
        .setTotalPriceGross(19000)
        .setShippingPriceNet(840)
        .setShippingPriceGross(1000)
        .setShippingName("shipping name")
        .setRebateNet(1681)
        .setRebateGross(2000);

    invoice1.createAndAddArticle()
        .setId("2345")
        .setQuantity(1)
        .setType(ArticleType.OTHER)
        .setName("Hose")
        .setPriceNet(16807)
        .setPriceGross(20000);
Attribute Pflicht Format Werte Info
merchantinvoicenumber - string AN..40 Rechnungsnummer aus dem Händler-System
Zulässige Zeichen:
0-9, a-z, A-Z, -, , #, ., :

Regex:
([A-Z]|[a-z]|[0-9]|-|
|#|:|.)*
invoice_params + Unterknoten des invoice-Knotens
  ↳shippingname - string AN..50 Versandart (z.B. “DHL”, “DPD” etc..)
  ↳trackingnumber - string AN..40 Tracking ID vom Versand
  ↳shippingpricenet - non-negative int N..7 Bruttowert (mit Steuer) aller (Liefer-) Gebühren (z.B. Versand, Expresszuschläge).
Falls nicht gegeben bitte mit 0 belegen.
  ↳shippingpricegross - non-negative int N..7 Bruttowert (mit Steuer) aller (Liefer-) Gebühren (z.B. Versand, Expresszuschläge).
Falls nicht gegeben bitte mit 0 belegen.
  ↳rebatenet - non-negative int N..7 Positiver Nettowert (ohne Steuer) aller Rabatte, Coupons und sonstiger betragsmindernder Posten in kleinster Währungseinheit (1,00 EUR = 100).
Falls nicht gegeben bitte mit 0 belegen.
  ↳rebategross - non-negative int N..7 Positiver Bruttowert (mit Steuer) aller Rabatte, Coupons und sonstiger betragsmindernder Posten in kleinster Währungseinheit (1,00 EUR = 100).
Falls nicht gegeben bitte mit 0 belegen.
  ↳invoiceamountnet - positive int N..7 Netto-Rechnungsbetrag (ohne Steuer) (1,00 EUR = 100)
  ↳invoiceamountgross + positive int N..7 Brutto-Rechnungsbetrag (mit Steuer) (1,00 EUR = 100)
article_data + Unterknoten des invoice-Knotens
  ↳article + Unterknoten des article_data-Knotens
      ↳articleid + string AN..20 Eindeutige Artikel-Nummer
      ↳articlename + string AN..50 Artikelname
      ↳articlequantity + positive int N..7 Artikelmenge
      ↳articlepricenet + int N..7 Artikelnettobetrag (in kleinster Währungseinheit:1,00 EUR = 100)
      ↳articlepricegross + int N..7 Artikelbruttobetrag (in kleinster Währungseinheit:1,00 EUR = 100)

Response

Die Antwort auf den EditCartContent-Request liefert einen Error-Code (0=Erfolg) bzw. einen abweichenden Error-Code und eine Fehlermeldung, sollte der Request fehlschlagen.

Data-Knoten

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<data
        responsetype="EDIT_CART_CONTENT"
        errorcode="0"
        customermessage=""
        merchantmessage=""
        developermessage="">
</data>
System.out.println(requestResponse.getErrorCode());
System.out.println(requestResponse.getMerchantMessage());
System.out.println(requestResponse.getDeveloperMessage());
System.out.println(requestResponse.getCustomerMessage());
Attribute Pflicht Format Werte Info
responsetype + string EDIT_CART_CONTENT Name des Requests zu dem die Response gehört
errorcode + non-negative int N..3 Fehlercode. Der Standardwert ist “0” und bedeutet kein Fehler. Auflistung der Fehlercodes
merchantmessage + string Detaillierte Fehlermeldung für den Händler
customermessage + string Fehlermeldung für den Kunden (bei diesem Prozessschritt nicht relevant)
developermessage + string Detaillierte Fehlermeldung für den Entwickler, der mögliche XSD-Validierungsfehler benennt. Bei fehlerfreier Verarbeitung wird das Feld nicht befüllt.

Invoice Numbers-Knoten

Für den Ausnahmefall, dass BillPay die Kundenrechnung generiert und versendet, liefert der Knoten die Rechnungsnummer an den Händler zurück.

<assigned_invoice_number>
    <invoice_number
        invoiceid="REBP1234/1700186R1"
        billpayinvoicenumber="1519088641#1" />
</assigned_invoice_number>        
InvoiceNumber invoiceNumber = requestResponse.getInvoiceNumbers().get(0);

System.out.println(invoiceNumber.getBillpayInvoiceNumber());
System.out.println(invoiceNumber.getInvoiceId());
Attribute Pflicht Format Werte Info
invoice_number + Unterknoten des assigned_invoice_number-Knotens
  ↳invoiceid + string AN..255 Eindeutige Rechnungsnummer, die auf der Kundenrechnung ausgedruckt ist.
  ↳billpayinvoicenumber + string AN..40 Interne BillPay-Rechnungs-/Forderungsnummer
Zeichen:
0-9, a-z, A-Z, -, , #, ., :

Regex:
([A-Z]|[a-z]|[0-9]|-|
|#|:|.)*

Instalment Details-Knoten (betrifft nur Ratenzahlung (paymenttype = “3”) und PayLater (paymenttype = “4”))

In diesem Knoten gibt BillPay alle relevanten Informationen zur Ratenzahlung zurück.

PayLater (paymenttype = “4”)

<instalment_details>
    <instl_plan numinst="6">
        <calc>
            <duration_in_months>
                6
            </duration_in_months>
            <fee_percent>
                6.00
            </fee_percent>
            <fee_total>
                2520
            </fee_total>
            <total_pymt>
                45520
            </total_pymt>
            <eff_anual>
                24.21
            </eff_anual>
            <nominal>
                20.57
            </nominal>
        </calc>
        <instl_list>
            <instl date="20160531" type="immediate">
                3520
            </instl>
            <instl date="20160630" type="first">
                7000
            </instl>
            <instl date="20160731" type="date">
                7000
            </instl>
            <instl date="20160831" type="date">
                7000
            </instl>
            <instl date="20160930" type="date">
                7000
            </instl>
            <instl date="20161031" type="date">
                7000
            </instl>
            <instl date="20161130" type="date">
                7000
            </instl>
        </instl_list>
    </instl_plan>
</instalment_details>
InstalmentPlan instalmentPlan = requestResponse.getInstalmentDetails().getInstalmentPlan();
System.out.println(instalmentPlan.getDurationInMonths());
System.out.println(instalmentPlan.getFeePercent());
System.out.println(instalmentPlan.getFeeTotal());
System.out.println(instalmentPlan.getTotalPayment());
System.out.println(instalmentPlan.getEffAnual());
System.out.println(instalmentPlan.getNominal());

InstalmentItem instalmentItem = instalmentPlan.getInstalmentList().get(0);
System.out.println(instalmentItem.getAmount());
System.out.println(instalmentItem.getDate());
System.out.println(instalmentItem.getType());
Attribute Pflicht Format Werte Info
instl_plan + Parent-Knoten – wird nur für paymenttype = “4” (PayLater/Ratenzahlung) erzeugt
numinst + positive int N Ratenanzahl
calc + Unterknoten des instl_plan-Knotens
  ↳duration_in_months + int N Laufzeit des Ratenplans in Monaten
  ↳fee_percent + decimal PayLater-Gebühr in Prozent (%)
zwischen 0.00 und 100.00
  ↳fee_total + non-negative int N Gesamt PayLater-Gebühr
  ↳total_pymt + positive int N Gesamtbetrag der Bestellung inklusive PayLater-Gebühren
  ↳eff_anual + decimal Effektiver Jahreszins in Prozent (%)
zwischen 0.00 und 100.00
  ↳nominal + decimal Nominalzinssatz in Prozent (%)
zwischen 0.00 und 100.00
instl_list +-Knoten Unterknoten des instl_plan-Knotens
  ↳instl +-Knoten Unterknoten des instl_list-Knotens
      ↳date + DATE YYYYMMDD Fälligkeitsdatum der Rate/Gebühr
      ↳type + string AN Gebühren- bzw. Ratentyp (“immediate”, “first”, “date”, “fee”)

Ratenzahlung (paymenttype = “3”)

<instalment_details>
    <option ratecount="6" term="6">
      <calculation>
        <base>
          14345
        </base>
        <cart>
          14444
        </cart>
        <surcharge>
          420
        </surcharge>
        <intermediate>
          14765
        </intermediate>
        <total>
          15039
        </total>
        <interest>
          49
        </interest>
        <anual>
          1542
        </anual>
        <fee>
          175
        </fee>
      </calculation>
      <dues>
        <due date="" type="first">
          2739
        </due>
        <due date="" type="following">
          2460
        </due>
        <due date="" type="date">
          2460
        </due>
        <due date="" type="date">
          2460
        </due>
        <due date="" type="date">
          2460
        </due>
        <due date="" type="date">
          2460
        </due>
      </dues>
    </option>
</instalment_details>
RateOption rateOption = requestResponse.getInstalmentDetails().getRateOption();
System.out.println(rateOption.getRateCount());
System.out.println(rateOption.getTerm());
System.out.println(rateOption.getCalculationBaseAmount());
System.out.println(rateOption.getCartTotalGross());
System.out.println(rateOption.getSurcharge());
System.out.println(rateOption.getTotalPaymentAmount());
System.out.println(rateOption.getMonthlyInterestRate());
System.out.println(rateOption.getAnualInterestRate());
System.out.println(rateOption.getAdditionalFee());

DueDetail dueDetail = rateOption.getDueDetailsList().get(0);
System.out.println(dueDetail.getAmount());
System.out.println(dueDetail.getDate());
System.out.println(dueDetail.getRateType());
Attribute Pflicht Format Werte Info
option + Parent-Knoten – wird nur für paymenttype=“3” erzeugt
ratecount + positive int N Ratenanzahl
terminmonths + positive int N Laufzeit des Ratenplans in Monaten
calculation + Unterknoten des option-Knotens
  ↳base + positive int N Basisbetrag für die Finanzierung (Auftragswert ohne Versandkosten oder sonstige Gebühren)
  ↳cart + positive int N Gesamtbetrag der Bestellung inklusive Versandkosten, jedoch ohne Finanzierungsgebühren
  ↳surcharge + positive int N Kalkulierter Zinsaufschlag der Finanzierung (in kleinster Währungseinheit z.B. 100,00 Euro = 10000)
  ↳intermediate + positive int N Gesamtbetrag der Bestellung inklusive Finanzierungsgebühren (in kleinster Währungseinheit z.B. 100,00 Euro = 10000)
  ↳total + positive int N Gesamtbetrag der Bestellung (Brutto) inklusive Versandkosten und Finanzierungsgebühren (in kleinster Währungseinheit z.B. 100,00 Euro = 10000)
  ↳interest + positive int N Monatlicher Zinssatz in % (e.g: 59 = 0.59%)
  ↳anual + positive int N Jährliche Zinsrate in % (z.B: 1614 = 16,14%)
  ↳fee + positive int N Gebühr, die BillPay für diese Transaktion erhebt (in kleinster Währungseinheit z.B. 100,00 Euro = 10000)
dues + Unterknoten des option-Knotens
  ↳due + N…7 Gesamtwert der Rate (in kleinster Währungseinheit z.B. 100,00 Euro = 10000)
      ↳date + DATE YYYYMMDD Fälligkeitsdatum der Rate
      ↳type + string AN Gebühren- bzw. Ratentyp (“immediate”, “first”, “date”, “fee”)

Update Order

Request

Mit dem Update kann die Referenznummer einer Bestellung nachträglich geändert werden. Dies ist nur vor Aktivierung der Bestellung (InvoiceCreated-Request) möglich.

Data-Knoten

<data 
    requesttype="UPDATE_ORDER" 
    apiversion="2.0.0">
    <!-- Request Daten -->
</data>
Attribute Format Werte Info
requesttype string UPDATE_ORDER Name des Requests
apiversion string 2.0.0 BillPay API Version

Default Params-Knoten (Händler Zugangsdaten)

Ihre Händler-Zugangsdaten werden Ihnen durch BillPay zur Verfügung gestellt.

<default_params
        mid="1234"
        pid="9999"
        passwordhash="25d55ad283aa400af464c76d713c07ad" />
updateOrderRequest
    .setMerchantId(1234)
    .setPortalId(9999)
    .setApiPassword("clear text password")
Attribute Pflicht Format Info
mid + positive integer Händler ID
pid + positive integer Portal ID
passwordhash + string MD5 Hash des Passworts

Update Params-Knoten

In diesem Knoten wird die Bestellnummer der Bestellung aktualisiert, indem die nach der Autorisierung (Preauthorize-Request) vergebene BillPay-Transaction ID und die neue gewünschte Bestellreferenz übergeben wird.

<update_params
        transactionid="1aa2fb2d-2b78-4393-bf06-be0012dda337"
        reference="Bestellnummer321" />
updateOrderRequest
    .setReference("1591605922_updated")
    .setTransactionId("b61648a3-46a1-4771-834f-903b89510ed9");
Attribute Pflicht Format Werte Info
transactionid + string AN..50 Eindeutige BillPay Transaktionsnummer, welche durch BillPay vergeben wurde
reference + string AN..40 Neue eindeutige Bestell-ID aus dem Händlersystem. Diese Nummer wird als Kenner in der Abrechnungsdatei verwendet, sowie für nachfolgende Anfragen zur Bearbeitung eines Auftrags.
Zulässige Zeichen:
0-9, a-z, A-Z, -,

Regex:
([A-Z]|[a-z]|[0-9]|-|
)*

ID Update List-Knoten

In diesem Knoten werden einzelne id_update-Knoten übergeben, deren Parameter zu aktualisierende Artikel-IDs des Warenkorbs sowie die neue gewünschte ID pro Artikel enthalten.

<id_update_list>
    <id_update articleid="2345" updateid="2345_mod"/>
</id_update_list>
updateOrderRequest.createAndAddUpdateOrder()
    .setNewId("2345")
    .setOldId("2345_mod"); 
``

**Attribute** | **Pflicht** | **Format** | **Werte** | **Info**
--------------|---------------|----------|---------------------|------------
articleid | <span class="positive">+</span> | string | AN..40 | alte Artikelnummer (des Shops)
updateid | <span class="positive">+</span> | string | AN..40 | neue Artikelnummer (der Warenwirtschaft)

**Response**

**Data-Knoten**

```xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<data
        responsetype="UPDATE_ORDER"
        errorcode="0"
        customermessage=""
        merchantmessage=""
        developermessage="">
</data>
System.out.println(requestResponse.getErrorCode());
System.out.println(requestResponse.getMerchantMessage());
System.out.println(requestResponse.getDeveloperMessage());
System.out.println(requestResponse.getCustomerMessage());
Attribute Pflicht Format Werte Info
responsetype + string UPDATE_ORDER Name des Requests zu dem die Response gehört
errorcode + non-negative int N..3 Fehlercode. Der Standardwert ist “0” und bedeutet kein Fehler. Auflistung der Fehlercodes
merchantmessage + string Detaillierte Fehlermeldung für den Händler
customermessage + string Fehlermeldung für den Kunden. Findet für diesen Prozess keine Anwendung.
developermessage + string Detaillierte Fehlermeldung für den Entwickler, der mögliche XSD-Validierungsfehler benennt. Bei fehlerfreier Verarbeitung wird das Feld nicht befüllt.

Get Billpay Bank Data

Request

Für die Zahlart Rechnung (paymenttype=“1”) und Ratenkauf CHE (paymenttype=“3”) können mit dem getBillPayBankData-Request die BillPay-Kontodaten für eine Bestellung angefordert werden. Die Response enthält alle Informationen, die zum Begleichen der Forderung durch den Käufer nötig sind. Ist eine Bestellung bereits aktiviert, enthält diese auch das gesetzte Zahlungsziel.

Data-Knoten

<data 
    requesttype="GET_BILLPAY_BANK_DATA" 
    apiversion="2.0.0">
    <!-- Request Data -->
</data>
Attribute Format Werte Info
requesttype string GET_BILLPAY_BANK_DATA Name des Requests
apiversion string 2.0.0 BillPay API Version

Default Params-Knoten (Händler Zugangsdaten)

Ihre Händler-Zugangsdaten werden Ihnen durch BillPay zur Verfügung gestellt.

<default_params
        mid="1234"
        pid="9999"
        passwordhash="25d55ad283aa400af464c76d713c07ad" />
getBillPayBankDataRequest
    .setMerchantId(1234)
    .setPortalId(9999)
    .setApiPassword("clear text password")
Attribute Pflicht Format Info
mid + positive int Händler ID
pid + positive int Portal ID
passwordhash + string MD5 Hash des Passworts

Order Params-Knoten

 <order_params reference="1519088641" />
getBillPayBankDataRequest.setReference("1519088641");
Attribute Pflicht Format Werte Info
reference + string AN..40 Eindeutige Bestell-ID aus dem Händlersystem. Diese Nummer wird als Kenner in der Abrechnungsdatei verwendet, sowie nachfolgende Anfragen zur Bearbeitung eines Auftrags.
Zulässige Zeichen:
0-9, a-z, A-Z, -,

Regex:
([A-Z]|[a-z]|[0-9]|-|
)*

Response

Die XML Response zu diesen Request liefert alle relevanten Kontoinformationen, die der Kunde zum Begleichen seiner Forderung benötigt.

Data-Knoten

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<data
        responsetype="GET_BILLPAY_BANK_DATA"
        errorcode="0"
        customermessage=""
        merchantmessage=""
        developermessage="">
    <!-- additional response specific data -->
</data>
System.out.println(requestResponse.getErrorCode());
System.out.println(requestResponse.getMerchantMessage());
System.out.println(requestResponse.getDeveloperMessage());
System.out.println(requestResponse.getCustomerMessage());
Attribute Pflicht Format Werte Info
responsetype + string GET_BILLPAY_BANK_DATA Name des Requests zu dem die Response gehört
errorcode + non-negative int N..3 Fehlercode. Der Standardwert ist “0” und bedeutet kein Fehler. Auflistung der Fehlercodes
merchantmessage + string Detaillierte Fehlermeldung für den Händler
customermessage + string Fehlermeldung für den Kunden zur Anzeige im Frontend
developermessage + string Detaillierte Fehlermeldung für den Entwickler, der mögliche XSD-Validierungsfehler benennt. Bei fehlerfreier Verarbeitung wird das Feld nicht befüllt.

Bank Account-Knoten – ausschließlich für Rechnung (paymenttype=“1”) und Ratenkauf Schweiz (paymenttype=“3”)

Mit der “InvoiceCreated”-Response wird im Fall der Zahlarten “Rechnung” & “Ratenkauf Schweiz” die Bankverbindung übertragen, auf die die Zahlung durch den Kunden zu leisten ist. Diese Bankverbindung, sowie das zusätzlich übertragene Fälligkeitsdatum für die Zahlung, muss auf der Rechnung des Kunden (z.B. in der Warensendung enthalten oder per E-Mail zugestellt) ausgedruckt werden.

<bank_account
        accountholder="BillPay GmbH"
        accountnumber="DE07312312312312312"
        bankcode="BELADEBEXXX"
        bankname="Sparkasse Berlin"
        firstduedate="20170707"
        invoicereference="BP1519088641/9999" />
System.out.println(requestResponse.getInvoiceBankAccount().getAccountHolder());
System.out.println(requestResponse.getInvoiceBankAccount().getAccountNumber());
System.out.println(requestResponse.getInvoiceBankAccount().getBankCode());
System.out.println(requestResponse.getInvoiceBankAccount().getBankName());
System.out.println(requestResponse.getInvoiceBankAccount().getInvoiceDueDate());
System.out.println(requestResponse.getInvoiceBankAccount().getInvoiceReference());
Attribute Pflicht Format Werte Info
accountholder + string AN..255 Kontoinhaber/Begünstigter
accountnumber + string AN..40 BillPay IBAN - International Bank Account Number
bankcode + string AN..16 BillPay BIC - Bank Identifier Code
bankname + string AN..255 Name der BillPay Bank
firstduedate + string N..8 Fälligkeitsdatum im Format: YYYYMMDD
invoicereference + string AN..255 Verwendungszweck

Invoice List-Knoten

Der-Knoten liefert die Rechnungsnummer und das Fälligkeitsdatum zurück.

<invoice_list>
    <invoice
        duedate="20170324"
        invoiceid="1234567" />
</invoice_list>        
DueDate dueDate = requestResponse.getDueDates().get(0);

System.out.println(dueDate.getDuedate());
System.out.println(dueDate.getInvoiceid());
Attribute Pflicht Format Werte Info
invoice + Unterknoten des assigned_invoice_number-Knotens
  ↳duedate + string N..8 Fälligkeitsdatum im Format: YYYYMMDD
  ↳invoiceid - string AN..40 Interne BillPay-Rechnungs-/Forderungsnummer
Zeichen:
0-9, a-z, A-Z, -, , #, ., :

Regex:
([A-Z]|[a-z]|[0-9]|-|
|#|:|.)*

Kundendokumente

Ein weiterer Teil der Integration der BillPay Zahlarten umfasst die Anpassung der Kundendokumente (Bestellbestätigung und Rechnung), die durch den Händler an den Kunden gesendet werden. Dies ermöglicht eine positive und nahtlose Kundenerfahrung (Customer Experience) vom Kauf bis zur Bezahlung. Auf den Kundendokumenten sind die zahlartrelevanten Textbausteine von BillPay zu übernehmen.

Beispiel Rechnungen

Rechnung
Lastschrift
PayLater (DE, AT)
Ratenkauf (CH)

Rechnungstexte

Zahlart Deutsch Englisch
Rechnung Vielen Dank, dass Sie sich für die BillPay Rechnung entschieden haben. Bitte überweisen Sie den Rechnungsbetrag innerhalb der Zahlungsfrist unter Angabe des Verwendungszwecks $$ Verwendungszweck $$ auf folgendes Konto:

Kontoinhaber: $$ Kontoinhaber $$
IBAN: $$ IBAN $$
BIC: $$ BIC $$
Bank: $$ Geldinstitut $$
Fälligkeitsdatum: $$ Fälligkeitsdatum $$
Verwendungszweck: $$ Verwendungszweck $$

Bitte beachten Sie, dass Ihre Rechnung nur dann beglichen ist, wenn Ihre Zahlung auf das oben genannte Konto erfolgt.
Thank you for choosing invoice with BillPay as your payment method. Please transfer the total amount due prior to the expiration of the payment due date on the $$ due date $$ to the following account:

Account holder: $$ account holder $$
Bank: $$ financial institution $$
IBAN: $$ IBAN $$
BIC: $$ BIC $$
Due date: $$ due date $$
Reference: $$ reference $$

Please note, the invoice is only considered paid in full, when the total amount due is transferred to the above bank account.
Lastschrift Der fällige Gesamtbetrag wird in den nächsten Tagen von dem bei der Bestellung angegebenen Konto durch die BillPay GmbH abgebucht. In the coming days, the total amount due will be debited from the account you submitted with your order by the BillPay GmbH.
PayLater (DE, AT) Sie haben sich für die Zahlungsweise PayLater entschieden. Bitte beachten Sie, dass zusätzlich zu dem auf dieser Rechnung genannten Rechnungsbetrag weitere Kosten im Zusammenhang mit dem Teilzahlungsgeschäft entstehen. Diese Kosten wurden Ihnen vor Abschluss der Bestellung und auf der Bestellbestätigungsseite angezeigt. Die vollständige Berechnung der zu leistenden Beträge im Zusammenhang mit dem Teilzahlungsgeschäft, sowie sämtliche dazugehörige Informationen werden Sie direkt per E-Mail von der BillPay GmbH erhalten. You have chosen to pay for your order with a BillPay instalment plan. Please note that in addition to the total amount mentioned on this invoice, additional costs are incurred in connection with the instalment plan. These costs were displayed to you before the order was completed and on the order confirmation page. The full calculation of the amounts to be paid in connection with the instalment plan, as well as all related information, will be sent to you via e-mail by the BillPay GmbH.
Ratenkauf (CH) Sie haben sich für die Zahlungsweise Ratenkauf entschieden. Bitte beachten Sie, dass zusätzlich zu dem auf dieser Rechnung genannten Rechnungsbetrag weitere Kosten im Zusammenhang mit dem Ratenkauf entstehen. Diese Kosten wurden Ihnen vor Abschluss der Bestellung und auf der Bestellbestätigungsseite angezeigt. Die vollständige Berechnung der zu leistenden Beträge im Zusammenhang mit dem Ratenkauf, sowie sämtliche dazugehörige Informationen werden Sie direkt per E-Mail von der BillPay GmbH erhalten. You have chosen to pay for your order with BillPay Transaction Credit. Please note that in addition to the total amount mentioned on this invoice, additional costs are incurred in connection with the rate plan. These costs were displayed to you before the order was completed and on the order confirmation page. The full calculation of the amounts to be paid in connection with the rate plan, as well as all related information, will be sent to you via e-mail by the BillPay GmbH.

Beispiel- Requests

Prescore

<?xml version="1.0" encoding="UTF-8"?>
<data requesttype="PRESCORE" apiversion="2.0.0" originofsale="o">
    <default_params mid="1234" pid="9999" passwordhash="25d55ad283aa400af464c76d713c07ad" />
    <customer_details customerid="123456" customertype="e" salutation="Herr" title="" firstname="Thomas" lastname="Testkunde" street="Tinnowitzer Straße" streetnumber="1" addressaddition="" zipcode="10115" city="Berlin" country="DEU" email="anyone@anymail.de" phone="03012345678" cellphone="" dateofbirth="19741012" language="de" ipaddress="80.111.120.1" customergroup="p" />
    <shipping_details usebillingaddress="1" />
    <total shippingname="Express Versand" shippingpricenet="840" shippingpricegross="1000" rebatenet="1681" rebategross="2000" orderamountnet="36134" orderamountgross="43000" currency="EUR" />
    <article_data>
        <article articleid="1234" articlequantity="2" articletype="0" articlename="Shirt" articlecategory="Clothing" articlesubcategory1="Van Laack" articlepricenet="10084" articlepricegross="12000">
        </article> 
        <article articleid="2345" articlequantity="1" articletype="0" articlename="Hose" articlecategory="Clothing" articlesubcategory1="Ralph Lauren"  articlepricenet="16807" articlepricegross="20000">
        </article>    
    </article_data>
    <fraud_detection sessionid="97d3d1b1cc6b0686bbc1f19feec80e6c" />
</data>
private void prescoreExample() throws ParseException {
    //build the request
    PrescoreRequest prescoreRequest = new PrescoreRequest();
    prescoreRequest
        .setMerchantId(1234)
        .setPortalId(9999)
        .setApiPassword("clear text password")
        .setSessionId("clear text session ID");

    prescoreRequest.getEnvironment()
        .setEnv(Environment.Key.TEST);

    prescoreRequest
        .setOriginOfSale(OriginOfSale.ONLINE_SHOP);

    prescoreRequest.getCustomer()
        .setId("123456")
        .setCustomerType(CustomerType.EXISTING_CUSTOMER)
        .setCustomerGroup(CustomerGroup.PRIVATE_CLIENT)
        .setDateOfBirth(new SimpleDateFormat("yyyy/MM/dd").parse("1975/10/12"))
        .setEmail("anymail@example.org")
        .setIpAddress("80.111.120.1")
        .setLanguageIso2("de")
        .getBillingAddress()
            .setSalutation("Herr")
            .setFirstName("Thomas")
            .setLastName("Testkunde")
            .setStreet("Tinnowitzer Straße")
            .setStreetNumber("1")
            .setZipCode("10115")
            .setCity("Berlin")
            .setCountryIso3("DEU")
            .setPhone("03012345678");

    prescoreRequest.getCustomer().createShippingAddress()
        .setSalutation("Herr")
        .setFirstName("Thomas")
        .setLastName("Testkunde")
        .setStreet("Tinnowitzerstrasse")
        .setStreetNumber("1")
        .setZipCode("10115")
        .setCity("Berlin")
        .setCountryIso3("DEU")
        .setPhone("03012345678");

    prescoreRequest.getShipping()
        .setName("Express Versand")
        .setPriceNet(840)
        .setPriceGross(1000);

    prescoreRequest.getCart()
        .setOrderAmountNet(36134)
        .setOrderAmountGross(43000)
        .setCurrencyIso3("EUR")
        .createAndAddRebate()
            .setRebateNet(1681)
            .setRebateGross(2000);

    prescoreRequest.getCart().createAndAddArticle()
        .setId("1234")
        .setQuantity(2)
        .setType(ArticleType.OTHER)
        .setName("Shirt")
        .setCategory("Clothing")
        .setFirstSubCategory("Van Laack")
        .setPriceNet(10084)
        .setPriceGross(12000);

    prescoreRequest.getCart().createAndAddArticle()
        .setId("2345")
        .setQuantity(1)
        .setType(ArticleType.OTHER)
        .setName("Hose")
        .setCategory("Clothing")
        .setFirstSubCategory("Ralph Lauren")
        .setPriceNet(16807)
        .setPriceGross(20000); 

    //sending the request to BillPay and retrieving the response

    PrescoreResponse requestResponse = prescoreRequest.send();

    //getting data out of the response

    if (requestResponse.hasError()) {
        System.out.println(requestResponse.getErrorCode());
        System.out.println(requestResponse.getMerchantMessage());
        System.out.println(requestResponse.getDeveloperMessage());
        System.out.println(requestResponse.getCustomerMessage());
    } else {
        System.out.println(requestResponse.getAllowedPaymentOptions();
        System.out.println(requestResponse.getTransactionId());
        System.out.println(requestResponse.getCorrectedAddress().getStreet());
        System.out.println(requestResponse.getCorrectedAddress().getStreetNumber());
        System.out.println(requestResponse.getCorrectedAddress().getZipCode());
        System.out.println(requestResponse.getCorrectedAddress().getCity());
        System.out.println(requestResponse.getCorrectedAddress().getCountry());

        System.out.println(requestResponse.getInvoiceBankAccount().getAccountHolder());
        System.out.println(requestResponse.getInvoiceBankAccount().getAccountNumber());
        System.out.println(requestResponse.getInvoiceBankAccount().getBankCode());
        System.out.println(requestResponse.getInvoiceBankAccount().getBankName());
        System.out.println(requestResponse.getInvoiceBankAccount().getInvoiceDueDate());
        System.out.println(requestResponse.getInvoiceBankAccount().getInvoiceReference());

    }
}
<?php
use BillPay\Core\Commons\Constants;
use BillPay\Core\Requests\PrescoreFactory;

$prescoreRequest = PrescoreFactory::create();

$prescoreRequest
    ->setMerchantId(1234)
    ->setPortalId(9999)
    ->setApiPassword('clear text password')
    ->setSessionId('clear text session ID')
    ->setOriginOfSaleOnline();

$customer = $prescoreRequest->getCustomer();
$customer->setId('123456')
    ->setIsExistingCustomer()
    ->setIsPrivateCustomer()
    ->setDateOfBirth('1975-10-12')
    ->setEmail('anymail@gmx.de')
    ->setIpAddress('80.111.120.1')
    ->setLanguageIso2('de')
    ->getBillingAddress()
        ->setSalutation('Herr')
        ->setFirstName('Thomas')
        ->setLastName('Testkunde')
        ->setStreet('Tinnowitzer Straße')
        ->setStreetNumber('1')
        ->setZipCode('10115')
        ->setCity('Berlin')
        ->setCountryIso3('DEU')
        ->setPhone('03012345678');

$customer->getShippingAddress()
    ->setSalutation('Herr')
    ->setFirstName('Thomas')
    ->setLastName('Testkunde')
    ->setStreet('Hardenberger Straße')
    ->setStreetNumber('1')
    ->setZipCode('10623')
    ->setCity('Berlin')
    ->setCountryIso3('DEU')
    ->setPhone('03012345678');

$company = $customer->getCompany();
$company->setLegalFormGmbh()
    ->setName('Testfirma')
    ->setRegisterNumber('HRB 122 029 B')
    ->setCompanyProprietor('Testinhaber Owner')
    ->setTaxNumber('DE268874183');

$cart = $prescoreRequest->getCart();
$cart->createAndAddArticle()->setName('Shirt')
    ->setPriceGross('12000')
    ->setPriceNet('10084')
    ->setQuantity('2')
    ->setCategory('Clothing')
    ->setFirstSubCategory('Van Laack')
    ->setId('1234');
$cart->createAndAddArticle()->setName('Hose')
    ->setPriceGross('20000')
    ->setPriceNet('16807')
    ->setQuantity('1')
    ->setCategory('Hose')
    ->setFirstSubCategory('Ralph Lauren')
    ->setId('2345');    

$shipping = $prescoreRequest->getShipping();
$shipping->setPriceGross('1000')
    ->setPriceNet('840')
    ->setTrackingNumber('123456')
    ->setName('Express Versand');

$rebate = $cart->createRebate();
$rebate->setPriceGross('2000')
    ->setPriceNet('1681');
$cart->setOrderAmountGross('43000')
    ->setOrderAmountNet('36134')
    ->setCurrencyIso3('EUR')
    ->addRebate($rebate);   

$prescoreRequest->setSessionId('session id'); 

// send the request to BillPay and retrieve the response
$prescoreResponse = $prescoreRequest->send();

// get data out of the response
if ($prescoreResponse->isError()) {
    echo $prescoreResponse->getStatus();
    echo $prescoreResponse->getErrorCode();
    echo $prescoreResponse->getMerchantMessage();
    echo $prescoreResponse->getDeveloperMessage();
    echo $prescoreResponse->getCustomerMessage();
} else {
    echo $prescoreResponse->getStatus();
    echo $prescoreResponse->getTransactionId();
    echo $prescoreResponse->getCustomerRestriction();
    $allowed = $prescoreResponse->getAllowedPaymentMethods();
    foreach($allowed as $billpaypm){
        echo $billpaypm->getCustomerGroup();
        echo $billpaypm->getPaymentId();
        echo $billpaypm->getName();
    }
}

echo $prescoreResponse->getNormalizedAddress()->getStreet();
echo $prescoreResponse->getNormalizedAddress()->getStreetNumber();
echo $prescoreResponse->getNormalizedAddress()->getZipCode();
echo $prescoreResponse->getNormalizedAddress()->getCity();
echo $prescoreResponse->getNormalizedAddress()->getCountry();

Preauth: Rechnung-B2C

<?xml version="1.0" encoding="UTF-8"?>
<data requesttype="PREAUTHORIZE" tcaccepted="1" expecteddaystillshipping="0" manualcapture="0" paymenttype="1" apiversion="2.0.0" originofsale="o">
    <default_params mid="1234" pid="9999" passwordhash="25d55ad283aa400af464c76d713c07ad" />
    <customer_details customerid="123456" customertype="e" salutation="Herr" title="" firstname="Thomas" lastname="Testkunde" street="Tinnowitzer Straße" streetnumber="1" addressaddition="" zipcode="10115" city="Berlin" country="DEU" email="anyone@anymail.de" phone="03012345678" cellphone="" dateofbirth="19741012" language="de" ipaddress="80.111.120.1" customergroup="p" />
    <shipping_details usebillingaddress="1" />
    <total shippingname="none" shippingpricenet="0" shippingpricegross="0" rebatenet="930" rebategross="1000" orderamountnet="40204" orderamountgross="43230" currency="EUR" reference="1519088641" merchantinvoicenumber="1234567" trackingnumber="ABZ12398892131"/>
    <article_data>
        <article articleid="1234" articlequantity="2" articletype="0" articlename="Shirt" articlecategory="Clothing" articlesubcategory1="Van Laack" articlepricenet="10084" articlepricegross="12000" />
        <article articleid="2345" articlequantity="1" articletype="0" articlename="Hose" articlecategory="Clothing" articlesubcategory1="Ralph Lauren" articlepricenet="16807" articlepricegross="20000" />    
    </article_data>
    <fraud_detection sessionid="97d3d1b1cc6b0686bbc1f19feec80e6c" />
</data>
private void preauthorizeInvoiceExample() throws ParseException {
    //build the request
    PreauthorizeRequest preauthorizeRequest = new PreauthorizeRequest();
    preauthorizeRequest
        .setMerchantId(1234)
        .setPortalId(9999)
        .setApiPassword("clear text password")
        .setSessionId("clear text session ID");

    preauthorizeRequest.getEnvironment()
        .setEnv(Environment.Key.TEST);

    preauthorizeRequest
        .setTermsAndConditionAccepted(true)
        .setManualCapture(false)
        .setOriginOfSale(OriginOfSale.ONLINE_SHOP);

    preauthorizeRequest.getPaymentDetails()
        .setPaymentType(PaymentType.INVOICE);

    preauthorizeRequest.getCustomer()
        .setId("123456")
        .setCustomerType(CustomerType.EXISTING_CUSTOMER)
        .setCustomerGroup(CustomerGroup.PRIVATE_CLIENT)
        .setDateOfBirth(new SimpleDateFormat("yyyy/MM/dd").parse("1980/10/14"))
        .setEmail("anymail@example.org")
        .setIpAddress("80.111.120.1")
        .setLanguageIso2("de")
        .getBillingAddress()
            .setSalutation("Herr")
            .setFirstName("Thomas")
            .setLastName("Testkunde")
            .setStreet("Zinnowitzer Straße")
            .setStreetNumber("1")
            .setZipCode("10115")
            .setCity("Berlin")
            .setCountryIso3("DEU")
            .setPhone("03012345678");

    preauthorizeRequest.getCustomer().createShippingAddress()
        .setSalutation("Herr")
        .setFirstName("Thomas")
        .setLastName("Testkunde")
        .setStreet("Zinnowitzer Straße")
        .setStreetNumber("1")
        .setZipCode("10115")
        .setCity("Berlin")
        .setCountryIso3("DEU")
        .setPhone("03012345678");

    preauthorizeRequest.getShipping()
        .setName("Express Versand")
        .setPriceNet(840)
        .setPriceGross(1000)
        .setTrackingNumber("ABZ12398892131");

    preauthorizeRequest.getCart()
         .setOrderAmountNet(36134)
         .setOrderAmountGross(43000)
         .setCurrencyIso3("EUR")
         .setReference("1519088641")
         .setInvoiceNumber("1234567")
         .createAndAddRebate()
            .setRebateNet(1681)
            .setRebateGross(2000);

    preauthorizeRequest.getCart().createAndAddArticle()
        .setId("1234")
        .setQuantity(2)
        .setType(ArticleType.OTHER)
        .setName("Shirt")
        .setCategory("Clothing")
        .setFirstSubCategory("Van Laack")
        .setPriceNet(10084)
        .setPriceGross(12000);

    preauthorizeRequest.getCart().createAndAddArticle()
        .setId("2345")
        .setQuantity(1)
        .setType(ArticleType.OTHER)
        .setName("Hose")
        .setCategory("Clothing")
        .setFirstSubCategory("Ralph Lauren")
        .setPriceNet(16807)
        .setPriceGross(20000);  

    //sending the request to BillPay and retrieving the response

    PreauthorizeResponse requestResponse = preauthorizeRequest.send();

    //getting data out of the response

    if (requestResponse.hasError()) {
        System.out.println(requestResponse.getErrorCode());
        System.out.println(requestResponse.getMerchantMessage());
        System.out.println(requestResponse.getDeveloperMessage());
        System.out.println(requestResponse.getCustomerMessage());
    } else {
        System.out.println(requestResponse.getTransactionId());
        System.out.println(requestResponse.getCorrectedAddress().getStreet());
        System.out.println(requestResponse.getCorrectedAddress().getStreetNumber());
        System.out.println(requestResponse.getCorrectedAddress().getZipCode());
        System.out.println(requestResponse.getCorrectedAddress().getCity());
        System.out.println(requestResponse.getCorrectedAddress().getCountry());

        System.out.println(requestResponse.getInvoiceBankAccount().isActivationPerformed());
        System.out.println(requestResponse.getInvoiceBankAccount().getAccountHolder());
        System.out.println(requestResponse.getInvoiceBankAccount().getAccountNumber());
        System.out.println(requestResponse.getInvoiceBankAccount().getBankCode());
        System.out.println(requestResponse.getInvoiceBankAccount().getBankName());
        System.out.println(requestResponse.getInvoiceBankAccount().getInvoiceDueDate());
        System.out.println(requestResponse.getInvoiceBankAccount().getInvoiceReference());

    }
}
<?php
use BillPay\Core\Commons\Constants;
use BillPay\Core\Requests\PreauthorizeFactory;

$preauthorizeRequest = preauthorizeRequest::create();
$preauthorizeRequest->payment()->setById(Constants::PAYMENT_METHOD_ID_INVOICE);
$payment = $preauthorizeRequest->getPaymentMethod();
$payment->getPaymentMethod()
            ->acceptTermsOfUse();

$preauthorizeRequest
    ->setMerchantId(1234)
    ->setPortalId(9999)
    ->setApiPassword('clear text password')
    ->setSessionId('clear text session ID')
    ->setOriginOfSaleOnline()
    ->disableManualCapture();

$customer = $preauthorizeRequest->getCustomer();
$customer->setId('123456')
    ->setIsExistingCustomer()
    ->setIsPrivateCustomer()
    ->setDateOfBirth('1975-10-12')
    ->setEmail('anymail@gmx.de')
    ->setIpAddress('80.111.120.1')
    ->setLanguageIso2('de')
    ->getBillingAddress()
        ->setSalutation('Herr')
        ->setFirstName('Thomas')
        ->setLastName('Testkunde')
        ->setStreet('Tinnowitzer Straße')
        ->setStreetNumber('1')
        ->setZipCode('10115')
        ->setCity('Berlin')
        ->setCountryIso3('DEU')
        ->setPhone('03012345678');

/* 
if the shipping address is the same as the billing address, you do not need to do anything here.  If the shipping address is not the same as the billing address, the shipping address is set as follows:
*/
$customer->getShippingAddress()
    ->setSalutation('Herr')
    ->setFirstName('Thomas')
    ->setLastName('Testkunde')
    ->setStreet('Hardenberger Straße')
    ->setStreetNumber('1')
    ->setZipCode('10623')
    ->setCity('Berlin')
    ->setCountryIso3('DEU');

$cart = $preauthorizeRequest->getCart();
$cart->createAndAddArticle()->setName('Shirt')
    ->setPriceGross('12000')
    ->setPriceNet('10084')
    ->setQuantity('2')
    ->setCategory('Clothing')
    ->setFirstSubCategory('Van Laack')
    ->setId('1234');

$cart->createAndAddArticle()->setName('Hose')
    ->setPriceGross('20000')
    ->setPriceNet('16807')
    ->setQuantity('1')
    ->setCategory('Hose')
    ->setFirstSubCategory('Ralph Lauren')
    ->setId('2345');  

$shipping = $preauthorizeRequest->getShipping();
$shipping->setPriceGross('1000')
    ->setPriceNet('840')
    ->setTrackingNumber('123456')
    ->setName('Express Versand');

$rebate = $cart->createRebate();
$rebate->setPriceGross('2000')
    ->setPriceNet('1681');

$cart->setOrderAmountGross('43000')
    ->setOrderAmountNet('36134')
    ->setCurrencyIso3('EUR')
    ->addRebate($rebate); 

$preauthorizeRequest->setSessionId('session id'); 

// send the request to BillPay and retrieve the response
$preauthorizeResponse = $preauthorizeRequest->send();

// get data out of the response
if ($preauthorizeResponse->isError()) {
    echo $preauthorizeResponse->getStatus();
    echo $preauthorizeResponse->getErrorCode();
    echo $preauthorizeResponse->getMerchantMessage();
    echo $preauthorizeResponse->getDeveloperMessage();
    echo $preauthorizeResponse->getCustomerMessage();
} else {
    echo $preauthorizeResponse->getStatus();
    echo $preauthorizeResponse->getTransactionId();

    echo $preauthorizeResponse->getCustomerRestriction();

    $bankAccount = $preauthorizeResponse->getInvoiceBankAccount();
    echo $bankAccount->isActivationPerformed();
    echo $bankAccount->getAccountHolder();
    echo $bankAccount->getAccountNumber();
    echo $bankAccount->getBankCode();
    echo $bankAccount->getBankName();
    echo $bankAccount->getInvoiceDueDate();
    echo $bankAccount->getInvoiceReference();
    echo $bankAccount->getEsrReference();
    echo $bankAccount->getEsrCodeLine();

    $invoiceNumber = $preauthorizeResponse->getInvoiceNumbers();
    echo $invoiceNumber->getInvoiceId();
    echo $invoiceNumber->getBillpayInvoiceNumber();
}
echo $preauthorizeResponse->getNormalizedAddress()->getStreet();
echo $preauthorizeResponse->getNormalizedAddress()->getStreetNumber();
echo $preauthorizeResponse->getNormalizedAddress()->getZipCode();
echo $preauthorizeResponse->getNormalizedAddress()->getCity();
echo $preauthorizeResponse->getNormalizedAddress()->getCountry();

Preauth: Rechnung-B2B

<?xml version="1.0" encoding="UTF-8"?>
<data requesttype="PREAUTHORIZE" tcaccepted="1" expecteddaystillshipping="0" manualcapture="0" paymenttype="1" apiversion="2.0.0" originofsale="o">
    <default_params mid="1234" pid="9999" passwordhash="25d55ad283aa400af464c76d713c07ad" />
    <customer_details customerid="123456" customertype="e" salutation="Herr" title="" firstname="Thomas" lastname="Testkunde" street="Tinnowitzerstrasse" streetnumber="1" addressaddition="" zipcode="10115" city="Berlin" country="DEU" email="anymail@gmx.de" phone="03012345678" cellphone="" dateofbirth="19741012" language="de" ipaddress="80.111.120.1" customergroup="b" />
    <shipping_details usebillingaddress="1" />
    <company_details name="Testfirma" legalform="GmbH" registernumber="HRB 122 029 B" holdername="Testinhaber" taxnumber="DE268874183" />
    <total shippingname="Express Versand" shippingpricenet="840" shippingpricegross="1000" rebatenet="1681" rebategross="2000" orderamountnet="36134" orderamountgross="43000" currency="EUR" reference="123456" merchantinvoicenumber="1234567" trackingnumber="ABZ12398892131" />
    <article_data>
        <article articleid="1234" articlequantity="2" articletype="0" articlename="Shirt" articlecategory="Clothing" articlesubcategory1="Van Laack" articlepricenet="10084" articlepricegross="12000" />
        <article articleid="2345" articlequantity="1" articletype="0" articlename="Hose" articlecategory="Clothing" articlesubcategory1="Ralph Lauren" articlepricenet="16807" articlepricegross="20000" />
    </article_data>
    <fraud_detection sessionid="97d3d1b1cc6b0686bbc1f19feec80e6c" />
</data>
private void preauthorizeInvoiceExample() throws ParseException {
    //build the request
    PreauthorizeRequest preauthorizeRequest = new PreauthorizeRequest();
    preauthorizeRequest
        .setMerchantId(1234)
        .setPortalId(9999)
        .setApiPassword("clear text password")
        .setSessionId("clear text session ID");

    preauthorizeRequest.getEnvironment()
        .setEnv(Environment.Key.TEST);

    preauthorizeRequest
        .setTermsAndConditionAccepted(true)
        .setManualCapture(false)
        .setOriginOfSale(OriginOfSale.ONLINE_SHOP);

    preauthorizeRequest.getPaymentDetails()
        .setPaymentType(PaymentType.INVOICE);

    preauthorizeRequest.getCustomer()
        .setId("123456")
        .setCustomerType(CustomerType.EXISTING_CUSTOMER)
        .setCustomerGroup(CustomerGroup.BUSINESS_CLIENT)
        .setEmail("anymail@example.org")
        .setIpAddress("80.111.120.1")
        .setLanguageIso2("de")
        .getBillingAddress()
            .setSalutation("Herr")
            .setFirstName("Thomas")
            .setLastName("Testkunde")
            .setStreet("Zinnowitzer Straße")
            .setStreetNumber("1")
            .setZipCode("10115")
            .setCity("Berlin")
            .setCountryIso3("DEU")
            .setPhone("03012345678");

    preauthorizeRequest.getCustomer().createShippingAddress()
        .setSalutation("Herr")
        .setFirstName("Thomas")
        .setLastName("Testkunde")
        .setStreet("Zinnowitzer Straße")
        .setStreetNumber("1")
        .setZipCode("10115")
        .setCity("Berlin")
        .setCountryIso3("DEU")
        .setPhone("03012345678");

    preauthorizeRequest.getCustomer().createCompany()
        .setName("Testfirma")
        .setLegalForm("GmbH")
        .setRegisterNumber("HRB 122 029 B")
        .setTaxNumber("DE268874183")
        .setCompanyProprietor("Testinhaber Owner");   

    preauthorizeRequest.getShipping()
        .setName("Express Versand")
        .setPriceNet(840)
        .setPriceGross(1000)
        .setTrackingNumber("ABZ12398892131");

    preauthorizeRequest.getCart()
         .setOrderAmountNet(36134)
         .setOrderAmountGross(43000)
         .setCurrencyIso3("EUR")
         .setReference("1519088641")
         .setInvoiceNumber("1234567")
         .createAndAddRebate()
            .setRebateNet(1681)
            .setRebateGross(2000);

    preauthorizeRequest.getCart().createAndAddArticle()
        .setId("1234")
        .setQuantity(2)
        .setType(ArticleType.OTHER)
        .setName("Shirt")
        .setCategory("Clothing")
        .setFirstSubCategory("Van Laack")
        .setPriceNet(10084)
        .setPriceGross(12000);

    preauthorizeRequest.getCart().createAndAddArticle()
        .setId("2345")
        .setQuantity(1)
        .setType(ArticleType.OTHER)
        .setName("Hose")
        .setCategory("Clothing")
        .setFirstSubCategory("Ralph Lauren")
        .setPriceNet(16807)
        .setPriceGross(20000);  

    //sending the request to BillPay and retrieving the response

    PreauthorizeResponse requestResponse = preauthorizeRequest.send();

    //getting data out of the response

    if (requestResponse.hasError()) {
        System.out.println(requestResponse.getErrorCode());
        System.out.println(requestResponse.getMerchantMessage());
        System.out.println(requestResponse.getDeveloperMessage());
        System.out.println(requestResponse.getCustomerMessage());
    } else {
        System.out.println(requestResponse.getTransactionId());
        System.out.println(requestResponse.getCorrectedAddress().getStreet());
        System.out.println(requestResponse.getCorrectedAddress().getStreetNumber());
        System.out.println(requestResponse.getCorrectedAddress().getZipCode());
        System.out.println(requestResponse.getCorrectedAddress().getCity());
        System.out.println(requestResponse.getCorrectedAddress().getCountry());

        System.out.println(requestResponse.getInvoiceBankAccount().isActivationPerformed());
        System.out.println(requestResponse.getInvoiceBankAccount().getAccountHolder());
        System.out.println(requestResponse.getInvoiceBankAccount().getAccountNumber());
        System.out.println(requestResponse.getInvoiceBankAccount().getBankCode());
        System.out.println(requestResponse.getInvoiceBankAccount().getBankName());
        System.out.println(requestResponse.getInvoiceBankAccount().getInvoiceDueDate());
        System.out.println(requestResponse.getInvoiceBankAccount().getInvoiceReference());

    }
}
<?php
use BillPay\Core\Commons\Constants;
use BillPay\Core\Requests\PreauthorizeFactory;

$preauthorizeRequest = preauthorizeRequest::create();
$preauthorizeRequest->payment()->setById(Constants::PAYMENT_METHOD_ID_INVOICE);
$payment = $preauthorizeRequest->getPaymentMethod();
$payment->getPaymentMethod()
            ->acceptTermsOfUse();

$preauthorizeRequest
    ->setMerchantId(1234)
    ->setPortalId(9999)
    ->setApiPassword('clear text password')
    ->setSessionId('clear text session ID')
    ->setOriginOfSaleOnline()
    ->disableManualCapture();

$customer = $preauthorizeRequest->getCustomer();
$customer->setId('123456')
    ->setIsExistingCustomer()
    ->setIsPrivateCustomer()
    ->setDateOfBirth('1975-10-12')
    ->setEmail('anymail@gmx.de')
    ->setIpAddress('80.111.120.1')
    ->setLanguageIso2('de')
    ->getBillingAddress()
        ->setSalutation('Herr')
        ->setFirstName('Thomas')
        ->setLastName('Testkunde')
        ->setStreet('Tinnowitzer Straße')
        ->setStreetNumber('1')
        ->setZipCode('10115')
        ->setCity('Berlin')
        ->setCountryIso3('DEU')
        ->setPhone('03012345678');

/* 
if the shipping address is the same as the billing address, you do not need to do anything here.  If the shipping address is not the same as the billing address, the shipping address is set as follows:
*/
$customer->getShippingAddress()
    ->setSalutation('Herr')
    ->setFirstName('Thomas')
    ->setLastName('Testkunde')
    ->setStreet('Hardenberger Straße')
    ->setStreetNumber('1')
    ->setZipCode('10623')
    ->setCity('Berlin')
    ->setCountryIso3('DEU');

$company = $customer->getCompany();
$company->setLegalFormGmbh()
    ->setName('Testfirma')
    ->setRegisterNumber('HRB 122 029 B')
    ->setCompanyProprietor('Testinhaber Owner')
    ->setTaxNumber('DE268874183');

$cart = $preauthorizeRequest->getCart();
$cart->createAndAddArticle()->setName('Shirt')
    ->setPriceGross('12000')
    ->setPriceNet('10084')
    ->setQuantity('2')
    ->setCategory('Clothing')
    ->setFirstSubCategory('Van Laack')
    ->setId('1234');

$cart->createAndAddArticle()->setName('Hose')
    ->setPriceGross('20000')
    ->setPriceNet('16807')
    ->setQuantity('1')
    ->setCategory('Hose')
    ->setFirstSubCategory('Ralph Lauren')
    ->setId('2345');  

$shipping = $preauthorizeRequest->getShipping();
$shipping->setPriceGross('1000')
    ->setPriceNet('840')
    ->setTrackingNumber('123456')
    ->setName('Express Versand');

$rebate = $cart->createRebate();
$rebate->setPriceGross('2000')
    ->setPriceNet('1681');

$cart->setOrderAmountGross('43000')
    ->setOrderAmountNet('36134')
    ->setCurrencyIso3('EUR')
    ->addRebate($rebate); 

$preauthorizeRequest->setSessionId('session id'); 

// send the request to BillPay and retrieve the response
$preauthorizeResponse = $preauthorizeRequest->send();

// get data out of the response
if ($preauthorizeResponse->isError()) {
    echo $preauthorizeResponse->getStatus();
    echo $preauthorizeResponse->getErrorCode();
    echo $preauthorizeResponse->getMerchantMessage();
    echo $preauthorizeResponse->getDeveloperMessage();
    echo $preauthorizeResponse->getCustomerMessage();
} else {
    echo $preauthorizeResponse->getStatus();
    echo $preauthorizeResponse->getTransactionId();

    echo $preauthorizeResponse->getCustomerRestriction();

    $bankAccount = $preauthorizeResponse->getInvoiceBankAccount();
    echo $bankAccount->isActivationPerformed();
    echo $bankAccount->getAccountHolder();
    echo $bankAccount->getAccountNumber();
    echo $bankAccount->getBankCode();
    echo $bankAccount->getBankName();
    echo $bankAccount->getInvoiceDueDate();
    echo $bankAccount->getInvoiceReference();
    echo $bankAccount->getEsrReference();
    echo $bankAccount->getEsrCodeLine();

    $invoiceNumber = $preauthorizeResponse->getInvoiceNumbers();
    echo $invoiceNumber->getInvoiceId();
    echo $invoiceNumber->getBillpayInvoiceNumber();
}
echo $preauthorizeResponse->getNormalizedAddress()->getStreet();
echo $preauthorizeResponse->getNormalizedAddress()->getStreetNumber();
echo $preauthorizeResponse->getNormalizedAddress()->getZipCode();
echo $preauthorizeResponse->getNormalizedAddress()->getCity();
echo $preauthorizeResponse->getNormalizedAddress()->getCountry();

Preauth: Lastschrift

<?xml version="1.0" encoding="UTF-8"?>
<data requesttype="PREAUTHORIZE" tcaccepted="1" expecteddaystillshipping="0" manualcapture="0" paymenttype="2" apiversion="2.0.0" originofsale="o">
    <default_params mid="1234" pid="9999" passwordhash="25d55ad283aa400af464c76d713c07ad" />
    <customer_details customerid="123456" customertype="e" salutation="Herr" title="" firstname="Thomas" lastname="Testkunde" street="Tinnowitzer Straße" streetnumber="1" addressaddition="" zipcode="10115" city="Berlin" country="DEU" email="anyone@anymail.de" phone="03012345678" cellphone="" dateofbirth="19741012" language="de" ipaddress="80.111.120.1" customergroup="p" />
    <shipping_details usebillingaddress="1" />
    <total shippingname="none" shippingpricenet="0" shippingpricegross="0" rebatenet="930" rebategross="1000" orderamountnet="40204" orderamountgross="43230" currency="EUR" reference="1519088641" merchantinvoicenumber="1234567" trackingnumber="ABZ12398892131" />
    <article_data>
        <article articleid="1234" articlequantity="2" articletype="0" articlename="Shirt" articlecategory="Clothing" articlesubcategory1="Van Laack" articlepricenet="10084" articlepricegross="12000" />
        <article articleid="2345" articlequantity="1" articletype="0" articlename="Hose" articlecategory="Clothing" articlesubcategory1="Ralph Lauren" articlepricenet="16807" articlepricegross="20000" />    
    </article_data>
    <bank_account accountholder="Thomas Testkunde" accountnumber="DE12500105170648489890" sortcode="" />
    <fraud_detection sessionid="97d3d1b1cc6b0686bbc1f19feec80e6c" />
</data>
private void preauthorizeInvoiceExample() throws ParseException {
    //build the request
    PreauthorizeRequest preauthorizeRequest = new PreauthorizeRequest();
    preauthorizeRequest
        .setMerchantId(1234)
        .setPortalId(9999)
        .setApiPassword("clear text password")
        .setSessionId("clear text session ID");

    preauthorizeRequest.getEnvironment()
        .setEnv(Environment.Key.TEST);

    preauthorizeRequest
        .setTermsAndConditionAccepted(true)
        .setManualCapture(false)
        .setOriginOfSale(OriginOfSale.ONLINE_SHOP);

    preauthorizeRequest.getPaymentDetails()
        .setPaymentType(PaymentType.DIRECT_DEBIT);

    preauthorizeRequest.getCustomer()
        .setId("123456")
        .setCustomerType(CustomerType.EXISTING_CUSTOMER)
        .setCustomerGroup(CustomerGroup.PRIVATE_CLIENT)
        .setDateOfBirth(new SimpleDateFormat("yyyy/MM/dd").parse("1980/10/14"))
        .setEmail("anymail@example.org")
        .setIpAddress("80.111.120.1")
        .setLanguageIso2("de")
        .getBillingAddress()
            .setSalutation("Herr")
            .setFirstName("Thomas")
            .setLastName("Testkunde")
            .setStreet("Zinnowitzer Straße")
            .setStreetNumber("1")
            .setZipCode("10115")
            .setCity("Berlin")
            .setCountryIso3("DEU")
            .setPhone("03012345678");

    preauthorizeRequest.getCustomer().createShippingAddress()
        .setSalutation("Herr")
        .setFirstName("Thomas")
        .setLastName("Testkunde")
        .setStreet("Zinnowitzer Straße")
        .setStreetNumber("1")
        .setZipCode("10115")
        .setCity("Berlin")
        .setCountryIso3("DEU")
        .setPhone("03012345678");

    preauthorizeRequest.getShipping()
        .setName("Express Versand")
        .setPriceNet(840)
        .setPriceGross(1000)
        .setTrackingNumber("ABZ12398892131");
    preauthorizeRequest.getCart()
         .setOrderAmountNet(36134)
         .setOrderAmountGross(43000)
         .setCurrencyIso3("EUR")
         .setReference("1519088641")
         .setInvoiceNumber("1234567")
         .createAndAddRebate()
            .setRebateNet(1681)
            .setRebateGross(2000);

    preauthorizeRequest.getCart().createAndAddArticle()
        .setId("1234")
        .setQuantity(2)
        .setType(ArticleType.OTHER)
        .setName("Shirt")
        .setCategory("Clothing")
        .setFirstSubCategory("Van Laack")
        .setPriceNet(10084)
        .setPriceGross(12000);

    preauthorizeRequest.getCart().createAndAddArticle()
        .setId("2345")
        .setQuantity(1)
        .setType(ArticleType.OTHER)
        .setName("Hose")
        .setCategory("Clothing")
        .setFirstSubCategory("Ralph Lauren")
        .setPriceNet(16807)
        .setPriceGross(20000);  

    preauthorizeRequest.getPaymentDetails()
         .createBankAccount()
         .setAccountHolder("Thomas Testkunde")
         .setAccountNumber("DE12500105170648489890");    

    //sending the request to BillPay and retrieving the response

    PreauthorizeResponse requestResponse = preauthorizeRequest.send();

    //getting data out of the response

    if (requestResponse.hasError()) {
        System.out.println(requestResponse.getErrorCode());
        System.out.println(requestResponse.getMerchantMessage());
        System.out.println(requestResponse.getDeveloperMessage());
        System.out.println(requestResponse.getCustomerMessage());
    } else {
        System.out.println(requestResponse.getTransactionId());
        System.out.println(requestResponse.getCorrectedAddress().getStreet());
        System.out.println(requestResponse.getCorrectedAddress().getStreetNumber());
        System.out.println(requestResponse.getCorrectedAddress().getZipCode());
        System.out.println(requestResponse.getCorrectedAddress().getCity());
        System.out.println(requestResponse.getCorrectedAddress().getCountry());

    }
}
<?php
use BillPay\Core\Commons\Constants;
use BillPay\Core\Requests\PreauthorizeFactory;

$preauthorizeRequest = preauthorizeRequest::create();
$preauthorizeRequest->payment()->setById(Constants::PAYMENT_METHOD_ID_DIRECT_DEBIT);
$payment = $preauthorizeRequest->getPaymentMethod();
$payment->getPaymentMethod()
            ->acceptTermsOfUse();

$preauthorizeRequest
    ->setMerchantId(1234)
    ->setPortalId(9999)
    ->setApiPassword('clear text password')
    ->setSessionId('clear text session ID')
    ->setOriginOfSaleOnline()
    ->disableManualCapture();

$customer = $preauthorizeRequest->getCustomer();
$customer->setId('123456')
    ->setIsExistingCustomer()
    ->setIsPrivateCustomer()
    ->setDateOfBirth('1975-10-12')
    ->setEmail('anymail@gmx.de')
    ->setIpAddress('80.111.120.1')
    ->setLanguageIso2('de')
    ->getBillingAddress()
        ->setSalutation('Herr')
        ->setFirstName('Thomas')
        ->setLastName('Testkunde')
        ->setStreet('Tinnowitzer Straße')
        ->setStreetNumber('1')
        ->setZipCode('10115')
        ->setCity('Berlin')
        ->setCountryIso3('DEU')
        ->setPhone('03012345678');

/* 
if the shipping address is the same as the billing address, you do not need to do anything here.  If the shipping address is not the same as the billing address, the shipping address is set as follows:
*/
$customer->getShippingAddress()
    ->setSalutation('Herr')
    ->setFirstName('Thomas')
    ->setLastName('Testkunde')
    ->setStreet('Hardenberger Straße')
    ->setStreetNumber('1')
    ->setZipCode('10623')
    ->setCity('Berlin')
    ->setCountryIso3('DEU');

$preauthorizeRequest->getBankAccount()
            ->setAccountHolder('Thomas Testkunde')
            ->setAccountNumber('DE12500105170648489890')
            ->setSortCode('');    

$cart = $preauthorizeRequest->getCart();
$cart->createAndAddArticle()->setName('Shirt')
    ->setPriceGross('12000')
    ->setPriceNet('10084')
    ->setQuantity('2')
    ->setCategory('Clothing')
    ->setFirstSubCategory('Van Laack')
    ->setId('1234');

$cart->createAndAddArticle()->setName('Hose')
    ->setPriceGross('20000')
    ->setPriceNet('16807')
    ->setQuantity('1')
    ->setCategory('Hose')
    ->setFirstSubCategory('Ralph Lauren')
    ->setId('2345');  

$shipping = $preauthorizeRequest->getShipping();
$shipping->setPriceGross('1000')
    ->setPriceNet('840')
    ->setTrackingNumber('123456')
    ->setName('Express Versand');

$rebate = $cart->createRebate();
$rebate->setPriceGross('2000')
    ->setPriceNet('1681');

$cart->setOrderAmountGross('43000')
    ->setOrderAmountNet('36134')
    ->setCurrencyIso3('EUR')
    ->addRebate($rebate); 

$preauthorizeRequest->setSessionId('session id'); 

// send the request to BillPay and retrieve the response
$preauthorizeResponse = $preauthorizeRequest->send();

// get data out of the response
if ($preauthorizeResponse->isError()) {
    echo $preauthorizeResponse->getStatus();
    echo $preauthorizeResponse->getErrorCode();
    echo $preauthorizeResponse->getMerchantMessage();
    echo $preauthorizeResponse->getDeveloperMessage();
    echo $preauthorizeResponse->getCustomerMessage();
} else {
    echo $preauthorizeResponse->getStatus();
    echo $preauthorizeResponse->getTransactionId();

    echo $preauthorizeResponse->getCustomerRestriction();

    $invoiceNumber = $preauthorizeResponse->getInvoiceNumbers();
    echo $invoiceNumber->getInvoiceId();
    echo $invoiceNumber->getBillpayInvoiceNumber();
}
echo $preauthorizeResponse->getNormalizedAddress()->getStreet();
echo $preauthorizeResponse->getNormalizedAddress()->getStreetNumber();
echo $preauthorizeResponse->getNormalizedAddress()->getZipCode();
echo $preauthorizeResponse->getNormalizedAddress()->getCity();
echo $preauthorizeResponse->getNormalizedAddress()->getCountry();

Preauth: PayLater

<?xml version="1.0" encoding="UTF-8"?>
<data requesttype="PREAUTHORIZE" tcaccepted="1" expecteddaystillshipping="0" manualcapture="0" paymenttype="4" apiversion="2.0.0" originofsale="o">
    <default_params mid="1234" pid="9999" passwordhash="25d55ad283aa400af464c76d713c07ad" />
    <customer_details customerid="123456" customertype="e" salutation="Herr" title="" firstname="Thomas" lastname="Testkunde" street="Tinnowitzer Straße" streetnumber="1" addressaddition="" zipcode="10115" city="Berlin" country="DEU" email="anyone@anymail.de" phone="03012345678" cellphone="" dateofbirth="19741012" language="de" ipaddress="80.111.120.1" customergroup="p" />
    <shipping_details usebillingaddress="1" />
    <total shippingname="none" shippingpricenet="0" shippingpricegross="0" rebatenet="930" rebategross="1000" orderamountnet="40204" orderamountgross="43230" currency="EUR" reference="1519088641" merchantinvoicenumber="1234567" trackingnumber="ABZ12398892131" />
    <article_data>
        <article articleid="1234" articlequantity="2" articlename="Shirt" articlecategory="Clothing" articlesubcategory1="Van Laack" articlepricenet="10084" articlepricegross="12000" />
        <article articleid="2345" articlequantity="1" articlename="Hose" articlecategory="Clothing" articlesubcategory1="Ralph Lauren" articlepricenet="16807" articlepricegross="20000" />    
    </article_data>
    <rate_request ratecount="6" terminmonths="6" totalamountgross="46883" />
    <bank_account accountholder="Thomas Testkunde" accountnumber="DE12500105170648489890" sortcode="" />
    <fraud_detection sessionid="97d3d1b1cc6b0686bbc1f19feec80e6c" />
    <async_capture_request>
    <redirect_url><![CDATA[http://url1.de/redirect]]></redirect_url>
    <notify_url><![CDATA[http://url1.de/notify]]></notify_url>
</async_capture_request>
</data>
private void preauthorizeInvoiceExample() throws ParseException {
    //build the request
    PreauthorizeRequest preauthorizeRequest = new PreauthorizeRequest();
    preauthorizeRequest
        .setMerchantId(1234)
        .setPortalId(9999)
        .setApiPassword("clear text password")
        .setSessionId("clear text session ID");

    preauthorizeRequest.getEnvironment()
        .setEnv(Environment.Key.TEST);

    preauthorizeRequest
        .setTermsAndConditionAccepted(true)
        .setManualCapture(false)
        .setOriginOfSale(OriginOfSale.ONLINE_SHOP);

    preauthorizeRequest.getPaymentDetails()
        .setPaymentType(PaymentType.PAYLATER);

    preauthorizeRequest.getCustomer()
        .setId("123456")
        .setCustomerType(CustomerType.EXISTING_CUSTOMER)
        .setCustomerGroup(CustomerGroup.PRIVATE_CLIENT)
        .setDateOfBirth(new SimpleDateFormat("yyyy/MM/dd").parse("1980/10/14"))
        .setEmail("anymail@example.org")
        .setIpAddress("80.111.120.1")
        .setLanguageIso2("de")
        .getBillingAddress()
            .setSalutation("Herr")
            .setFirstName("Thomas")
            .setLastName("Testkunde")
            .setStreet("Zinnowitzer Straße")
            .setStreetNumber("1")
            .setZipCode("10115")
            .setCity("Berlin")
            .setCountryIso3("DEU")
            .setPhone("03012345678");

    preauthorizeRequest.getCustomer().createShippingAddress()
        .setSalutation("Herr")
        .setFirstName("Thomas")
        .setLastName("Testkunde")
        .setStreet("Zinnowitzer Straße")
        .setStreetNumber("1")
        .setZipCode("10115")
        .setCity("Berlin")
        .setCountryIso3("DEU")
        .setPhone("03012345678");

    preauthorizeRequest.getShipping()
        .setName("Express Versand")
        .setPriceNet(840)
        .setPriceGross(1000)
        .setTrackingNumber("ABZ12398892131");
    preauthorizeRequest.getCart()
         .setOrderAmountNet(36134)
         .setOrderAmountGross(43000)
         .setCurrencyIso3("EUR")
         .setReference("1519088641")
         .setInvoiceNumber("1234567")
         .createAndAddRebate()
            .setRebateNet(1681)
            .setRebateGross(2000);

    preauthorizeRequest.getCart().createAndAddArticle()
        .setId("1234")
        .setQuantity(2)
        .setType(ArticleType.OTHER)
        .setName("Shirt")
        .setCategory("Clothing")
        .setFirstSubCategory("Van Laack")
        .setPriceNet(10084)
        .setPriceGross(12000);

    preauthorizeRequest.getCart().createAndAddArticle()
        .setId("2345")
        .setQuantity(1)
        .setType(ArticleType.OTHER)
        .setName("Hose")
        .setCategory("Clothing")
        .setFirstSubCategory("Ralph Lauren")
        .setPriceNet(16807)
        .setPriceGross(20000);  

    preauthorizeRequest.getPaymentDetails()
         .createBankAccount()
         .setAccountHolder("Thomas Testkunde")
         .setAccountNumber("DE12500105170648489890");  

    preauthorizeRequest.getPaymentDetails().createInstalment()
        .setRateCount(6)
        .setTermInMonths(6)
        .setTotalAmountGross(46883);       

    //sending the request to BillPay and retrieving the response

    PreauthorizeResponse requestResponse = preauthorizeRequest.send();

    //getting data out of the response

    if (requestResponse.hasError()) {
        System.out.println(requestResponse.getErrorCode());
        System.out.println(requestResponse.getMerchantMessage());
        System.out.println(requestResponse.getDeveloperMessage());
        System.out.println(requestResponse.getCustomerMessage());
    } else {
        System.out.println(requestResponse.getTransactionId());
        System.out.println(requestResponse.getCorrectedAddress().getStreet());
        System.out.println(requestResponse.getCorrectedAddress().getStreetNumber());
        System.out.println(requestResponse.getCorrectedAddress().getZipCode());
        System.out.println(requestResponse.getCorrectedAddress().getCity());
        System.out.println(requestResponse.getCorrectedAddress().getCountry());

    }
}
<?php
use BillPay\Core\Commons\Constants;
use BillPay\Core\Requests\PreauthorizeFactory;

$preauthorizeRequest = preauthorizeRequest::create();
$preauthorizeRequest->payment()->setById(Constants::PAYMENT_METHOD_ID_PAYLATER);
$payment = $preauthorizeRequest->getPaymentMethod();
$payment->getPaymentMethod()
            ->acceptTermsOfUse();

$preauthorizeRequest
    ->setMerchantId(1234)
    ->setPortalId(9999)
    ->setApiPassword('clear text password')
    ->setSessionId('clear text session ID')
    ->setOriginOfSaleOnline()
    ->disableManualCapture();

$customer = $preauthorizeRequest->getCustomer();
$customer->setId('123456')
    ->setIsExistingCustomer()
    ->setIsPrivateCustomer()
    ->setDateOfBirth('1975-10-12')
    ->setEmail('anymail@gmx.de')
    ->setIpAddress('80.111.120.1')
    ->setLanguageIso2('de')
    ->getBillingAddress()
        ->setSalutation('Herr')
        ->setFirstName('Thomas')
        ->setLastName('Testkunde')
        ->setStreet('Tinnowitzer Straße')
        ->setStreetNumber('1')
        ->setZipCode('10115')
        ->setCity('Berlin')
        ->setCountryIso3('DEU')
        ->setPhone('03012345678');

/* 
if the shipping address is the same as the billing address, you do not need to do anything here.  If the shipping address is not the same as the billing address, the shipping address is set as follows:
*/
$customer->getShippingAddress()
    ->setSalutation('Herr')
    ->setFirstName('Thomas')
    ->setLastName('Testkunde')
    ->setStreet('Hardenberger Straße')
    ->setStreetNumber('1')
    ->setZipCode('10623')
    ->setCity('Berlin')
    ->setCountryIso3('DEU');

$preauthorizeRequest->getBankAccount()
            ->setAccountHolder('Thomas Testkunde')
            ->setAccountNumber('DE12500105170648489890')
            ->setSortCode('');    

$cart = $preauthorizeRequest->getCart();
$cart->createAndAddArticle()->setName('Shirt')
    ->setPriceGross('12000')
    ->setPriceNet('10084')
    ->setQuantity('2')
    ->setCategory('Clothing')
    ->setFirstSubCategory('Van Laack')
    ->setId('1234');

$cart->createAndAddArticle()->setName('Hose')
    ->setPriceGross('20000')
    ->setPriceNet('16807')
    ->setQuantity('1')
    ->setCategory('Hose')
    ->setFirstSubCategory('Ralph Lauren')
    ->setId('2345');  

$shipping = $preauthorizeRequest->getShipping();
$shipping->setPriceGross('1000')
    ->setPriceNet('840')
    ->setTrackingNumber('123456')
    ->setName('Express Versand');

$rebate = $cart->createRebate();
$rebate->setPriceGross('2000')
    ->setPriceNet('1681');

$cart->setOrderAmountGross('43000')
    ->setOrderAmountNet('36134')
    ->setCurrencyIso3('EUR')
    ->addRebate($rebate); 

$payment->setRateCount('6')
    ->setRateTerm('6')
    ->setTotal('46883');

$payment->setRedirectUrl('www.redirect.de')
    ->setNotifyUrl('www.notify.de');

$preauthorizeRequest->setSessionId('session id'); 

// send the request to BillPay and retrieve the response
$preauthorizeResponse = $preauthorizeRequest->send();

// get data out of the response
if ($preauthorizeResponse->isError()) {
    echo $preauthorizeResponse->getStatus();
    echo $preauthorizeResponse->getErrorCode();
    echo $preauthorizeResponse->getMerchantMessage();
    echo $preauthorizeResponse->getDeveloperMessage();
    echo $preauthorizeResponse->getCustomerMessage();
} else {
    echo $preauthorizeResponse->getStatus();
    echo $preauthorizeResponse->getTransactionId();

    echo $preauthorizeResponse->getCustomerRestriction();

    $invoiceNumber = $preauthorizeResponse->getInvoiceNumbers();
    echo $invoiceNumber->getInvoiceId();
    echo $invoiceNumber->getBillpayInvoiceNumber();
}
echo $preauthorizeResponse->getNormalizedAddress()->getStreet();
echo $preauthorizeResponse->getNormalizedAddress()->getStreetNumber();
echo $preauthorizeResponse->getNormalizedAddress()->getZipCode();
echo $preauthorizeResponse->getNormalizedAddress()->getCity();
echo $preauthorizeResponse->getNormalizedAddress()->getCountry();

Capture

<?xml version="1.0" encoding="UTF-8" ?>
<data requesttype="CAPTURE" apiversion="2.0.0">
    <default_params mid="1234" pid="9999" passwordhash="25d55ad283aa400af464c76d713c07ad" />
    <capture_params transactionid="1aa2fb2d-2b78-4393-bf06-be0012dda337" orderamountgross="43230" currency="EUR" reference="1519088641" merchantinvoicenumber="1234567" customerid="123456789" />
</data>
private void captureExample(){
    //building the request
    CaptureRequest captureRequest = new CaptureRequest();
    captureRequest
        .setMerchantId(1234)
        .setPortalId(9999)
        .setApiPassword("clear text password")
        .setSessionId("clear text session id")
        .setTransactionId("1aa2fb2d-2b78-4393-bf06-be0012dda337")
        .setMerchantInvoiceNumber("1234567");

    captureRequest.getEnvironment()
        .setEnv(Environment.Key.TEST);

    captureRequest.getCustomer()
        .setCustomerId("123456789");

    captureRequest.getCart()
        .setReference("1519088641")
        .setCurrencyIso3("EUR")
        .setOrderAmountGross(43000);

    CaptureResponse requestResponse = captureRequest.send();

    if (requestResponse.hasError()){
        System.out.println(requestResponse.getErrorCode());
        System.out.println(requestResponse.getMerchantMessage());
        System.out.println(requestResponse.getDeveloperMessage());
        System.out.println(requestResponse.getCustomerMessage());
    } else {
        System.out.println(requestResponse.getInvoiceBankAccount().isActivationPerformed());

        // The following is only returned for invoice as the payment method.
        System.out.println(requestResponse.getInvoiceBankAccount().isActivationPerformed());
        System.out.println(requestResponse.getInvoiceBankAccount().getAccountHolder());
        System.out.println(requestResponse.getInvoiceBankAccount().getAccountNumber());
        System.out.println(requestResponse.getInvoiceBankAccount().getBankCode());
        System.out.println(requestResponse.getInvoiceBankAccount().getBankName());
        System.out.println(requestResponse.getInvoiceBankAccount().getInvoiceDueDate());
        System.out.println(requestResponse.getInvoiceBankAccount().getInvoiceReference());

        // The following is only returned if instalments is the chosen payment method
        InstalmentPlan instalmentPlan = requestResponse.getInstalmentDetails().getInstalmentPlan();
        System.out.println(instalmentPlan.getDurationInMonths());
        System.out.println(instalmentPlan.getFeePercent());
        System.out.println(instalmentPlan.getFeeTotal());
        System.out.println(instalmentPlan.getTotalPayment());
        System.out.println(instalmentPlan.getEffAnual());
        System.out.println(instalmentPlan.getNominal());

        InstalmentItem instalmentItem = instalmentPlan.getInstalmentList().get(0);
        System.out.println(instalmentItem.getAmount());
        System.out.println(instalmentItem.getDate());
        System.out.println(instalmentItem.getType());

        // The following is only returned if transaction credit is the chosen payment method
        RateOption rateOption = requestResponse.getInstalmentDetails().getRateOption();
        System.out.println(rateOption.getRateCount());
        System.out.println(rateOption.getTerm());
        System.out.println(rateOption.getCalculationBaseAmount());
        System.out.println(rateOption.getCartTotalGross());
        System.out.println(rateOption.getSurcharge());
        System.out.println(rateOption.getTotalPaymentAmount());
        System.out.println(rateOption.getMonthlyInterestRate());
        System.out.println(rateOption.getAnualInterestRate());
        System.out.println(rateOption.getAdditionalFee());

        DueDetail dueDetail = rateOption.getDueDetailsList().get(0);
        System.out.println(dueDetail.getAmount());
        System.out.println(dueDetail.getDate());
        System.out.println(dueDetail.getRateType());

        // The following is only returned if you are implementing virtual credit card solution
        System.out.println(requestResponse.getCreditCard().getAccountHolder());
        System.out.println(requestResponse.getCreditCard().getCardNumber());
        System.out.println(requestResponse.getCreditCard().getSecurityCode());
        System.out.println(requestResponse.getCreditCard().getExpirationDate());
        System.out.println(requestResponse.getCreditCard().getActivationDate());
    }
}
<?php
$captureRequest = CaptureFactory::create();
$captureRequest->setMerchantId(1234)
    ->setPortalId(9999)
    ->setApiPassword('clear text password')

$captureRequest->setReference('1519088641')
    ->setPortalId(9999)
    ->setTransactionId('1aa2fb2d-2b78-4393-bf06-be0012dda337')
    ->setMerchantInvoiceNumber('1234567')
    ->getCart()
        ->setOrderAmountGross(43230)
        ->setCurrencyIso3('EUR')
    ->getCustomer()
            ->setId('123456789');     

// send the request to BillPay and retrieve the response
$captureResponse = $captureRequest->send();

// get data out of the response
if ($preauthorizeResponse->isError()) {
    echo $captureResponse->getStatus();
    echo $captureResponse->getErrorCode();
    echo $captureResponse->getMerchantMessage();
    echo $captureResponse->getDeveloperMessage();
    echo $captureResponse->getCustomerMessage();
} else {
    echo $captureResponse->getStatus();
    echo $captureResponse->getCustomerRestriction();

    $bankAccount = $captureResponse->getInvoiceBankAccount();
    echo $bankAccount->isActivationPerformed();
    echo $bankAccount->getAccountHolder();
    echo $bankAccount->getAccountNumber();
    echo $bankAccount->getBankCode();
    echo $bankAccount->getBankName();
    echo $bankAccount->getInvoiceDueDate();
    echo $bankAccount->getInvoiceReference();
    echo $bankAccount->getEsrReference();
    echo $bankAccount->getEsrCodeLine();

    $invoiceNumber = $captureResponse->getInvoiceNumbers();
    echo $invoiceNumber->getInvoiceId();
    echo $invoiceNumber->getBillpayInvoiceNumber();
}

Invoice Created: Vollaktivierung

<?xml version="1.0" encoding="UTF-8"?>
<data requesttype="INVOICE_CREATED" apiversion="2.0.0">
    <default_params mid="1234" pid="9999" passwordhash="25d55ad283aa400af464c76d713c07ad" />
    <invoice_params carttotalgross="43000" currency="EUR" reference="1519088641" deliverydelayindays="0" />
</data>
private void invoiceCreatedExample(){
    //building the request
    InvoiceCreatedRequest invoiceCreatedRequest = new InvoiceCreatedRequest();
    invoiceCreatedRequest
        .setMerchantId(1234)
        .setPortalId(9999)
        .setApiPassword("clear text password")
        .setSessionId("clear text session id")
        .setTransactionId("1aa2fb2d-2b78-4393-bf06-be0012dda337")
        .setMerchantInvoiceNumber("1234567");
        .setIsPartial(0)
        .setDeliveryDelayInDays(0);

    invoiceCreatedRequest.getEnvironment()
        .setEnv(Environment.Key.TEST);

    invoiceCreatedRequest.getCustomer()
        .setCustomerId("123456789");

    invoiceCreatedRequest.getCart()
        .setReference("1519088641")
        .setCurrencyIso3("EUR")
        .setOrderAmountGross(43000);

    InvoiceCreatedResponse invoiceCreatedResponse = invoiceCreatedRequest.send();

    if (invoiceCreatedResponse.hasError()){
        System.out.println(invoiceCreatedResponse.getErrorCode());
        System.out.println(invoiceCreatedResponse.getMerchantMessage());
        System.out.println(invoiceCreatedResponse.getDeveloperMessage());
        System.out.println(invoiceCreatedResponse.getCustomerMessage());
    } else {
        System.out.println(invoiceCreatedResponse.getInvoiceBankAccount().isActivationPerformed());

        // The following is only returned for invoice as the payment method.
        System.out.println(invoiceCreatedResponse.getInvoiceBankAccount().isActivationPerformed());
        System.out.println(invoiceCreatedResponse.getInvoiceBankAccount().getAccountHolder());
        System.out.println(invoiceCreatedResponse.getInvoiceBankAccount().getAccountNumber());
        System.out.println(invoiceCreatedResponse.getInvoiceBankAccount().getBankCode());
        System.out.println(invoiceCreatedResponse.getInvoiceBankAccount().getBankName());
        System.out.println(invoiceCreatedResponse.getInvoiceBankAccount().getInvoiceDueDate());
        System.out.println(invoiceCreatedResponse.getInvoiceBankAccount().getInvoiceReference());

        // The following is only returned if instalments is the chosen payment method
        InstalmentPlan instalmentPlan = invoiceCreatedResponse.getInstalmentDetails().getInstalmentPlan();
        System.out.println(instalmentPlan.getDurationInMonths());
        System.out.println(instalmentPlan.getFeePercent());
        System.out.println(instalmentPlan.getFeeTotal());
        System.out.println(instalmentPlan.getTotalPayment());
        System.out.println(instalmentPlan.getEffAnual());
        System.out.println(instalmentPlan.getNominal());

        InstalmentItem instalmentItem = instalmentPlan.getInstalmentList().get(0);
        System.out.println(instalmentItem.getAmount());
        System.out.println(instalmentItem.getDate());
        System.out.println(instalmentItem.getType());

        // The following is only returned if transaction credit is the chosen payment method
        RateOption rateOption = invoiceCreatedResponse.getInstalmentDetails().getRateOption();
        System.out.println(rateOption.getRateCount());
        System.out.println(rateOption.getTerm());
        System.out.println(rateOption.getCalculationBaseAmount());
        System.out.println(rateOption.getCartTotalGross());
        System.out.println(rateOption.getSurcharge());
        System.out.println(rateOption.getTotalPaymentAmount());
        System.out.println(rateOption.getMonthlyInterestRate());
        System.out.println(rateOption.getAnualInterestRate());
        System.out.println(rateOption.getAdditionalFee());

        DueDetail dueDetail = rateOption.getDueDetailsList().get(0);
        System.out.println(dueDetail.getAmount());
        System.out.println(dueDetail.getDate());
        System.out.println(dueDetail.getRateType());

        // The following is only returned if you are implementing virtual credit card solution
        System.out.println(invoiceCreatedResponse.getCreditCard().getAccountHolder());
        System.out.println(invoiceCreatedResponse.getCreditCard().getCardNumber());
        System.out.println(invoiceCreatedResponse.getCreditCard().getSecurityCode());
        System.out.println(invoiceCreatedResponse.getCreditCard().getExpirationDate());
        System.out.println(invoiceCreatedResponse.getCreditCard().getActivationDate());
    }
}
<?php
$invoiceRequest = InvoiceCreatedFactory::create();
$invoiceRequest->setMerchantId(1234)
    ->setPortalId(9999)
    ->setApiPassword('clear text password');

$invoice = $invoiceRequest->getInvoice();

$invoice->setDeliveryDelayInDays(0)
    ->isPartialActivation(0)
    ->setMerchantInvoiceNumber('1234567');

$invoice->getCart()
    ->setOrderAmountGross('43000')
    ->setOrderAmountNet('19327')
    ->setCurrencyIso3('EUR');

// send the request to BillPay and retrieve the response
$invoiceResponse = $invoiceRequest->send();

// get data out of the response
echo $invoiceResponse->getErrorCode();
echo $invoiceResponse->getMerchantMessage();
echo $invoiceResponse->getDeveloperMessage();
echo $invoiceResponse->getCustomerMessage();

// The following is only returned for invoice as the payment method.

$bankAccount = $invoiceResponse->getInvoiceBankAccount();
echo $bankAccount->isActivationPerformed();
echo $bankAccount->getAccountHolder();
echo $bankAccount->getAccountNumber();
echo $bankAccount->getBankCode();
echo $bankAccount->getBankName();
echo $bankAccount->getInvoiceDueDate();
echo $bankAccount->getInvoiceReference();
echo $bankAccount->getEsrReference();
echo $bankAccount->getEsrCodeLine();

$invoiceNumber = $invoiceResponse->getInvoiceNumbers();
echo $invoiceNumber->getInvoiceId();
echo $invoiceNumber->getBillpayInvoiceNumber();

// The following is only returned if instalments is the chosen payment method

$instalmentDetails = $invoiceResponse->getInstalmentDetails();
echo $instalmentDetails->getDurationInMonth();
echo $instalmentDetails->getFeePercentage();
echo $instalmentDetails->getFee();
echo $instalmentDetails->getTotalAmount();
echo $instalmentDetails->getAnnualPercentageRate();
echo $instalmentDetails->getNominalPercentageRate();

$instalments = $instalmentDetails->getInstalments();
echo $instalments[0]->getAmount();
echo $instalments[0]->getDateString();
echo $instalments[0]->getType();

// The following is only returned if transaction credit is the chosen payment method

$instalmentDetails = $invoiceResponse->getInstalmentDetails();
echo $instalmentDetails->getInstalmentCount();
echo $instalmentDetails->getDurationInMonth();
echo $instalmentDetails->getBase();
echo $instalmentDetails->getCart();
echo $instalmentDetails->getSurcharge();
echo $instalmentDetails->getTotalAmount();
echo $instalmentDetails->getAnnualPercentageRate();
echo $instalmentDetails->getNominalPercentageRate();

$instalments = $instalmentDetails->getInstalments();
echo $instalments[0]->getAmount();
echo $instalments[0]->getDateString();
echo $instalments[0]->getType();

Invoice Created: Teilaktivierung/Teilversand

<?xml version="1.0" encoding="UTF-8"?>
<data requesttype="INVOICE_CREATED" apiversion="2.0.0">
    <default_params mid="1234" pid="9999" passwordhash="25d55ad283aa400af464c76d713c07ad" />
    <invoice_params carttotalgross="23000" currency="EUR" reference="1773673332" deliverydelayindays="0" is_partial="1" invoice_number="INV551202291" shippingname="Express Versand" shippingprice="840" shippingpricegross="1000" rebate="1681" rebategross="2000" carttotalprice="19327" />
    <article_data>
        <article articleid="1234" articlequantity="2" articlename="Shirt" articleprice="10084" articlepricegross="12000" />
    </article_data>
</data>
private void invoiceCreatedExample(){
    //building the request
    InvoiceCreatedRequest invoiceCreatedRequest = new InvoiceCreatedRequest();
    invoiceCreatedRequest
        .setMerchantId(1234)
        .setPortalId(9999)
        .setApiPassword("clear text password")
        .setSessionId("clear text session id")
        .setTransactionId("1aa2fb2d-2b78-4393-bf06-be0012dda337")
        .setMerchantInvoiceNumber("1234567");
        .setIsPartial(1)
        .setDeliveryDelayInDays(0);

    invoiceCreatedRequest.getEnvironment()
        .setEnv(Environment.Key.TEST);

    invoiceCreatedRequest.getCustomer()
        .setCustomerId("123456789");

    invoiceCreatedRequest.getCart()
        .setReference("1773673332")
        .setCurrencyIso3("EUR")
        .setOrderAmountGross(23000);
        .setInvoiceNumber("INV551202291")
        .createAndAddRebate()
            .setRebateNet(1681)
            .setRebateGross(2000);

    invoiceCreatedRequest.getShipping()
        .setPriceGross(1000)
        .setPriceNet(840)
        .setName("Express Versand");        

    InvoiceCreatedResponse invoiceCreatedResponse = invoiceCreatedRequest.send();

    if (invoiceCreatedResponse.hasError()){
        System.out.println(invoiceCreatedResponse.getErrorCode());
        System.out.println(invoiceCreatedResponse.getMerchantMessage());
        System.out.println(invoiceCreatedResponse.getDeveloperMessage());
        System.out.println(invoiceCreatedResponse.getCustomerMessage());
    } else {
        System.out.println(invoiceCreatedResponse.getInvoiceBankAccount().isActivationPerformed());

        // The following is only returned for invoice as the payment method.
        System.out.println(invoiceCreatedResponse.getInvoiceBankAccount().isActivationPerformed());
        System.out.println(invoiceCreatedResponse.getInvoiceBankAccount().getAccountHolder());
        System.out.println(invoiceCreatedResponse.getInvoiceBankAccount().getAccountNumber());
        System.out.println(invoiceCreatedResponse.getInvoiceBankAccount().getBankCode());
        System.out.println(invoiceCreatedResponse.getInvoiceBankAccount().getBankName());
        System.out.println(invoiceCreatedResponse.getInvoiceBankAccount().getInvoiceDueDate());
        System.out.println(invoiceCreatedResponse.getInvoiceBankAccount().getInvoiceReference());

        // The following is only returned if instalments is the chosen payment method
        InstalmentPlan instalmentPlan = invoiceCreatedResponse.getInstalmentDetails().getInstalmentPlan();
        System.out.println(instalmentPlan.getDurationInMonths());
        System.out.println(instalmentPlan.getFeePercent());
        System.out.println(instalmentPlan.getFeeTotal());
        System.out.println(instalmentPlan.getTotalPayment());
        System.out.println(instalmentPlan.getEffAnual());
        System.out.println(instalmentPlan.getNominal());

        InstalmentItem instalmentItem = instalmentPlan.getInstalmentList().get(0);
        System.out.println(instalmentItem.getAmount());
        System.out.println(instalmentItem.getDate());
        System.out.println(instalmentItem.getType());

        // The following is only returned if transaction credit is the chosen payment method
        RateOption rateOption = invoiceCreatedResponse.getInstalmentDetails().getRateOption();
        System.out.println(rateOption.getRateCount());
        System.out.println(rateOption.getTerm());
        System.out.println(rateOption.getCalculationBaseAmount());
        System.out.println(rateOption.getCartTotalGross());
        System.out.println(rateOption.getSurcharge());
        System.out.println(rateOption.getTotalPaymentAmount());
        System.out.println(rateOption.getMonthlyInterestRate());
        System.out.println(rateOption.getAnualInterestRate());
        System.out.println(rateOption.getAdditionalFee());

        DueDetail dueDetail = rateOption.getDueDetailsList().get(0);
        System.out.println(dueDetail.getAmount());
        System.out.println(dueDetail.getDate());
        System.out.println(dueDetail.getRateType());

        // The following is only returned if you are implementing virtual credit card solution
        System.out.println(invoiceCreatedResponse.getCreditCard().getAccountHolder());
        System.out.println(invoiceCreatedResponse.getCreditCard().getCardNumber());
        System.out.println(invoiceCreatedResponse.getCreditCard().getSecurityCode());
        System.out.println(invoiceCreatedResponse.getCreditCard().getExpirationDate());
        System.out.println(invoiceCreatedResponse.getCreditCard().getActivationDate());
    }
}
<?php
$invoiceRequest = InvoiceCreatedFactory::create();
$invoiceRequest->setMerchantId(1234)
    ->setPortalId(9999)
    ->setApiPassword('clear text password');

$invoice = $invoiceRequest->getInvoice();

$invoice->setDeliveryDelayInDays(0)
    ->isPartialActivation(1)
    ->setMerchantInvoiceNumber('INV551202291');

$invoice->getShipping()
    ->setName('shipping')
    ->setPriceGross('1000')
    ->setPriceNet('950')
    ->setTrackingNumber('ABZ12398892131');

$invoice->getCart()
    ->setOrderAmountGross('23000')
    ->setOrderAmountNet('19327')
    ->setCurrencyIso3('EUR')
    ->createAndAddRebate()
        ->setPriceGross('2000')
        ->setPriceNet('1681');

$invoiceRequest->getInvoice()->getCart()->createAndAddArticle()
    ->setPriceGross('20000')
    ->setPriceNet('16807')
    ->setName('Hose')
    ->setQuantity('1')
    ->setId('2345')
    ->setCategory('Clothing')
    ->setFirstSubCategory('Ralph Lauren');

// send the request to BillPay and retrieve the response
$invoiceResponse = $invoiceRequest->send();

// get data out of the response
echo $invoiceResponse->getErrorCode();
echo $invoiceResponse->getMerchantMessage();
echo $invoiceResponse->getDeveloperMessage();
echo $invoiceResponse->getCustomerMessage();

// The following is only returned for invoice as the payment method.

$bankAccount = $invoiceResponse->getInvoiceBankAccount();
echo $bankAccount->isActivationPerformed();
echo $bankAccount->getAccountHolder();
echo $bankAccount->getAccountNumber();
echo $bankAccount->getBankCode();
echo $bankAccount->getBankName();
echo $bankAccount->getInvoiceDueDate();
echo $bankAccount->getInvoiceReference();
echo $bankAccount->getEsrReference();
echo $bankAccount->getEsrCodeLine();

$invoiceNumber = $invoiceResponse->getInvoiceNumbers();
echo $invoiceNumber->getInvoiceId();
echo $invoiceNumber->getBillpayInvoiceNumber();

// The following is only returned if instalments is the chosen payment method

$instalmentDetails = $invoiceResponse->getInstalmentDetails();
echo $instalmentDetails->getDurationInMonth();
echo $instalmentDetails->getFeePercentage();
echo $instalmentDetails->getFee();
echo $instalmentDetails->getTotalAmount();
echo $instalmentDetails->getAnnualPercentageRate();
echo $instalmentDetails->getNominalPercentageRate();

$instalments = $instalmentDetails->getInstalments();
echo $instalments[0]->getAmount();
echo $instalments[0]->getDateString();
echo $instalments[0]->getType();

// The following is only returned if transaction credit is the chosen payment method

$instalmentDetails = $invoiceResponse->getInstalmentDetails();
echo $instalmentDetails->getInstalmentCount();
echo $instalmentDetails->getDurationInMonth();
echo $instalmentDetails->getBase();
echo $instalmentDetails->getCart();
echo $instalmentDetails->getSurcharge();
echo $instalmentDetails->getTotalAmount();
echo $instalmentDetails->getAnnualPercentageRate();
echo $instalmentDetails->getNominalPercentageRate();

$instalments = $instalmentDetails->getInstalments();
echo $instalments[0]->getAmount();
echo $instalments[0]->getDateString();
echo $instalments[0]->getType();

Cancel

<?xml version="1.0" encoding="UTF-8"?>
<data requesttype="CANCEL" apiversion="2.0.0">
    <default_params mid="1234" pid="9999" passwordhash="25d55ad283aa400af464c76d713c07ad" />
    <cancel_params reference="1519088641" orderamountgross="43230" currency="EUR" />
</data>
private void cancelExample(){
    //building the request
    CancelRequest cancelRequest = new CancelRequest();
    cancelRequest
        .setMerchantId(1234)
        .setPortalId(9999)
        .setApiPassword("clear text password")
        .setSessionId("clear text session id");

    cancelRequest.getEnvironment()
        .setEnv(Environment.Key.TEST);

    cancelRequest.getCart()
        .setReference("1519088641")
        .setCurrencyIso3("EUR")
        .setOrderAmountGross(43000);

    CancelResponse cancelResponse = cancelRequest.send();

    if (cancelResponse.hasError()) {
        System.out.println(cancelResponse.getErrorCode());
        System.out.println(cancelResponse.getMerchantMessage());
        System.out.println(cancelResponse.getDeveloperMessage());
        System.out.println(cancelResponse.getCustomerMessage());
    }
}
<?php
$cancelRequest = CancelFactory::create();

$cancelRequest->setMerchantId(1234)
    ->setPortalId(9999)
    ->setApiPassword('clear text password')
    ->setReference('1519088641');

$cancelRequest->getCart()
    ->setOrderAmountGross(43000)
    ->setCurrencyIso3('EUR');

// send the request to BillPay and retrieve the response
$cancelResponse = $cancelRequest->send();

// get data out of the response
echo $cancelResponse->getErrorCode();
echo $cancelResponse->getMerchantMessage();
echo $cancelResponse->getDeveloperMessage();
echo $cancelResponse->getCustomerMessage();

Edit Cart (Warenkorbanpassung)

Eine Einheit von Artikel “1234” wurde retourniert. Die Artikelmenge articlequantity hat sich reduziert, so dass der Nettogesamtbetrag orderamountnet und der Bruttogesamtbetrag orderamountgross entsprechend ebenfalls angepasst werden müssen.

<?xml version="1.0" encoding="UTF-8"?>
<data requesttype="EDIT_CART_CONTENT" apiversion="2.0.0">
    <default_params mid="1234" pid="9999" passwordhash="25d55ad283aa400af464c76d713c07ad" />
    <total shippingname="Express Versand" shippingpricenet="840" shippingpricegross="1000" rebatenet="1681" rebategross="2000" orderamountnet="26050" orderamountgross="31000" currency="EUR" reference="976692924" trackingnumber="ABZ12398892131" />
    <article_data>
        <article articleid="1234" articlequantity="1" articletype="0" articlename="Shirt" articlecategory="Clothing" articlesubcategory1="Van Laack" articlepricenet="10084" articlepricegross="12000" />
        <article articleid="2345" articlequantity="1" articletype="0" articlename="Hose" articlecategory="Clothing" articlesubcategory1="Ralph Lauren" articlepricenet="16807" articlepricegross="20000" />
    </article_data>
</data>
private void EditCartContentExample() {
    //building the request
    EditCartContentRequest editCartContentRequest = new EditCartContentRequest();
    editCartContentRequest
        .setMerchantId(1234)
        .setPortalId(9999)
        .setApiPassword("clear text password")
        .setSessionId("clear text session id");

    editCartContentRequest.getEnvironment()
        .setEnv(Environment.Key.TEST);

    editCartContentRequest.getShipping()
        .setName("Express Versand")
        .setPriceNet(840)
        .setPriceGross(1000);

    editCartContentRequest.getCart().createAndAddArticle()
        .setId("1234")
        .setQuantity(1)
        .setType(ArticleType.OTHER)
        .setName("Shirt")
        .setCategory("Clothing")
        .setFirstSubCategory("Van Laack")
        .setPriceNet(10084)
        .setPriceGross(12000);     

    editCartContentRequest.getCart().createAndAddArticle()
        .setId("2345")
        .setQuantity(1)
        .setType(ArticleType.OTHER)
        .setName("Hose")
        .setCategory("Clothing")
        .setFirstSubCategory("Ralph Lauren")
        .setPriceNet(16807)
        .setPriceGross(20000);    

    editCartContentRequest.getCart()
        .setOrderAmountNet(26050)
        .setOrderAmountGross(31000)
        .setCurrencyIso3("EUR")
        .setReference("1519088641")
        .createAndAddRebate()
            .setRebateNet(1681)
            .setRebateGross(2000);

     EditCartContentResponse editCartContentResponse = editCartContentRequest.send();   

     if (requestResponse.hasError()) {
        System.out.println(editCartContentResponse.getErrorCode());
        System.out.println(editCartContentResponse.getMerchantMessage());
        System.out.println(editCartContentResponse.getDeveloperMessage());
        System.out.println(editCartContentResponse.getCustomerMessage());
    } else {
        // The following is only returned if instalments is the chose payment method
        InstalmentPlan instalmentPlan = editCartContentResponse.getInstalmentDetails().getInstalmentPlan();
        System.out.println(instalmentPlan.getDurationInMonths());
        System.out.println(instalmentPlan.getFeePercent());
        System.out.println(instalmentPlan.getFeeTotal());
        System.out.println(instalmentPlan.getTotalPayment());
        System.out.println(instalmentPlan.getEffAnual());
        System.out.println(instalmentPlan.getNominal());

        InstalmentItem instalmentItem = instalmentPlan.getInstalmentList().get(0);
        System.out.println(instalmentItem.getAmount());
        System.out.println(instalmentItem.getDate());
        System.out.println(instalmentItem.getType());
    }
}
<?php
$editCartContentRequest = EditCartContentFactory::create();
$editCartContentRequest->setMerchantId(1234)
    ->setPortalId(9999)
    ->setApiPassword('clear text password');

$editCartContentRequest->setReference('1519088641');

$editCartContentRequest->getShipping()
    ->setName('Express Versand')
    ->setPriceGross(1000)
    ->setPriceNet(840)
    ->setTrackingNumber('12345');

$editCartContentRequest->getCart()
    ->setOrderAmountNet('26050')
    ->setOrderAmountGross('31000')
    ->setCurrencyIso3('EUR');

$editCartContentRequest->getCart()->createAndAddRebate()
    ->setPriceGross(2000)
    ->setPriceNet(1681);                       

$editCartContentRequest->getCart()->createAndAddArticle()
        ->setId("1234")
        ->setQuantity(1)
        ->setType(ArticleType.OTHER)
        ->setName("Shirt")
        ->setCategory("Clothing")
        ->setFirstSubCategory("Van Laack")
        ->setPriceNet(10084)
        ->setPriceGross(12000);     

$editCartContentRequest->getCart()->createAndAddArticle()
        ->setId("2345")
        ->setQuantity(1)
        ->setType(ArticleType.OTHER)
        ->setName("Hose")
        ->setCategory("Clothing")
        ->setFirstSubCategory("Ralph Lauren")
        ->setPriceNet(16807)
        ->setPriceGross(20000);     

// send the request to BillPay and retrieve the response
$editCartContentResponse = $editCartContentRequest->send();

// get data out of the response
echo $editCartContentResponse->getErrorCode();
echo $editCartContentResponse->getMerchantMessage();
echo $editCartContentResponse->getDeveloperMessage();
echo $editCartContentResponse->getCustomerMessage();

$invoiceNumber = $editCartContentResponse->getInvoiceNumbers();
echo $invoiceNumber->getInvoiceId();
echo $invoiceNumber->getBillpayInvoiceNumber();

// The following is only returned if instalments is the chosen payment method
$instalmentDetails = $editCartContentResponse->getInstalmentDetails();
echo $instalmentDetails->getDurationInMonth();
echo $instalmentDetails->getFeePercentage();
echo $instalmentDetails->getFee();
echo $instalmentDetails->getTotalAmount();
echo $instalmentDetails->getAnnualPercentageRate();
echo $instalmentDetails->getNominalPercentageRate();

$instalments = $instalmentDetails->getInstalments();
echo $instalments[0]->getAmount();
echo $instalments[0]->getDateString();
echo $instalments[0]->getType();

// The following is only returned if transaction credit is the chosen payment method
$instalmentDetails = $editCartContentResponse->getInstalmentDetails();
echo $instalmentDetails->getInstalmentCount();
echo $instalmentDetails->getDurationInMonth();
echo $instalmentDetails->getBase();
echo $instalmentDetails->getCart();
echo $instalmentDetails->getSurcharge();
echo $instalmentDetails->getTotalAmount();
echo $instalmentDetails->getAnnualPercentageRate();
echo $instalmentDetails->getNominalPercentageRate();

$instalments = $instalmentDetails->getInstalments();
echo $instalments[0]->getAmount();
echo $instalments[0]->getDateString();
echo $instalments[0]->getType();

Edit Cart/ Warenkorbanpassung bei Teilaktivierung/Teillieferung

Die zweite Teillieferung (Rechnungsnummer 234567) wurde geliefert und beinhaltet 2 Einheiten von Artikel 1234. Eine Einheit von Artikel 1234 wurde retourniert, so dass die Artikelmenge articlequantity im Hauptauftrag sowie in der invoice_list reduziert wurde. Entsprechend wurden die Werte orderamountnet / orderamountgross und invoiceamountnet / invoiceamountgross im Hauptauftrag (article_data-Knoten) und dem Unterauftrag (invoice-Knoten) angepasst.

<?xml version="1.0" encoding="UTF-8"?>
<data requesttype="EDIT_CART_CONTENT" apiversion="2.0.0">
    <default_params mid="1234" pid="9999" passwordhash="25d55ad283aa400af464c76d713c07ad" />
    <total shippingname="Express Versand" shippingpricenet="840" shippingpricegross="1000" rebatenet="1681" rebategross="2000" orderamountnet="26050" orderamountgross="31000" currency="EUR" reference="1773673332" />
    <article_data>
        <article articleid="1234" articlequantity="1" articletype="0" articlename="Shirt" articlecategory="Clothing" articlesubcategory1="Van Laack" articlepricenet="10084" articlepricegross="12000" />
        <article articleid="2345" articlequantity="1" articletype="0" articlename="Hose" articlecategory="Clothing" articlesubcategory1="Ralph Lauren" articlepricenet="16807" articlepricegross="20000" />
    </article_data>
    <invoice_list>
        <invoice merchantinvoicenumber="1234567">
            <invoice_params invoiceamountnet="15966" invoiceamountgross="19000" rebatenet="1681" rebategross="2000"
 shippingname="Express Versand" shippingpricenet="840" shippingpricegross="1000" currency="EUR" reference="1773673332" trackingnumber="ABZ12398892131" />
             <article_data>
                <article articleid="2345" articlequantity="1" articlename="Hose" articlepricenet="16807" articlepricegross="20000" />
            </article_data>   
        </invoice>
        <invoice merchantinvoicenumber="234567">
            <invoice_params invoiceamountnet="10084" invoiceamountgross="12000" rebatenet="0" rebategross="0"
 shippingname="Express Versand" shippingpricenet="0" shippingpricegross="0" currency="EUR" reference="1773673332" trackingnumber="ABZ13498892131" />
             <article_data>
                <article articleid="1234" articlequantity="1" articlename="Shirt" articlepricenet="10084" articlepricegross="12000" />
            </article_data>   
        </invoice>
    </invoice_list>  
</data>
private void EditCartContentPartialActivationExample() {
    //building the request
    EditCartContentRequest editCartContentRequest = new EditCartContentRequest();
    editCartContentRequest
        .setMerchantId(1234)
        .setPortalId(9999)
        .setApiPassword("clear text password")
        .setSessionId("clear text session id");

    editCartContentRequest.getEnvironment()
        .setEnv(Environment.Key.TEST);

    editCartContentRequest.getShipping()
        .setName("Express Versand")
        .setPriceNet(840)
        .setPriceGross(1000);  

    Invoice invoice1 = editCartContentRequest.createAndAddInvoice("1234567")
        .setTotalPriceNet(15966)
        .setTotalPriceGross(19000)
        .setShippingPriceNet(840)
        .setShippingPriceGross(1000)
        .setShippingName("shipping name")
        .setRebateNet(1681)
        .setRebateGross(2000);

    invoice1.createAndAddArticle()
        .setId("2345")
        .setQuantity(1)
        .setType(ArticleType.OTHER)
        .setName("Hose")
        .setPriceNet(16807)
        .setPriceGross(20000);

    Invoice invoice2 = editCartContentRequest.createAndAddInvoice("234567")
        .setTotalPriceNet(10084)
        .setTotalPriceGross(12000)
        .setShippingPriceNet(0)
        .setShippingPriceGross(0)
        .setShippingName("shipping name")
        .setRebateNet(0)
        .setRebateGross(0);

    invoice2.createAndAddArticle()
        .setId("1234")
        .setQuantity(1)
        .setType(ArticleType.OTHER)
        .setName("Shirt")
        .setPriceNet(10084)
        .setPriceGross(12000); 

    editCartContentRequest.getCart()
        .setOrderAmountNet(26050)
        .setOrderAmountGross(31000)
        .setCurrencyIso3("EUR")
        .setReference("1519088641")
        .createAndAddRebate()
            .setRebateNet(1681)
            .setRebateGross(2000);

     EditCartContentResponse editCartContentResponse = editCartContentRequest.send();   

     if (requestResponse.hasError()) {
        System.out.println(editCartContentResponse.getErrorCode());
        System.out.println(editCartContentResponse.getMerchantMessage());
        System.out.println(editCartContentResponse.getDeveloperMessage());
        System.out.println(editCartContentResponse.getCustomerMessage());
    } else {
        // The following is only returned if instalments is the chose payment method
        InstalmentPlan instalmentPlan = editCartContentResponse.getInstalmentDetails().getInstalmentPlan();
        System.out.println(instalmentPlan.getDurationInMonths());
        System.out.println(instalmentPlan.getFeePercent());
        System.out.println(instalmentPlan.getFeeTotal());
        System.out.println(instalmentPlan.getTotalPayment());
        System.out.println(instalmentPlan.getEffAnual());
        System.out.println(instalmentPlan.getNominal());

        InstalmentItem instalmentItem = instalmentPlan.getInstalmentList().get(0);
        System.out.println(instalmentItem.getAmount());
        System.out.println(instalmentItem.getDate());
        System.out.println(instalmentItem.getType());
    }
}
<?php
$editCartContentRequest = EditCartContentFactory::create();
$editCartContentRequest->setMerchantId(1234)
    ->setPortalId(9999)
    ->setApiPassword('clear text password');

$editCartContentRequest->setReference('1519088641');

$editCartContentRequest->getShipping()
    ->setName('Express Versand')
    ->setPriceGross(1000)
    ->setPriceNet(840)
    ->setTrackingNumber('12345');

$editCartContentRequest->getCart()
    ->setOrderAmountNet('26050')
    ->setOrderAmountGross('31000')
    ->setCurrencyIso3('EUR');

$editCartContentRequest->getCart()->createAndAddRebate()
    ->setPriceGross(2000)
    ->setPriceNet(1681); 

$editCartContentRequest->getCart()->createAndAddArticle()
        ->setId("1234")
        ->setQuantity(1)
        ->setType(ArticleType.OTHER)
        ->setName("Shirt")
        ->setCategory("Clothing")
        ->setFirstSubCategory("Van Laack")
        ->setPriceNet(10084)
        ->setPriceGross(12000);                          

$editCartContentRequest->getCart()->createAndAddArticle()
    ->setId(2345)
    ->setQuantity(1)
    ->setName('Hose')
    ->setCategory('Clothing')
    ->setFirstSubCategory('Ralph Lauren')
    ->setPriceGross('16807')
    ->setPriceNet('20000');

$invoice1 = $editCartContentRequest->createAndAddInvoice()
    ->setMerchantInvoiceNumber('1234567');

$invoice1->getCart()
    ->setOrderAmountNet('15966')
    ->setOrderAmountGross('19000')
    ->setCurrencyIso3('EUR');

$invoice1->getShipping()
    ->setName('shipping name')
    ->setPriceGross('1000')
    ->setPriceNet('840')
    ->setTrackingNumber('ABZ12398892131');

$invoice1->getCart()->createAndAddArticle()
    ->setId(2345)
    ->setQuantity(1)
    ->setName('Hose')
    ->setPriceGross('20000')
    ->setPriceNet('16807')
    ->appendTo($editCartContentRequest->getCart()); // append to ecc request cart as well

$invoice1->getCart()->createRebate()
    ->setPriceGross(2000)
    ->setPriceNet(1681)
    ->appendTo($invoice1->getCart()); 

$invoice2 = $editCartContentRequest->createAndAddInvoice()
    ->setMerchantInvoiceNumber('234567');

$invoice2->getCart()
    ->setOrderAmountNet('15966')
    ->setOrderAmountGross('19000')
    ->setCurrencyIso3('EUR');

$invoice2->getShipping()
    ->setName('shipping name')
    ->setPriceGross('1000')
    ->setPriceNet('840')
    ->setTrackingNumber('ABZ12398892131');

$invoice2->getCart()->createAndAddArticle()
    ->setId(1234)
    ->setQuantity(1)
    ->setName('Shirt')
    ->setPriceGross('10084')
    ->setPriceNet('12000')
    ->appendTo($editCartContentRequest->getCart()); // append to ecc request cart as well


// send the request to BillPay and retrieve the response
$editCartContentResponse = $editCartContentRequest->send();

// get data out of the response
echo $editCartContentResponse->getErrorCode();
echo $editCartContentResponse->getMerchantMessage();
echo $editCartContentResponse->getDeveloperMessage();
echo $editCartContentResponse->getCustomerMessage();

$invoiceNumber = $editCartContentResponse->getInvoiceNumbers();
echo $invoiceNumber->getInvoiceId();
echo $invoiceNumber->getBillpayInvoiceNumber();

// The following is only returned if instalments is the chosen payment method
$instalmentDetails = $editCartContentResponse->getInstalmentDetails();
echo $instalmentDetails->getDurationInMonth();
echo $instalmentDetails->getFeePercentage();
echo $instalmentDetails->getFee();
echo $instalmentDetails->getTotalAmount();
echo $instalmentDetails->getAnnualPercentageRate();
echo $instalmentDetails->getNominalPercentageRate();

$instalments = $instalmentDetails->getInstalments();
echo $instalments[0]->getAmount();
echo $instalments[0]->getDateString();
echo $instalments[0]->getType();

// The following is only returned if transaction credit is the chosen payment method
$instalmentDetails = $editCartContentResponse->getInstalmentDetails();
echo $instalmentDetails->getInstalmentCount();
echo $instalmentDetails->getDurationInMonth();
echo $instalmentDetails->getBase();
echo $instalmentDetails->getCart();
echo $instalmentDetails->getSurcharge();
echo $instalmentDetails->getTotalAmount();
echo $instalmentDetails->getAnnualPercentageRate();
echo $instalmentDetails->getNominalPercentageRate();

$instalments = $instalmentDetails->getInstalments();
echo $instalments[0]->getAmount();
echo $instalments[0]->getDateString();
echo $instalments[0]->getType();

Update Order

<?xml version="1.0" encoding="UTF-8" ?>
<data requesttype="UPDATE_ORDER" apiversion="2.0.0">
    <default_params mid="1234" pid="9999" passwordhash="25d55ad283aa400af464c76d713c07ad" />
    <update_params transactionid="b61648a3-46a1-4771-834f-903b89510ed9" reference="1591605922_updated" />
    <id_update_list>
        <id_update articleid="1234" updateid="1234_mod" />
        <id_update articleid="2345" updateid="2345_mod" />
    </id_update_list>
</data>
private void updateOrderExample() {
    //building the request
    UpdateOrderRequest updateOrderRequest = new UpdateOrderRequest();
    updateOrderRequest
        .setMerchantId(1234)
        .setPortalId(9999)
        .setApiPassword("clear text password")
        .setSessionId("clear text session id");

    updateOrderRequest.getEnvironment()
        .setEnv(Environment.Key.TEST);

    updateOrderRequest.setReference("1591605922_updated");
    updateOrderRequest.setTransactionId("b61648a3-46a1-4771-834f-903b89510ed9");
    updateOrderRequest.createAndAddUpdateOrder()
        .setNewId("1234")
        .setOldId("1234_mod");
    updateOrderRequest.createAndAddUpdateOrder()
        .setNewId("2345")
        .setOldId("2345_mod");    

    UpdateOrderResponse requestResponse = updateOrderRequest.send();

     if (requestResponse.hasError()) {
        System.out.println(requestResponse.getErrorCode());
        System.out.println(requestResponse.getMerchantMessage());
        System.out.println(requestResponse.getDeveloperMessage());
        System.out.println(requestResponse.getCustomerMessage());
    } 
}
<?php
$updateOrderRequest = UpdateOrderFactory::create();
$updateOrderRequest
    ->setMerchantId(1234)
    ->setPortalId(9999)
    ->setApiPassword('clear text password');

$updateOrderRequest
    ->setTransactionId('1aa2fb2d-2b78-4393-bf06-be0012dda337')
    ->setReference('1591605922_updated');

$updateOrderRequest->getCart()->createAndAddArticleUpdate()
    ->setId('1234')
    ->setNewId('1234_mod');

$updateOrderRequest->getCart()->createAndAddArticleUpdate()
    ->setId('2345')
    ->setNewId('2345_mod');

// send the request to BillPay and retrieve the response
$updateOrderResponse = $updateOrderRequest->send();

// get data out of the response
echo $updateOrderResponse->getErrorCode();
echo $updateOrderResponse->getMerchantMessage();
echo $updateOrderResponse->getDeveloperMessage();
echo $updateOrderResponse->getCustomerMessage();

Get Bank Data

<?xml version="1.0" encoding="UTF-8" ?>
<data requesttype="GET_BILLPAY_BANK_DATA" apiversion="2.0.0">
    <default_params
            mid="1234"
            pid="9999"
            passwordhash="25d55ad283aa400af464c76d713c07ad" />
    <order_params reference="1519088641" />
</data>
private void getBankDataExample() {
    //building the request
    GetBillPayBankDataRequest getBillPayBankDataRequest = new GetBillPayBankDataRequest();
    getBillPayBankDataRequest
        .setMerchantId(1234)
        .setPortalId(9999)
        .setApiPassword("clear text password")
        .setSessionId("clear text session id");

    getBillPayBankDataRequest.getEnvironment()
        .setEnv(Environment.Key.TEST);

    getBillPayBankDataRequest.setReference("1519088641");

    GetBillPayBankDataResponse requestResponse = getBillPayBankDataRequest.send();

     if (requestResponse.hasError()) {
        System.out.println(requestResponse.getErrorCode());
        System.out.println(requestResponse.getMerchantMessage());
        System.out.println(requestResponse.getDeveloperMessage());
        System.out.println(requestResponse.getCustomerMessage());
    } else {
        System.out.println(requestResponse.getInvoiceBankAccount().isActivationPerformed());
        System.out.println(requestResponse.getInvoiceBankAccount().getAccountHolder());
        System.out.println(requestResponse.getInvoiceBankAccount().getAccountNumber());
        System.out.println(requestResponse.getInvoiceBankAccount().getBankCode());
        System.out.println(requestResponse.getInvoiceBankAccount().getBankName());
        System.out.println(requestResponse.getInvoiceBankAccount().getInvoiceDueDate());
        System.out.println(requestResponse.getInvoiceBankAccount().getInvoiceReference());

        DueDate dueDate = requestResponse.getDueDates().get(0);
        System.out.println(dueDate.getDuedate());
        System.out.println(dueDate.getInvoiceid());
    }
}
<?php
$bankDataRequest = GetBillPayBankDataFactory::create();
$bankDataRequest->setMerchantId(1234)
    ->setPortalId(9999)
    ->setApiPassword('clear text password')
    ->setReference('1519088641');

// send the request to BillPay and retrieve the response
$bankDataResponse = $bankDataRequest->send();

// get data out of the response
echo $bankDataResponse->getErrorCode();
echo $bankDataResponse->getMerchantMessage();
echo $bankDataResponse->getDeveloperMessage();
echo $bankDataResponse->getCustomerMessage();

$bankAccount = $bankDataResponse->getInvoiceBankAccount();
echo $bankAccount->getAccountHolder();
echo $bankAccount->getAccountNumber();
echo $bankAccount->getBankCode();
echo $bankAccount->getBankName();
echo $bankAccount->getInvoiceDueDate();
echo $bankAccount->getInvoiceReference();

$dueDate = $bankDataResponse->getDueDates();
echo $dueDate->getDuedate();
echo $dueDate->getInvoiceid();

Anhang

Versionierung

API Version .NET Library Version PHP Library Version Java Library Version
2.0.0 >= 2.0.0 >= 2.0.0 >= 2.0.0

Anreden

Geschlecht “weiblich”: Geschlecht “männlich”:
frau herr
fräulein hr
fr hr.
fr. sir
miss mr
ms mr.
ms. signor
mrs sig
mrs. sig.
signora gentleman
sig.a gentiluomo
sig.ra padrone
donna monsieur
la signora m.
madame m
mme
mademoiselle
mlle
mle

Rechtsformen

API Value Label Displayed Germany Austria Switzerland
ag (Aktiengesellschaft) x x x
ag_co_kg AG & Co KG x x
e_ges einfache Gesellschaft x
eg (eingetragene Genossenschaft) x x x
eu eingetragener Einzelunternehmer x
ek (eingetragener Kaufmann) x x
ev e.V. (eingetragener Verein) x x x
einzel Einzelfirma x x
ewiv Europäische wirtschaftliche Interessenvereinigung x x
freelancer Freiberufler/Kleingewerbetreibender/Handelsvertreter x x x
foundation Stiftung x x x
gbr GbR/BGB (Gesellschaft bürgerlichen Rechts) x x
gmbh GmbH (Gesellschaft mit beschränkter Haftung) x x x
gmbh_ig GmbH in Gründung x
gmbh_co_kg GmbH & Co. KG x x
inv_kk Investmentgesellschaft für kollektive Kapitalanlagen x
kg (Kommanditgesellschaft) x x x
kgaa Kommanditgesellschaft auf Aktien x x
k_ges Kollektivgesellschaft x
ltd Limited x x
ltd_co_kg Limited & Co. KG x x
misc sonstige Personengesellschaft x x x
misc_capital sonstige Kapitalgesellschaft x x x
og offene Gesellschaft x
ohg OHG (offene Handelsgesellschaft) x x
public_inst öffentliche Einrichtung x x x
ug UG (Unternehmensgesellschaft haftungsbeschränkt) x x

Wann ist das Feld “registerNumber” und “holderName” ein pflicht Feld?

API Value registernumber holdername
DEU AUT CHE DEU AUT CHE
ag x x x
ag_co_kg x x
eg x
einzel x
ek x
e_ges x
eu x
foundation x
freelancer x x x
gbr x x
gmbh x x x
gmbh_co_kg x x
kg x x x
kgaa x
k_ges x
ltd x
ltd_co_kg x
ohg x x
ug x

API Error-Codes

Die “Customer Message” ist im Frontend für die Kunden anzuzeigen, wenn es zu einem Fehler kommt und eine “Customer Message” übermittelt wird. Die “Merchant Message” ist vom Händler zu loggen, um auftretende Fehler der Implementierung zu überwachen und zu korrigieren.

Error-Code Zielgruppe Fehlernachricht
1 Kunde Fehler: Es ist ein interner Fehler aufgetreten. Bitte versuchen Sie es später erneut.
1 Händler Fehler: Es ist ein interner Fehler aufgetreten. Bitte versuchen Sie es später erneut.
2 Kunde Fehler: Bitte wählen Sie eine andere Zahlart oder versuchen es später erneut. Es ist ein interner Fehler aufgetreten.
2 Händler Fehler: Die Händler-ID ist falsch.
3 Kunde Fehler: Bitte wählen Sie eine andere Zahlart oder versuchen es später erneut. Es ist ein interner Fehler aufgetreten.
3 Händler Fehler: Die Portal-ID ist falsch.
4 Händler Fehler: API Authentifizierung fehlgeschlagen.
4 Kunde Fehler: Bitte wählen Sie eine andere Zahlart oder versuchen es später erneut. Es ist ein interner Fehler aufgetreten.
5 Kunde Fehler: Sie müssen die Billpay AGB bestätigen
5 Händler Fehler: Sie müssen die Billpay AGB bestätigen
7 Kunde Fehler: Der Pflicht-Parameter [parameter] wurde nicht übergeben.
7 Händler Fehler: Der Pflicht-Parameter [parameter] wurde nicht übergeben.
8 Kunde Fehler: Bitte wählen Sie eine andere Zahlart oder versuchen es später erneut. Es ist ein interner Fehler aufgetreten.
8 Händler Fehler: Der Parameter [parameter] hat das falsche Datenformat.
9 Kunde Fehler: Bitte überprüfen Sie Ihre Daten. Der Vorname Ihrer Rechnungsadresse muss aus mind. 2 Buchstaben bestehen.
9 Händler Fehler: Bitte überprüfen Sie Ihre Daten. Der Vorname Ihrer Rechnungsadresse muss aus mind. 2 Buchstaben bestehen.
11 Kunde Fehler: Bitte überprüfen Sie Ihre Daten. Die Straße Ihrer Rechnungsadresse muss aus mind. 2 Buchstaben bestehen.
11 Händler Fehler: Bitte überprüfen Sie Ihre Daten. Die Straße Ihrer Rechnungsadresse muss aus mind. 2 Buchstaben bestehen.
12 Kunde Fehler: Bitte überprüfen Sie Ihre Daten. Die Hausnummer Ihrer Rechnungsadresse muss aus mind. 1 Ziffer bestehen.
12 Händler Fehler: Bitte überprüfen Sie Ihre Daten. Die Hausnummer Ihrer Rechnungsadresse muss aus mind. 1 Ziffer bestehen.
13 Kunde Fehler: Bitte überprüfen Sie Ihre Daten. Die PLZ Ihrer Rechnungsadresse muss aus genau [length] Ziffern bestehen.
13 Händler Fehler: Bitte überprüfen Sie Ihre Daten. Die PLZ Ihrer Rechnungsadresse muss aus genau [length] Ziffern bestehen.
14 Kunde Fehler: Bitte überprüfen Sie Ihre Daten. Der Ort Ihrer Rechnungsadresse muss aus mind. 2 Buchstaben bestehen.
14 Händler Fehler: Bitte überprüfen Sie Ihre Daten. Der Ort Ihrer Rechnungsadresse muss aus mind. 2 Buchstaben bestehen.
15 Kunde Fehler: Bitte überprüfen Sie Ihre Daten. Die Telefonnummer Ihrer Rechnungsadresse ist nicht korrekt.
15 Händler Fehler: Bitte überprüfen Sie Ihre Daten. Die Telefonnummer Ihrer Rechnungsadresse ist nicht korrekt.
16 Kunde Fehler: Bitte überprüfen Sie Ihre Daten. Die Handynummer Ihrer Rechnungsadresse ist nicht korrekt.
16 Händler Fehler: Bitte überprüfen Sie Ihre Daten. Die Handynummer Ihrer Rechnungsadresse ist nicht korrekt.
17 Kunde Fehler: Bitte überprüfen Sie Ihre Daten. Ihre E-Mail-Adresse ist nicht korrekt.
17 Händler Fehler: Bitte überprüfen Sie Ihre Daten. Ihre E-Mail-Adresse ist nicht korrekt.
18 Kunde Fehler: Bitte überprüfen Sie Ihre Daten. Ihr Geburtsdatum darf nicht in der Zukunft liegen.
18 Händler Fehler: Bitte überprüfen Sie Ihre Daten. Ihr Geburtsdatum darf nicht in der Zukunft liegen.
19 Kunde Fehler: Bitte wählen Sie eine andere Zahlart. Sie müssen mind. 18 Jahre alt sein
19 Händler Fehler: Bitte wählen Sie eine andere Zahlart. Sie müssen mind. 18 Jahre alt sein
21 Kunde Fehler: Bitte überprüfen Sie Ihre Daten. Der Nachname Ihrer Lieferadresse muss aus mind. 2 Buchstaben bestehen.
21 Händler Fehler: Bitte überprüfen Sie Ihre Daten. Der Nachname Ihrer Lieferadresse muss aus mind. 2 Buchstaben bestehen.
22 Kunde Fehler: Bitte überprüfen Sie Ihre Daten. Die Straße Ihrer Lieferadresse muss aus mind. 2 Buchstaben bestehen.
22 Händler Fehler: Bitte überprüfen Sie Ihre Daten. Die Straße Ihrer Lieferadresse muss aus mind. 2 Buchstaben bestehen.
23 Kunde Fehler: Bitte überprüfen Sie Ihre Daten. Die Hausnummer Ihrer Lieferadresse muss aus mind. 1 Ziffer bestehen.
23 Händler Fehler: Bitte überprüfen Sie Ihre Daten. Die Hausnummer Ihrer Lieferadresse muss aus mind. 1 Ziffer bestehen.
24 Kunde Fehler: Bitte überprüfen Sie Ihre Daten. Die PLZ Ihrer Lieferadresse muss aus genau 5 Ziffern bestehen.
24 Händler Fehler: Bitte überprüfen Sie Ihre Daten. Die PLZ Ihrer Lieferadresse muss aus genau 5 Ziffern bestehen.
25 Kunde Fehler: Bitte überprüfen Sie Ihre Daten. Der Ort Ihrer Lieferadresse muss aus mind. 2 Buchstaben bestehen.
25 Händler Fehler: Bitte überprüfen Sie Ihre Daten. Der Ort Ihrer Lieferadresse muss aus mind. 2 Buchstaben bestehen.
26 Kunde Fehler: Bitte überprüfen Sie Ihre Daten. Die Telefonnummer Ihrer Lieferadresse ist nicht korrekt.
26 Händler Fehler: Bitte überprüfen Sie Ihre Daten. Die Telefonnummer Ihrer Lieferadresse ist nicht korrekt.
27 Kunde Fehler: Bitte überprüfen Sie Ihre Daten. Die Handynummer Ihrer Lieferadresse ist nicht korrekt.
27 Händler Fehler: Bitte überprüfen Sie Ihre Daten. Die Handynummer Ihrer Lieferadresse ist nicht korrekt.
28 Kunde Fehler: Sie können diese Zahlart von Billpay derzeit nur nutzen
28 Händler Fehler: Sie können diese Zahlart von Billpay derzeit nur nutzen
29 Händler Bitte wählen Sie eine andere Zahlart. Die IP-Adresse kommt aus einem Land
29 Kunde Bitte wählen Sie eine andere Zahlart. Leider können wir Ihnen für diese Transaktion die ausgewählte Zahlart von Billpay nicht anbieten.
31 Kunde Fehler: Ihre Rechnungs- oder Lieferadresse darf keine Packstation sein.
31 Händler Fehler: Ihre Rechnungs- oder Lieferadresse darf keine Packstation sein.
32 Händler Bitte wählen Sie eine andere Zahlart. Der Kunde wurde aufgrund fehlgeschlagener Identitäts- bzw. Bonitätsprüfung abgelehnt.
32 Kunde Bitte wählen Sie eine andere Zahlart. Leider können wir Ihnen für diese Transaktion die ausgewählte Zahlart von Billpay nicht anbieten.
33 Kunde Fehler: Bitte wählen Sie eine andere Zahlart oder versuchen es später erneut. Es ist ein interner Fehler aufgetreten.
33 Händler Fehler: Der Bestellwert passt nicht zur Transaktions-ID.
34 Kunde Fehler: Bitte wählen Sie eine andere Zahlart oder versuchen es später erneut. Es ist ein interner Fehler aufgetreten.
34 Händler Fehler: Es wurde keine Transaktions-ID übergeben
35 Händler Fehler: Die übergebene Transaktions-ID ist ungültig
35 Kunde Fehler: Es ist ein Fehler aufgetreten
36 Händler Fehler: Bitte überprüfen Sie Ihre Daten. Das Pflichtfeld [parameter] muss den Wert -Herr- oder -Frau- haben
36 Kunde Fehler: Bitte wählen Sie eine Anrede aus.
37 Händler Fehler: Bitte überprüfen Sie Ihre Daten. Der Parameter [parameter] muss eine gültige IP-Adresse enthalten.
37 Kunde Fehler: Bitte wählen Sie eine andere Zahlart oder versuchen es später erneut. Es ist ein interner Fehler aufgetreten.
38 Kunde Fehler: Bitte wählen Sie eine andere Zahlart oder versuchen es später erneut. Es ist ein interner Fehler aufgetreten.
38 Händler Fehler: Der Pflicht-Parameter [KundeType] wurde nicht übergeben oder hat einen ungültigen Wert.
39 Kunde Fehler: Der Wert für das Feld [parameter] muss ganzzahlig numerisch sein.
39 Händler Fehler: Der Wert für das Feld [parameter] muss ganzzahlig numerisch sein.
41 Kunde Bitte wählen Sie eine andere Zahlart. Leider können wir Ihnen für diese Transaktion die ausgewählte Zahlart von Billpay nicht anbieten.
41 Händler Fehler: Von der IP-Adresse wurden zu viele Anfragen gesendet
42 Kunde Bitte wählen Sie eine andere Zahlart. Leider können wir Ihnen für diese Transaktion die ausgewählte Zahlart von Billpay nicht anbieten.
42 Händler Fehler: Der Kunde hat offene Forderungen
43 Kunde Bitte wählen Sie eine andere Zahlart. Leider können wir Ihnen für diese Transaktion die ausgewählte Zahlart von Billpay nicht anbieten.
43 Händler Fehler: Das Rechnungslimit des Kunden bei Billpay ist erreicht
44 Kunde Bitte wählen Sie eine andere Zahlart. Leider können wir Ihnen für diese Transaktion die ausgewählte Zahlart von Billpay nicht anbieten.
44 Händler Fehler: Der Kunde hat offene Forderungen beim Händler
45 Kunde Bitte wählen Sie eine andere Zahlart. Leider können wir Ihnen für diese Transaktion die ausgewählte Zahlart von Billpay nicht anbieten.
45 Händler Externe Identitäts- oder Bonitätsprüfung fehlgeschlagen
46 Kunde Fehler: Bitte wählen Sie eine andere Zahlart oder versuchen es später erneut. Es ist ein interner Fehler aufgetreten.
46 Händler Fehler: Wenn die Rechnungsadresse als Lieferadresse verwendet wird
47 Kunde Fehler: Bitte überprüfen Sie Ihre Daten. Die Hausnummer muss mit einer Zahl beginnen [parameter]
47 Händler Fehler: Bitte überprüfen Sie Ihre Daten. Die Hausnummer muss mit einer Zahl beginnen [parameter]
48 Kunde Fehler: Es ist ein interner Fehler aufgetreten. Bitte versuchen Sie es später erneut.
48 Händler Fehler: Es wurden keine zu stornierenden Artikel übergeben
49 Händler Fehler: Der Betrag der Bestellung bei der Bestätigung hat sich gegenüber der Vorauthorisierung geändert
49 Kunde Fehler: Der Warenkorb wurde geändert. Bitte starten Sie den Bestellprozess erneut.
51 Kunde Fehler: Der Wert für das Feld [parameter] muss mindestens [minLength] Zeichen lang sein
51 Händler Fehler: Der Wert für das Feld [parameter] muss mindestens [minLength] Zeichen lang sein
52 Kunde Fehler: Der Wert für das Feld [parameter] darf höchstens [maxLength] Zeichen lang sein
52 Händler Fehler: Der Wert für das Feld [parameter] darf höchstens [maxLength] Zeichen lang sein
53 Kunde Fehler: Bitte wählen Sie eine andere Zahlart oder versuchen es später erneut. Es ist ein interner Fehler aufgetreten.
53 Händler Fehler: Die übergebenen Bestelldaten sind ungültig
54 Kunde Fehler: Der Wert für das Feld [parameter] muss einem der folgenden Werte entsprechen: [string]
54 Händler Fehler: Der Wert für das Feld [parameter] muss einem der folgenden Werte entsprechen: [string]
55 Kunde Fehler: Die zu stornierende Menge ist höher als die Bestellmenge eines Artikels
55 Händler Fehler: Die zu stornierende Menge ist höher als die Bestellmenge eines Artikels
56 Kunde Fehler: Bitte wählen Sie eine andere Zahlart oder versuchen es später erneut. Es ist ein interner Fehler aufgetreten.
56 Händler Fehler: Das übergebene XML ist ungültig
57 Kunde Fehler: Bitte wählen Sie eine andere Zahlart oder versuchen es später erneut. Es ist ein interner Fehler aufgetreten.
57 Händler Fehler: Die Bestellung wurde bereits erfasst
58 Kunde Fehler: Bitte wählen Sie eine andere Zahlart oder versuchen es später erneut. Es ist ein interner Fehler aufgetreten.
58 Händler Fehler: Der Betrag der Bestellung bei der Stornierung hat sich gegenüber der Vorauthorisierung geändert
59 Kunde Fehler: Bitte wählen Sie eine andere Zahlart oder versuchen es später erneut. Es ist ein interner Fehler aufgetreten.
59 Händler Fehler: Teilstornierung ist nicht erlaubt
61 Kunde Fehler: Die manuelle Aktivierung der Forderung ist nicht erlaubt
61 Händler Fehler: Die manuelle Aktivierung der Forderung ist nicht erlaubt
62 Kunde Fehler: Der Betrag der Bestellung bei der manuellen Aktivierung der Forderung hat sich gegenüber der Vorauthorisierung geändert
62 Händler Fehler: Der Betrag der Bestellung bei der manuellen Aktivierung der Forderung hat sich gegenüber der Vorauthorisierung geändert
63 Kunde Fehler: Der Betrag der Teilstornierung darf den Gesamtwert der Bestellung nicht überschreiten.
63 Händler Fehler: Der Betrag der Teilstornierung darf den Gesamtwert der Bestellung nicht überschreiten.
64 Kunde Fehler: Bei Teilstornierung aller verbleibenden Artikel darf der Gesamtbetrag nicht vom Bestellwert abweichen.
64 Händler Fehler: Bei Teilstornierung aller verbleibenden Artikel darf der Gesamtbetrag nicht vom Bestellwert abweichen.
65 Kunde Fehler: Bitte wählen Sie eine andere Zahlart oder versuchen es später erneut. Es ist ein interner Fehler aufgetreten.
65 Händler Fehler: Der übergebene Wert [parameter
66 Kunde Fehler: Diese Zahlart von Billpay wird für Bestellungen mit einem Wert von
66 Händler Fehler: Diese Zahlart von Billpay wird für Bestellungen mit einem Wert von
67 Kunde Fehler: Die übergebene BLZ ist ungültig
67 Händler Fehler: Die übergebene BLZ ist ungültig
68 Kunde Fehler: Die übergebene Kontonummer ist ungültig
68 Händler Fehler: Die übergebene Kontonummer ist ungültig
69 Kunde Fehler: Die übergebene Bankverbindung ist ungültig
69 Händler Fehler: Die übergebene Bankverbindung ist ungültig
71 Händler Authorisierung fehlgeschlagen
71 Kunde Fehler: Es ist ein interner Fehler aufgetreten. Bitte versuchen Sie es später erneut.
72 Kunde Fehler: Der übergebene Wert für den Parameter [parameter] muss einem der folgenden Werte entsprechen: [list]
72 Händler Fehler: Der übergebene Wert für den Parameter [parameter] muss einem der folgenden Werte entsprechen: [list]
73 Händler Fehler: Bei der Teilstornierung dürfen nur positive zu stornierende Artikelmengen übergeben werden (Parameter [parameter])
73 Kunde Fehler: Es ist ein interner Fehler aufgetreten. Bitte versuchen Sie es später erneut.
74 Händler Fehler: Die Konsistenzprüfung für die für den Ratenkauf übergebenen Werte ist fehlgeschlagen.
74 Kunde Fehler: Es ist ein interner Fehler aufgetreten. Bitte versuchen Sie es später erneut.
75 Händler Fehler: Die Verzögerung der Aktivierung darf maximal [baseValue] Tage betragen
75 Kunde Fehler: Es ist ein interner Fehler aufgetreten. Bitte versuchen Sie es später erneut.
76 Händler Fehler: Die übergebene Anzahl Raten ist ungültig.
76 Kunde Fehler: Es ist ein interner Fehler aufgetreten. Bitte versuchen Sie es später erneut.
77 Kunde Fehler: Der Wert für den Parameter [parameter] muss größer als [baseValue] sein
77 Händler Fehler: Der Wert für den Parameter [parameter] muss größer als [baseValue] sein
78 Kunde Fehler: Es ist ein interner Fehler aufgetreten. Bitte versuchen Sie es später erneut.
78 Händler Fehler: Es wurde keine Artikelliste übergeben oder die Artikelliste ist leer.
79 Kunde Fehler: Bitte wählen Sie eine andere Zahlart oder versuchen es später erneut. Es ist ein interner Fehler aufgetreten.
79 Händler Fehler: Die übergebene IP-Adresse stammt aus einem lokalen Netzwerk
81 Kunde Fehler: Bitte wählen Sie eine andere Zahlart oder versuchen es später erneut. Es ist ein interner Fehler aufgetreten.
81 Händler Fehler: Für diesen Shop ist die Zahlart [parameter] nicht erlaubt.
82 Kunde Fehler: Bitte wählen Sie eine andere Zahlart oder versuchen es später erneut. Es ist ein interner Fehler aufgetreten.
82 Händler Fehler: Für diesen Shop sind Geschäftskundenanfragen mit der Zahlart [parameter] nicht aktiviert.
83 Kunde Fehler: Der Wert für den Parameter [parameter] muss größer oder gleich [baseValue] sein
83 Händler Fehler: Der Wert für den Parameter [parameter] muss größer oder gleich [baseValue] sein
84 Kunde Fehler: Der Wert für den Parameter [parameter] muss kleiner oder gleich [baseValue] sein
84 Händler Fehler: Der Wert für den Parameter [parameter] muss kleiner oder gleich [baseValue] sein
85 Kunde Fehler: Es wurde keine Liste mit Fälligkeitsdaten übergeben oder die XML-Struktur der Liste ist falsch
85 Händler Fehler: Es wurde keine Liste mit Fälligkeitsdaten übergeben oder die XML-Struktur der Liste ist falsch
86 Kunde Fehler: Das Datum für Parameter [parameter] muss in der Zukunft liegen
86 Händler Fehler: Das Datum für Parameter [parameter] muss in der Zukunft liegen
87 Kunde Fehler: Bestellungen aus dem Land [address.country] sind nicht erlaubt
87 Händler Fehler: Bestellungen aus dem Land [address.country] sind nicht erlaubt
88 Kunde Fehler: Die Währung [currency] wird nicht unterstützt
88 Händler Fehler: Die Währung [currency] wird nicht unterstützt
89 Kunde Fehler: Bitte wählen Sie eine andere Zahlart oder versuchen es später erneut. Es ist ein interner Fehler aufgetreten.
89 Händler Fehler: Das Portal ist deaktiviert.
91 Kunde Fehler: Für Kunden aus dem Land [parameter] stehen die Billpay Zahlarten leider nicht zur Verfügung
91 Händler Fehler: Für Kunden aus dem Land [parameter] stehen die Billpay Zahlarten leider nicht zur Verfügung.
92 Kunde Fehler: Der minimale Bestellwert für Bestellungen mit dieser Zahlart von Billpay wurde unterschritten. Bitte erhöhen Sie Ihren Warenkorb
92 Händler Fehler: Der minimale Bestellwert für Bestellungen mit dieser Zahlart von Billpay wurde unterschritten. Bitte erhöhen Sie Ihren Warenkorb
93 Kunde Fehler: Der maximale Bestellwert für Bestellungen mit dieser Zahlart von Billpay wurde überschritten.
93 Händler Fehler: Der maximale Bestellwert für Bestellungen mit dieser Zahlart von Billpay wurde überschritten.
94 Kunde Fehler: Bitte wählen Sie eine andere Zahlart oder versuchen es später erneut. Es ist ein interner Fehler aufgetreten.
94 Händler Fehler: Die übergebene Währung hat sich gegenüber der Vorauthorisierung geändert
95 Kunde Fehler: Das Land [country] wird nicht unterstützt.
95 Händler Fehler: Das Land [country] wird nicht unterstützt.
96 Kunde Fehler: Es ist ein interner Fehler aufgetreten
96 Händler Fehler: Ungültiger Bestellstatus für diese Operation.
97 Kunde Fehler: Bitte überprüfen Sie Ihre Daten. Die ausgewählte Rechtsform ist ungültig für das Land [country]
97 Händler Fehler: Bitte überprüfen Sie Ihre Daten. Die ausgewählte Rechtsform ist ungültig für das Land [country]
98 Kunde Fehler: Bitte geben Sie einen Wert für das Feld [parameter] ein
98 Händler Fehler: Bitte geben Sie einen Wert für das Feld [parameter] ein
99 Kunde Fehler: Bitte überprüfen Sie Ihre Daten. Ihre Eingabe für das Feld [parameter] enthält ungültige Zeichen.
99 Händler Fehler: Bitte überprüfen Sie Ihre Daten. Ihre Eingabe für das Feld [parameter] enthält ungültige Zeichen.
111 Kunde Fehler: Bitte versuchen Sie es später erneut. Es ist ein interner Fehler aufgetreten.
111 Händler Fehler: Die Kundendaten dürfen sich bei der Zahlartensteuerung nicht ändern.
112 Kunde Fehler: Bitte versuchen Sie es später erneut. Es ist ein interner Fehler aufgetreten.
112 Händler Fehler: Ungültige Vorauthorisierung. Für das aktuelle Portal ist die Zahlartensteuerung aktiviert.
113 Kunde Bitte wählen Sie eine andere Zahlart. Leider können wir Ihnen für diese Transaktion die ausgewählte Zahlart von Billpay nicht anbieten.
113 Händler Fehler: Die Anfrage wurde wegen Betrugsverdacht abgelehnt.
114 Händler Fehler: Bestellung wurde bereits teilaktiviert
114 Kunde Fehler: Es ist ein Fehler aufgetreten
115 Händler Fehler: Der Aktivierungsbetrag für die Liefergebühren überschreitet den Wert der Liefergebühren.
115 Kunde Fehler: Es ist ein Fehler aufgetreten
116 Kunde Fehler: Es ist ein Fehler aufgetreten
116 Händler Fehler: Negativer Gesamtbetrag
117 Kunde Fehler: Es ist ein Fehler aufgetreten
117 Händler Fehler: Leere Aktivierung
118 Kunde Fehler: Es ist ein Fehler aufgetreten
118 Händler Fehler: Keine Unterbestellungen gefunden
119 Händler Fehler: Artikel wurde bereits aktiviert
119 Kunde Fehler: Es ist ein Fehler aufgetreten
121 Kunde Fehler: Es ist ein Fehler aufgetreten
121 Händler Fehler: Teilaktivierung nicht erlaubt
122 Kunde Fehler: Bitte versuchen Sie es später erneut. Es ist ein interner Fehler aufgetreten.
122 Händler Fehler: Die Operation ist für diese Zahlart nicht erlaubt.
123 Kunde Fehler: Bitte versuchen Sie es später erneut. Es ist ein interner Fehler aufgetreten.
123 Händler Fehler: Rechnungsnummer ist bereits vorhanden.
124 Kunde Fehler: Es ist ein Fehler aufgetreten
124 Händler Fehler: Referenz darf kein Rautensymbol (#) beinhalten
125 Händler Fehler: Die Bestellung wurde noch nicht abgeschlossen.
125 Kunde Fehler: Es ist ein interner Fehler aufgetreten. Bitte versuchen Sie es später erneut.
126 Händler Fehler: Die Erhöhung des Bestellwertes ist für den aktuellen Status der Bestellung nicht erlaubt
126 Kunde Fehler: Es ist ein interner Fehler aufgetreten. Bitte versuchen Sie es später erneut.
127 Händler Fehler: Die übergebene Ratenzahl ist ungültig.
127 Kunde Fehler: Es ist ein interner Fehler aufgetreten. Bitte versuchen Sie es später erneut.
128 Händler Fehler: Die Erhöhung des Bestellwertes ist für den aktuellen Status der Bestellung nicht erlaubt
128 Kunde Fehler: Es ist ein interner Fehler aufgetreten. Bitte versuchen Sie es später erneut.
129 Händler Fehler: Der Teilaktivierungsbetrag überschreitet den Gesamtwert der Bestellung.
129 Kunde Fehler: Es ist ein interner Fehler aufgetreten. Bitte versuchen Sie es später erneut.
131 Kunde Fehler: Die Bestellnummer wurde nicht gefunden.
131 Händler Fehler: Die Bestellnummer wurde nicht gefunden.
132 Kunde Fehler: Bitte überprüfen Sie Ihre Daten. Die übergebene IBAN ist ungültig.
132 Händler Fehler: Bitte überprüfen Sie Ihre Daten. Die übergebene IBAN ist ungültig.
133 Kunde Fehler: Bitte überprüfen Sie Ihre Daten. Die übergebene BIC ist ungültig.
133 Händler Fehler: Bitte überprüfen Sie Ihre Daten. Die übergebene BIC ist ungültig.
134 Kunde Fehler: Bitte wählen Sie eine andere Zahlart. Das SEPA-Mandat für dieses Konto wurde widerrufen.
134 Händler Fehler: Das SEPA-Mandat für dieses Konto wurde vom Kunden widerrufen.
135 Händler Fehler: Anfragen mit dieser Zahlart Konfiguration können nur im Auto-Capture Modus ausgeführt werden.
135 Kunde Fehler: Bitte wählen Sie eine andere Zahlart oder versuchen es später erneut. Es ist ein interner Fehler aufgetreten.
136 Kunde Die BIC und IBAN Ländercodes stimmen nicht überein.
136 Händler Die BIC und IBAN Ländercodes stimmen nicht überein.
137 Kunde Fehler: Bitte geben Sie einen Kontoinhaber an.
137 Händler Fehler: Bitte geben Sie einen Kontoinhaber an.
138 Kunde Fehler: Der Wert für den Kontoinhaber enthält ungültige Zeichen.
138 Händler Fehler: Der Wert für den Kontoinhaber enthält ungültige Zeichen.
139 Kunde Fehler: Die Anfrage wird bereits verarbeitet. Bitte warten Sie
139 Händler Fehler: Die Anfrage wird bereits verarbeitet. Bitte warten Sie
141 Händler Fehler: Die Anfrage ist nicht mehr gültig da für diesen Kunden eine weitere Anfrage durchgeführt wurde.
141 Kunde Fehler: Es ist ein interner Fehler aufgetreten. Bitte versuchen Sie es später erneut.
142 Kunde Fehler: Bitte wählen Sie eine andere Zahlart. Leider können wir Ihnen für diese Transaktion die ausgewählte Zahlart von Billpay nicht anbieten.
142 Händler Fehler: Der Wert für das Feld expecteddaystillshipping ist kleiner als das erlaubte Minimum.
143 Kunde Fehler: Die Liefergebühren dürfen nicht in der Bestellungen verbleiben wenn der Rest der Bestellung storniert wird.
143 Händler Fehler: Die Liefergebühren dürfen nicht in der Bestellungen verbleiben wenn der Rest der Bestellung storniert wird.
144 Kunde Fehler: Bitte versuchen Sie es später erneut. Es ist ein interner Fehler aufgetreten.
144 Händler Fehler: Der für die Änderung der Bestellung übergebene Warenkorb ist inkonsistent (Summe der Artikelpreise + Versandkosten - Rabatte muss gleich dem Gesamtwert der Bestellung sein).
145 Kunde Fehler: Bitte versuchen Sie es später erneut. Es ist ein interner Fehler aufgetreten.
145 Händler Fehler: Mindestens einer der für eine Rechnung übergebenen Artikel existiert nicht in dieser Bestellung.
146 Kunde Fehler: Bitte versuchen Sie es später erneut. Es ist ein interner Fehler aufgetreten.
146 Händler Fehler: Die in der Anfrage übergebenen Informationen zu den Rechnungen sind entweder ungültig für diese Zahlart oder stimmen nicht mit den existierenden Rechnungen überein.
147 Kunde Fehler: Bitte versuchen Sie es später erneut. Es ist ein interner Fehler aufgetreten.
147 Händler Fehler: Die in der Anfrage übergebenen Informationen zur Änderung einer Rechnung sind ungültig für den Ratenkauf.
148 Kunde Fehler: Bitte versuchen Sie es später erneut. Es ist ein interner Fehler aufgetreten.
148 Händler Fehler: Mindestens eine der in der Anfrage übergebenen Rechnungen existiert nicht für diese Bestellung.
149 Kunde Fehler: Bitte versuchen Sie es später erneut. Es ist ein interner Fehler aufgetreten.
149 Händler Fehler: Der für die Änderung einer Rechnung übergebene Warenkorb ist inkonsistent (Summe der Artikelpreise + Versandkosten - Rabatte muss gleich dem Gesamtwert der Bestellung sein).
151 Kunde Fehler: Bitte versuchen Sie es später erneut. Es ist ein interner Fehler aufgetreten.
151 Händler Fehler: Die Menge eines Artikels einer Rechnung überschreitet die Menge dieses Artikels in der Bestellung.
152 Kunde Fehler: Der Betrag der gemeldeten Kundenzahlung überschreitet den aktuell offenen Forderungsbetrag.
152 Händler Fehler: Der Betrag der gemeldeten Kundenzahlung überschreitet den aktuell offenen Forderungsbetrag.
153 Kunde Fehler: Bitte versuchen Sie es später erneut. Es ist ein interner Fehler aufgetreten.
153 Händler Fehler: Die Validierung der XML-Anfrage ist fehlgeschlagen.

Abrechnungsdateien

BillPay stellt eine wöchentliche Abrechnung für den Händler zur Verfügung. Der Leistungszeitraum der Abrechnungen ist von Montag-Sonntag. Die Abrechnungen können immer in der Folgewoche ab Mittwoch im Backoffice heruntergeladen werden. Die Auszahlung erfolgt am Donnerstag.

Das bereitgestellte Datenformat ist automatisch in Ihre Systeme einlesbar und steht per Push oder Pull zur Verfügung. Sie erhalten eine Ankündigungs-E-Mail sobald die Daten bereitstellen. Wahlweise können Sie die Daten auch per URL Download abrufen. Die Spezifikation des Links für den URL Download erhalten Sie auf Anfrage bei unserem technischen Support.

Die Datenbereitstellung erfolgt in folgenden Formaten:

  • PDF
  • CSV

Enthalten sind die jeweils im Abrechnungszeitraum angefallenen einzelnen Forderungen, sowie deren Betrag und die anfallende Gebühr.

Index Spalte Format Beschreibung
1 Gebuehrentyp N..2 0: Transaction fee (minimum)
1: Setup-Gebühr
2: monatliche Grundgebühr
3: Transaktionsgebühr
4: Stornogebühr
15: Umsatzsteuerrueckforderung 7,00%,
16: Umsatzsteuerungrueckforderung 19,00%
17: Auskunfteikosten
18: Kundenzahlung beim Händler
19: Uebernahme der Mahngebuehr durch den Händler
21: Händlerkulanz
2 Gebuehrenart AN..50 Beschreibung der Gebühr
3 Portal ID N..6 ID des Veranstalter-/ Händlerportals bei BillPay
4 Haendler Referenznummer AN..40 Mit der Vorauthorisierungsanfrage übergebene Referenz der Bestellung/ Buchung. Händlerseitig/ veranstalterseitig vergebene Referenznummer
5 Haendler Kundennummer AN..40 Ggf. mit der Vorauthorisierungsanfrage übergebene Kundennummer. Händlerseitige/ veranstalterseitige Kundennummer
6 BillPay Kundennummer N..10 ID des Kunden bei BillPay
7 Forderungs-ID N..10 ID der Forderung bei BillPay
8 Forderungsbetrag[3-stelliger Währungscode (z.B. “EUR”)] (-)Float(8:2) Auszuzahlender/einzubehaltender Betrag für die Zeile (z.B. 299,99)
9 Disagio[%] Float(1:4) Disagio in Prozent
10 Transaktionsgebühr[3-stelliger Währungscode (z.B. “EUR”)] (-)Float(8:2) Einbehaltene/rückabzuwickelnde Gebühr für die Zeile
11 Bestelldatum YYYMMDD Datum der Bestellung/ Buchung
12 Aktivierungsdatum YYYYMMDD Datum der Aktivierung
13 Faelligkeitsdatum YYYYMMDD Fälligkeitsdatum der Forderung
14 Kundenland A..3 Land des Endkunden (z.B. DEU)
ISO3166-1 (alpha-3)

Zusätzlich können die Dateien auch via Downloadlink (https-Request) heruntergeladen werden. Der Link für den https Request ist folgendermaßen aufgebaut:

https://admin.billpay.de/MerchantInvoiceDownload.action?mh=##########&cw=12&year=2017&format=csv&type=1

Get Variablen in der oben beschriebenen URL

Variable Format Info
mh string Portalspezifischer Hash zur Authenitfierung. BillPay stellt diesen Hash auf Anfrage bereit.
cw ISO 8601: WW Kalenderwoche der Abrechnungsdatei
year ISO 8601:YYYY Jahr der gewünschten Abrechnungsdatei (YYYY Format)
format string (csv or pdf) Format der Datei (CSV,PDF)
type positive int Es existieren unterschiedliche Dateitypen, abhängig von Land und Zahlart. BillPay wird Ihnen die richtigen Typen auf Bedarf mitteilen.

Downloads

Die bevorzugten Zahlarten Logos, sowie alle verfügbaren Programmierbibliotheken finden Sie unter folgendem Link: https://www.billpay.de/de/shopintegration/downloads/

Version history

[2.2.0] - 2017-10-04

The version 2.2.0 is not fully backwards compatible to 2.1.0

Added - Request: getOrderDetails.xsd

  • Response: getOrderDetails.xsd

  • Request: prescore.xsd

    • attribute expecteddaystillshipping

Changed - Request: shiftDueDate.xsd - changed attribute newduedate from type date to the name shiftdatesby from the type integer in the range 1 to 90

[2.1.0] - 2017-06-19

The version 2.1.0 is not fully backwards compatible to 2.0.0

Changed - Request: preauthorize.xsd - Request: prescore.xsd - allowed values from attribute historicaltripcurrency changed from char to enum

  • Response: invoiceCreated.xsd
    • element name has been changed from “invoice_numbers” to “assigned_invoice_number”. Only the invoice_number node for the currently activated suborder is returned.

[2.0.0] - 2017-07-03

Added - Notificatons: asyncCapture.xsd

  • Request: cancel.xsd
  • Request: capture.xsd
  • Request: editCartContent.xsd
  • Request: getBillPayBankData.xsd
  • Request: invoiceCreated.xsd
  • Request: partialCancel.xsd
  • Request: preauthorize.xsd
  • Request: prescore.xsd
  • Request: reportCustomerPayment.xsd
  • Request: shiftDueDate.xsd
  • Request: updateOrder.xsd

  • Response: cancel.xsd

  • Response: capture.xsd

  • Response: editCartContent.xsd

  • Response: getBillPayBankData.xsd

  • Response: invoiceCreated.xsd

  • Response: partialCancel.xsd

  • Response: preauthorize.xsd

  • Response: prescore.xsd

  • Response: reportCustomerPayment.xsd

  • Response: shiftDueDate.xsd

  • Response: updateOrder.xsd

Should you have any questions relating to this manual and/or integrating BillPay payment methods, please feel free to contact us via support@billpay.de.