BillPay Techdocs
Navbar
XML Java

Integration Reisebranche

Getting Started

Diese Dokumentation beschreibt die Integration der BillPay Zahlungslösungen für die Reisebranche. 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
preauthorize Anlegen einer Buchung Request / Response
capture Anlegen einer Buchung Request / Response
cancel Buchungsmanagement Request / Response
editCartContent Buchungsmanagement Request / Response
getBillPayBankData Buchungsmanagement 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

<!-- 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>

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. 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, gefolgt von einem JSON Objekt mit den Kunden– und Shopinformationen als zweiten Parameter. 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, // Wert des Warenkorbs ohne etwaige Gebühren
            "orderAmount": 166.94, // Gesamtwert inkl. aller Gebühren
            "currency": "EUR",
            "shippingDate": "2017-12-30", // ISO 8601 Datum Format
            "articleTypes": [1,6] // Kommaseparierte Liste der in der Buchung enthaltenen Artikeltypen
        },
        "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]",
                "shippingDate": "billpay[shippingDate]",
                "articleTypes": "billpay[articleTypes]"
            },
            "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": {
                "invoiceCollateralPromise": {
                    "customerGroup": "billpay[invoice_col_customer_group]",
                    "termsOfService": "billpay[invoice_col_toc]"
                },
                "directDebitCollateralPromise": {
                    "customerGroup": "billpay[direct_debit_col_customer_group]",
                    "termsOfService": "billpay[direct_debit_col_toc]"
                },
                "paylaterCollateralPromise": {
                    "customerGroup": "billpay[paylater_col_customer_group]",
                    "duration": "billpay[paylater_col_duration]",
                    "instalmentsCount": "billpay[paylater_col_instalments_count]",
                    "instalmentAmount": "billpay[paylater_col_instalment_amount]",
                    "feeAbsolute": "billpay[paylater_col_fee_absolute]",
                    "totalAmount": "billpay[paylater_col_total_amount]",
                    "termsOfService": "billpay[paylater_col_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
order.shippingDate ISO 8601 Abreisedatum. Format (YYYY-MM-DD).
order.articleTypes Kommaseparierte Liste der in der Buchung enthaltenen Artikeltypen
Klassifizierung der Artikelpositionen
0: Sonstig
1: Flug
2: Pauschalreise (Paket mit Flug)
3: Kombination mit Flug
4: Kombination ohne Flug
5: Hotel
6: Reiseversicherung
7: Mietwagen
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) 2- stelliger ISO-Code des Kundenlands
customer.billing.countryIso3 ISO3166 (aplha-3) 3-stelliger ISO Code des Kundenlands
customer.billing.dayOfBirth Geburtsdatum
customer.language ISO3166-1 (alpha-2) Sprache des Endkunden
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",
            "shippingDate": "2017-12-30", // ISO 8601 Datum Format
            "articleTypes": [1,6] // Kommaseparierte Liste der in der Buchung enthaltenen Artikeltypen
        },
        "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]",
                "shippingDate": "billpay[shippingDate]",
                "articleTypes": "billpay[articleTypes]"
            },
            "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": {
                "invoiceCollateralPromise": {
                    "customerGroup": "billpay[invoice_col_customer_group]",
                    "termsOfService": "billpay[invoice_col_toc]"
                },
                "directDebitCollateralPromise": {
                    "customerGroup": "billpay[direct_debit_col_customer_group]",
                    "termsOfService": "billpay[direct_debit_col_toc]"
                },
                "paylaterCollateralPromise": {
                    "customerGroup": "billpay[paylater_col_customer_group]",
                    "duration": "billpay[paylater_col_duration]",
                    "instalmentsCount": "billpay[paylater_col_instalments_count]",
                    "instalmentAmount": "billpay[paylater_col_instalment_amount]",
                    "feeAbsolute": "billpay[paylater_col_fee_absolute]",
                    "totalAmount": "billpay[paylater_col_total_amount]",
                    "termsOfService": "billpay[paylater_col_toc]"
                }
            }
        }
    });
</script>

<!-- Container -->
<form id="payment_form">
    <h1>Rechnungskauf</h1>
    <div class="bpy bpy-checkout-container" bpy-pm="invoiceCollateralPromise"></div>
    <h1>Lastschrift</h1>
    <div class="bpy bpy-checkout-container" bpy-pm="directDebitCollateralPromise"></div>
    <h1>PayLater</h1>
    <div class="bpy bpy-checkout-container" bpy-pm="paylaterCollateralPromise"></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 erforderlich das ebenfalls das entsprechend BillPay Logo angezeigt wird. 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 Übersicht

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 Veranstalter, 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 Veranstalter. Die API-Zugangsdaten werden Ihnen von BillPay zur Verfügung gestellt.

<?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 Format Info
mid + positive int Veranstalter ID / Merchant ID
pid + positive int Portal ID
passwordhash + string MD5 Hash des API-Passwort

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. Der Standardwert ist "0” und bedeutet kein Fehler. Auflistung der Fehlercodes
merchantmessage + string Die Information in der merchantmessage enthalten vertrauliche Detailinformationen, die dem Kunden nicht angezeigt werden dürfen.
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.

Bitte beachten Sie, dass sich API-Fehlermeldungen für Kunden und Veranstalter ändern bzw. das neue Fehlercodes und Fehlermeldungen laufend hinzugefügt werden können. Fehlermeldungen sollten daher 1:1 dynamisch übernommen werden.

Anlegen einer Buchung

Prozessüberblick

“Einstufiger Buchungsablauf”

Beim einstufigen Buchungsprozess findet die Bonitätsprüfung und das Scoring der Kunden nach der Auswahl einer BillPay Zahlart bei Abschluss der Buchung (Beispielweise bei Klick auf “Jetzt kostenpflichtig buchen”) statt. 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 Buchung abgeschlossen. [Base-URL]/preauthorize

Flowchart classic scoring

“Zweistufiger Buchungsprozess”

Beim zweistufigen Buchungsprozess findet die Identitäts- und Bonitätsprüfung nach Auswahl der Zahlart, jedoch vor Abschluss der Buchung statt. Das zweistufige Buchungsmodel eignet sich, wenn nach der Zahlartauswahl noch beispielsweise eine Verfügbarkeitsprüfung stattfindet. In diesem Fall können Sie vorab checken, ob der Kunde mit BillPay bezahlen kann. Falls der Kunde abgelehnt wird, sollte der Kunde auf die Zahlartauswahlseite geleitet werden, um eine alternative Zahlart anzubieten. Bei positivem Ergebnis der Identitäts- und Bonitätsprüfung kann der Buchungsprozess fortgesetzt werden, die Verfügbarkeit erneut geprüft werden und im Anschluss die Buchung abgeschlossen werden.

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 Buchung. Bei positiver Response ist die Buchung noch nicht abgeschlossen. [Base-URL]/preauthorize
capture Anlage der Buchung im BillPay System Nach finaler Buchung [Base-URL]/capture

Flowchart prescoring

Preauthorize

Mit dem “preauthorize”-Request übermitteln Sie alle erforderlichen Informationen (Kundendaten und Reisedaten) 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 Buchung unter der eindeutigen Buchungsnummer (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 Buchung ergibt, an BillPay abgetreten.

Request

Data Knoten

<data
        requesttype="PREAUTHORIZE"
        tcaccepted="1"
        expecteddaystillshipping="0"
        manualcapture="0"
        paymenttype="7"
        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.PAYLATER_COLLATERAL_PROMISE);  

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

$preauthorizeRequest = PreauthorizeFactory::create();
$preauthorizeRequest
    ->disableManualCapture()
    ->setOriginOfSaleOnline();

$preauthorizeRequest->payment()->setById(Constants::PAYMENT_METHOD_ID_PAYLATER_COLLATERAL)
    ->acceptTermsOfUse();

$preauthorizeRequest->getShipping()
    ->setExpectedDaysTillShipping(45);
Attribute Pflicht Format Werte Info
requesttype + string PREAUTHORIZE Name des Requests
tcaccepted + boolean 0/1 Gibt an, ob die BillPay AGB und Datenschutzbestimmungen vom Kunden akzeptiert wurden.
expecteddaystillshipping + non-negative int Anzahl Tage bis zum Reiseantritt
manualcapture + boolean 0/1 Gibt an, ob ein separater Capture-Request erfolgt (1), oder ob das Anlegen einer Buchung direkt beim Preauthorize-Request erfolgen soll (0).
paymenttype + positive int N..1 Kenner der gewünschten Zahlart
7: PayLater Schuldbeitritt (PayLater Collateral Promise)
8: Rechnung Schuldbeitritt (Invoice Collateral Promise)
9: Lastschrift Schuldbeitritt (Direct Debit Collateral Promise)
apiversion + string 2.0.0 BillPay API Version
originofsale + ISO3166 A..1 Kennzeichnet den Vertriebskanal
u: Unknown
o: Online
p: Offline / POS
t: Telesales / Call-Center

Default Params Knoten (Veranstalter Zugangsdaten/ Credentials)

Ihre Veranstalter-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 Veranstalter ID / Merchant ID
pid + positive int Portal ID
passwordhash + string MD5 Hash des Passworts

Customer Details Knoten (Rechnungsanschrift des Kunden)

<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" />
preauthorizeRequest.getCustomer()
    .setId("123456")
    .setCustomerType(CustomerType.EXISTING_CUSTOMER)
    .setCustomerGroup(CustomerGroup.PRIVATE_CLIENT)
    .setDateOfBirth(new SimpleDateFormat("yyyy/MM/dd").parse("1980/10/14"))
    .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
$preauthorizeRequest->getCustomer()
    ->setId('123456')
    ->setIsExistingCustomer()
    ->setIsPrivateCustomer()
    ->setDateOfBirth('1980-10-14')
    ->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 Veranstalter-System (Zulässige Zeichen:
0-9, a-z, A-Z, .,-,_,/)
customertype - string ISO3166 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 E-Mail-Adresse (ausgenommen sind ungültige Sonderzeichen)
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
customergroup + ISO3166 A..1 Kundengruppe
p: Privatkunde/Endkunde
b: Business/Geschäftskunde

*phone ist ein Pflichtfeld bei paymenttype =7.

Company Details Knoten (Details zu Geschäftskunden)

Sollte die Buchung für einen Geschäftskunden sein (`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");
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)

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
$preauthorizeRequest->getCustomer()->getShippingAddress()
    ->setSalutation('Herr')
    ->setFirstName('Thomas')
    ->setLastName('Testkunde')
    ->setStreet('Tinnowitzerstrasse')
    ->setStreetNumber('1')
    ->setZipCode('10115')
    ->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

Article Data Knoten (Liste der gebuchten Positionen)

Der article_data-Knoten beinhaltet alle Informationen rund um die in der Buchung enthaltenen Warenkorbpositionen. Pro Position (einzigartiger Posten) wird ein article-Knoten (XML tag) gesetzt.

<article_data>
    <article
            articleid="220-2365851307" 
            articlequantity="1" 
            articletype="1"
            articlename="LH188"
            articlepricenet="20567"
            articlepricegross="22115">
            <flight_information 
                departingfrom="TXL"
                departingon="20160818" 
                arrivingat="FRA" 
                arrivingon="20160818"
                bookingclass="bc" 
                routetype="ow" 
                tickettype="fl" />
    </article>           
</article_data>
preauthorizeRequest.getCart().createAndAddArticle()
    .setId("220-2365851307")
    .setQuantity(1)
    .setType(ArticleType.FLIGHT)
    .setName("LH188")
    .setPriceNet(20567)
    .setPriceGross(22115)
    .createFlight()
        .setDepartingFromAirport("TXL")
        .setDepartingOn(new SimpleDateFormat("yyyy/MM/dd").parse("2030/10/14"))
        .setArrivingAtAirport("FRA")
        .setArrivingOn(new SimpleDateFormat("yyyy/MM/dd").parse("2030/10/14"))
        .setBookingClass(BookingClass.BUSINESS_CLASS)
        .setRouteType(RouteType.ONE_WAY)
        .setTicketType(TicketType.NO_REBOOKING_FEE);

preauthorizeRequest.getCart().createAndAddArticle()
    .setId("220-2365851307")
    .setQuantity(1)
    .setType(ArticleType.FLIGHT)
    .setName("LH188")
    .setPriceNet(20567)
    .setPriceGross(22115)
    .createFlight()
        .setDepartingFromAirport("TXL")
        .setDepartingOn(new SimpleDateFormat("yyyy/MM/dd").parse("2030/10/14"))
        .setArrivingAtAirport("FRA")
        .setArrivingOn(new SimpleDateFormat("yyyy/MM/dd").parse("2030/10/14"))
        .setBookingClass(BookingClass.BUSINESS_CLASS)
        .setRouteType(RouteType.ONE_WAY)
        .setTicketType(TicketType.NO_REBOOKING_FEE);    
<?php
/** @var \BillPay\Core\Requests\Preauthorize $preauthorizeRequest */
$preauthorizeRequest->getCart()->createAndAddArticle()
    ->setId('220-2365851307')
    ->setQuantity(1)
    ->setTypeFlight()
    ->setName('LH188')
    ->setPriceNet(20567)
    ->setPriceGross(22115)
    ->getFlight()
        ->setDepartingFromAirport('TXL')
        ->setDepartingOn('2030-10-14')
        ->setArrivingAtAirport('FRA')
        ->setArrivingOn('2030-10-14')
        ->setIsBusinessClass()
        ->setIsOneWay()
        ->setIsFreeRebooking();

$preauthorizeRequest->getCart()->createAndAddArticle()
    ->setId('220-2365851307')
    ->setQuantity(1)
    ->setTypeFlight()
    ->setName('LH188')
    ->setPriceNet(20567)
    ->setPriceGross(22115)
    ->getFlight()
        ->setDepartingFromAirport('TXL')
        ->setDepartingOn('2030-10-14')
        ->setArrivingAtAirport('FRA')
        ->setArrivingOn('2030-10-14')
        ->setIsBusinessClass()
        ->setIsOneWay()
        ->setIsFreeRebooking();
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.
0: Sonstig
1: Flug
2: Pauschalreise (Paket mit Flug)
3: Kombination mit Flug
4: Kombination ohne Flug
5: Hotel
6: Reiseversicherung
7: Mietwagen
articlequantity + positive int N..7 Menge des Artikels im Warenkorb z. B. Anzahl der Übernachtungen
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
flight_information - (+ if articletype 1-3) Unterknoten des article-Knotens. Darf maximal ein mal vorkommen.
  ↳departingfrom - (+ if articletype 1-3) string A..3 Abflughafen: IATA Location Identifiers
  ↳departingon - (+ if articletype 1-3) string YYYYMMDD Abflugdatum
  ↳arrivingat - (+ if articletype 1-3) string A..3 Zielflughafen: IATA Location Identifiers
  ↳arrivingon - (+ if articletype 1-3) string YYYYMMDD Ankunftstag
  ↳bookingclass - (+ if articletype 1-3) string A..2 na (Nicht verfügbar)
bc (Businessklasse)
fc (First-class)
co (Economy)
  ↳routetype - (+ if articletype 1-3) string A..2 na (Nicht verfügbar)
ow (Nur Hinflug)
rt (Hin- und Rückflug)
  ↳tickettype - (+ if articletype 1-3) string A..2 na (Nicht verfügbar)
nr (Umbuchung nicht gestattet)
rf (Umbuchung gegen Gebühr)
fl (Umbuchung kostenlos)

Bank Account Knoten (Bankverbindung des Kunden)

Die Bankdaten des Kunden werden ausschließlich bei den Zahlarten PayLater Schuldbeitritt (paymenttype = 7) und Lastschrift Schuldbeitritt (paymenttype = 9) verarbeitet. Bei Rechnung Schuldbeitritt (paymenttype = 8) sind die Bankdaten nicht erforderlich.

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

Total Knoten

Der total-Knoten beinhaltet die Gesamtbeträge und die zur Buchung gehörenden Informationen.

<total
        shippingname="Express Versand"
        shippingpricenet="840"
        shippingpricegross="1000"
        rebatenet="930"
        rebategross="1000"
        orderamountnet="40204"
        orderamountgross="43230"
        currency="EUR"
        reference="ZYLOGT"
        merchantinvoicenumber="1234567" />
preauthorizeRequest.getShipping()
    .setName("Express Versand")
    .setPriceNet(840)
    .setPriceGross(1000);

preauthorizeRequest.getCart()
    .setOrderAmountNet(40204)
    .setOrderAmountGross(43230)
    .setCurrencyIso3("EUR")
    .setReference("ZYLOGT")
    .createAndAddRebate()
        .setRebateNet(930)
        .setRebateGross(1000);
<?php
$preauthorizeRequest
    ->setReference('ZYLOGT');

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

$preauthorizeRequest->getCart()
    ->setOrderAmountNet(40204)
    ->setOrderAmountGross(43230)
    ->setCurrencyIso3('EUR')
    ->createAndAddRebate()
        ->setPriceNet(930)
        ->setPriceGross(1000);
Attribute Pflicht Format Werte Info
shippingname + string AN..50 Versandart (z.B. “Express”, “Email” etc..)
shippingpricenet + non-negative int N..7 Nettowert (ohne 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 Buchung in kleinster Währungseinheit (1,00 EUR = 100)
[(articlequantity * articlepricenet) + shippingpricenet – rebatenet]
orderamountgross + positive int N..7 Bruttowert (mit Steuer) der Buchung 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 Buchungsnummer 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 Veranstalter-System (falls bereits bekannt)
Zulässige Zeichen:
0-9, a-z, A-Z, -, , #, ., :

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

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 weggefiltert 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('clear text session ID');
Attribute Pflicht Format Values 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 Schuldbeitritt (paymenttype = “7”) 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 in der Session und übergeben die gewünschte Laufzeit im Preauthorize-Request an BillPay.

<rate_Request ratecount="6" terminmonths="6" totalamountgross="45823" />
preauthorizeRequest.getPaymentDetails().createInstalment()
    .setRateCount(6)
    .setTermInMonths(6)
    .setTotalAmountGross(45823);
<?php
$preauthorizeRequest->getPaymentMethod()
    ->setRateTerm(6)
    ->setRateCount(6)
    ->setTotal(45823);
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_col_total_amount] Wert aus den Widget inputNames.

Trip Data Knoten

Bei Positionen die einen Flug beinhalten, sind die Attribute im flight_information-Unterknoten zu befüllen. D.h. bei Buchungen welche die Positionen Flug (articletype = 1), Pauschalreise mit Flug (articletype = 2) oder Kombination mit Flug (articletype = 3) beinhalten, sind die Daten aus dem flight_information-Unterknoten erforderlich. Für die anderen Artikeltypen werden die genannten Default-Werte erwartet.

Hinweis: Der Wert groupsize muss der Anzahl Passagiere, die im traveler-Unterknoten einzeln genannt werden, entsprechen. Beispiel: Wenn als groupsize der Wert 2 übergeben wird, werden 2 traveler-Unterknoten erwartet, die mit den relevanten Informationen befüllt sind.

<trip_data 
        historicaltripcount="1" 
        historicaltripamount="80000" 
        historicaltripcurrency="EUR">
    <traveler_list groupsize="2">
        <traveler 
            salutation="Herr" 
            firstname="Thomas" 
            lastname="Testkunde" 
            dateofbirth="19741012">
            <flight_information>
                    <frequent_flyer 
                        membership="1" 
                        program="1"
                        membershipid="12345" />
            </flight_information>
        </traveler> 
       <traveler 
            salutation="Frau" 
            firstname="Thomassina" 
            lastname="Testkunde" 
            dateofbirth="19720210">
            <flight_information>
                    <frequent_flyer 
                        membership="0" 
                        program="0"
                        membershipid="0" />
            </flight_information>
        </traveler>
    </traveler_list>
</trip_data>
TripData tripData = preauthorizeRequest.createTripData();
tripData.setGroupSize(2)
    .setHistoricalTripCount(1)
    .setHistoricalTripAmount(80000)
    .setHistoricaltripCurrency("EUR");

tripData.createAndAddTraveler()
    .setDateOfBirth(new SimpleDateFormat("yyyy/MM/dd").parse("1980/10/14"))
    .setSalutation("mr")
    .setFirstName("Thomas")
    .setLastName("Testkunde")
    .setMembership(1)
    .setProgram(1)
    .setMembershipId("12345");

tripData.createAndAddTraveler()
    .setDateOfBirth(new SimpleDateFormat("yyyy/MM/dd").parse("1980/10/14"))
    .setSalutation("mrs")
    .setFirstName("Thomassina")
    .setLastName("Testkunde")
    .setMembership(0)
    .setProgram(0)
    .setMembershipId("0");
<?php
/** @var \BillPay\Core\Requests\Preauthorize $preauthorizeRequest */
$tripData = $preauthorizeRequest->getTrip();

$tripData
    ->setHistoricalTripCount(1)
    ->setHistoricalTripAmount(80000)
    ->setHistoricalTripCurrency('EUR');

$tripData->createAndAddTraveler()
    ->setDateOfBirth('1980-10-14')
    ->setSalutation('mr')
    ->setFirstName('Thomas')
    ->setLastName('Testkunde')
    ->setIsFrequentFlyerMember() // 1
    ->setFrequentFylerProgramId(1)
    ->setFrequentFlyerMembershipId('12345');

$tripData->createAndAddTraveler()
    ->setDateOfBirth('1980-10-14')
    ->setSalutation('mrs')
    ->setFirstName('Thomassina')
    ->setLastName('Testkunde')
    ->setIsUnknownFrequentFlyerMember();
Attribute Pflicht Format Werte Info
historicaltripcount + non-negative int N..3 Anzahl der Tickets die innerhalb des letzten Jahres vom Rechnungsempfänger gekauft wurden. Zeitraumberechnung taggenau z.B. 4.8.2016 bis 8.4.2017 (default = 0)
historicaltripamount + non-negative int N..7 Gesamtwert der Ticketkäufe im letzten Jahr in Euro (1,00 EUR = “100”, default = 0)
historicaltripcurrency + string A..3 Dreistelliger Währungscode (“EUR”): ISO4217
  ↳traveler_list + Unterknoten des trip_data-Knotens. Darf maximal ein mal vorkommen.
  ↳groupsize + positive int N..3 Anzahl Reiseteilnehmer
      ↳traveler + Unterknoten der traveler_list (max. 20 Reisende)
      ↳salutation + string Anrede des Reisenden
Default: Siehe Addendum Salutations
      ↳firstname + string AN..40 Vorname des Reisenden
      ↳lastname + string AN..40 Nachname des Reisenden
      ↳dateofbirth + string YYYYMMDD Geburtsdatum des Reisenden
      ↳flight_information + Unterknoten zu traveler. Darf maximal ein mal vorkommen.
          ↳frequent_flyer + Unterknoten der flight _information. Darf maximal ein mal vorkommen.
          ↳membership + int N..1 Vielfliegerprogramm
0 (Nicht verfügbar)
1 (Ja, Teilnehmer eines Vielfliegerprogramm)
2 (Kein Teilnehmer eines Vielfliegerprogramms)
          ↳program + int N..3 Name des Vielfliegerprogramms
          ↳membershipid + string AN..40 Vielfliegerprogramm-Teilnehmernummer/ Mitgliedsnummer (default = 0)

Response

Data Knoten

Der data Knoten enthält das Ergebnis der Bonitäts- und Identitätsprüfung durch BillPay. Zusätzlich zum Scoringergebnis (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(preauthorizeResponse.getErrorCode());
System.out.println(preauthorizeResponse.getMerchantMessage());
System.out.println(preauthorizeResponse.getDeveloperMessage());
System.out.println(preauthorizeResponse.getCustomerMessage());
System.out.println(preauthorizeResponse.getAuthorizationStatus());
System.out.println(preauthorizeResponse.getTransactionId());
<?php
/** @var \BillPay\Core\Responses\Preauthorize $preauthorizeResponse */
$preauthorizeResponse->getErrorCode();
$preauthorizeResponse->getMerchantMessage();
$preauthorizeResponse->getDeveloperMessage();
$preauthorizeResponse->getCustomerMessage();
$preauthorizeResponse->getStatus();
$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 Die Information in der merchantmessage enthalten vertrauliche Detailinformationen, die dem Kunden nicht angezeigt werden dürfen.
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(preauthorizeResponse.getCorrectedAddress().getStreet());
System.out.println(preauthorizeResponse.getCorrectedAddress().getStreetNumber());
System.out.println(preauthorizeResponse.getCorrectedAddress().getZipCode());
System.out.println(preauthorizeResponse.getCorrectedAddress().getCity());
System.out.println(preauthorizeResponse.getCorrectedAddress().getCountry());
<?php
/** @var \BillPay\Core\Responses\Preauthorize $preauthorizeResponse */
$preauthorizeResponse->getNormalizedAddress()->getStreet();
$preauthorizeResponse->getNormalizedAddress()->getStreetNumber();
$preauthorizeResponse->getNormalizedAddress()->getZipCode();
$preauthorizeResponse->getNormalizedAddress()->getCity();
$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)

Invoice Bank Account Knoten (bezieht sich nur auf “Rechnung Schuldbeitritt” - paymenttype = “8”)

Dieser Knoten liefert die Bankverbindung von BillPay zurück, an die der Kunde den Reisepreis überweisen soll. Die BillPay Bankverbindung ist auf der Kundenrechnung, die der Kunde mit seinen Reiseunterlagen erhält, auszudrucken. Die Rechnungsstellung erfolgt durch den Veranstalter. 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: BPZYLOGT/1234 (Bedeutet, dass die Buchungsnummer (reference aus dem Preauthorize-Request) ZYLOGT lautet und die durch BillPay vergebene Veranstalter- ID 1234).

<invoice_bank_account
        activationperformed="0"
        accountholder="BillPay GmbH"
        accountnumber="DE07312312312312312"
        bankcode="BELADEBEXXX"
        bankname="Sparkasse Berlin"
        invoiceduedate=""
        invoicereference="BPZYLOGT/9999" />
System.out.println(preauthorizeResponse.getInvoiceBankAccount().isActivationPerformed());
System.out.println(preauthorizeResponse.getInvoiceBankAccount().getAccountHolder());
System.out.println(preauthorizeResponse.getInvoiceBankAccount().getAccountNumber());
System.out.println(preauthorizeResponse.getInvoiceBankAccount().getBankCode());
System.out.println(preauthorizeResponse.getInvoiceBankAccount().getBankName());
System.out.println(preauthorizeResponse.getInvoiceBankAccount().getInvoiceDueDate());
System.out.println(preauthorizeResponse.getInvoiceBankAccount().getInvoiceReference());
<?php
/** @var \BillPay\Core\Responses\Preauthorize $preauthorizeResponse */
$preauthorizeResponse->getInvoiceBankAccount()->isActivationPerformed();
$preauthorizeResponse->getInvoiceBankAccount()->getAccountHolder();
$preauthorizeResponse->getInvoiceBankAccount()->getAccountNumber();
$preauthorizeResponse->getInvoiceBankAccount()->getBankCode();
$preauthorizeResponse->getInvoiceBankAccount()->getBankName();
$preauthorizeResponse->getInvoiceBankAccount()->getInvoiceDueDate();
$preauthorizeResponse->getInvoiceBankAccount()->getInvoiceReference();
Attribute Pflicht Format Werte Info
activationperformed + boolean 0/1 Kenner, ob die Buchung aktiviert 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 orangen Schweizer Einzahlungsschein
esrcodeline - string AN ESR Codeline für den orangen Schweizer Einzahlungsschein

Credit Card Knoten

Dieser Knoten liefert die Kreditkarteninformationen zur weiteren Verarbeitung an den Veranstalter zurück.

<credit_card
        accountholder="BillPay GmbH"
        cardnumber="5105105105105100"
        securitycode="123"
        expirationdate="201908"
        activationdate="20170813" />
System.out.println(preauthorizeResponse.getCreditCard().getAccountHolder());
System.out.println(preauthorizeResponse.getCreditCard().getCardNumber());
System.out.println(preauthorizeResponse.getCreditCard().getSecurityCode());
System.out.println(preauthorizeResponse.getCreditCard().getExpirationDate());
System.out.println(preauthorizeResponse.getCreditCard().getActivationDate());
<?php
/** @var \BillPay\Core\Responses\Preauthorize $preauthorizeResponse */
$preauthorizeResponse->getCreditCard()->getAccountHolder();
$preauthorizeResponse->getCreditCard()->getCardNumber();
$preauthorizeResponse->getCreditCard()->getSecurityCode();
$preauthorizeResponse->getCreditCard()->getExpirationDate();
$preauthorizeResponse->getCreditCard()->getActivationDate();
Attribute Pflicht Format Wert Info
accountholder + string AN..40 Inhaber der virtuellen Kreditkarte
cardnumber + long int N..16 Die virtuelle Kreditkartennummer
securitycode + string N..3 3-stelliger Prüfcode der virtuellen Kreditkarte (CVV/CVC)
expirationdate + string N..6 Gültigkeitsdatum der virtuellen Kreditkarte im Format: YYYYMM
activationdate + string N..8 Aktivierungsdatum der virtuellen Kreditkarte im Format: YYYYMMDD

Invoice Numbers Knoten

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

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

System.out.println(invoiceNumber.getBillpayInvoiceNumber());
System.out.println(invoiceNumber.getInvoiceId());
<?php
/** @var \BillPay\Core\Responses\Preauthorize $preauthorizeResponse */
$invoiceNumbers = $preauthorizeResponse->getInvoiceNumbers();

$invoiceNumbers[0]->getBillpayInvoiceNumber();
$invoiceNumbers[0]->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 PayLater/Ratenzahlung - paymenttype = “7”)

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

<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 = RequestResonse.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
/** @var \BillPay\Core\Responses\Preauthorize $preauthorizeResponse */
$instalmentDetails = $preauthorizeResponse->getInstalmentDetails();
$instalmentDetails->getDurationInMonth();
$instalmentDetails->getFeePercentage();
$instalmentDetails->getFee();
$instalmentDetails->getTotalAmount();
$instalmentDetails->getAnnualPercentageRate();
$instalmentDetails->getNominalPercentageRate();

$instalments = $instalmentDetails->getInstalments();
$instalments[0]->getAmount();
$instalments[0]->getDate();
$instalments[0]->getType();
Attribute Pflicht Format Werte Info
instl_plan + parent Knoten – wird nur für paymenttype= “7” (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 Buchung 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”)

Capture

Der “capture”-Request dient dazu die Buchung abzuschließen. Dies ist bei einem zweistufigen Buchungsprozess erforderlich, wenn im Preauthorize-Request das Attribut manualcapture = 1 gesetzt wurde. Mit erfolgreicher Durchführung des Capture-Request geht die Kundenforderung des Veranstalters rechtlich an BillPay über.

Request

Data Knoten

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

Default Params Knoten (Veranstalter-Zugangsdaten/Credentials)

Die Veranstalter API-Zugangsdaten werden durch BillPay generiert und Ihnen zur Verfügung gestellt.

<default_params
        mid="1234"
        pid="9999"
        passwordhash="25d55ad283aa400af464c76d713c07ad" />
captureRequest
    .setMerchantId(1234)
    .setPortalId(9999)
    .setApiPassword("clear text password")
<?php
/** @var \BillPay\Core\Requests\Capture $captureRequest */
$captureRequest
    ->setMerchantId(1234)
    ->setPortalId(9999)
    ->setApiPassword('clear text password');
Attribute Pflicht Format Info
mid + positive int Veranstalter ID / Merchant ID
pid + positive int Portal ID
passwordhash + string MD5 des durch BillPay vergebenen API-Passworts

Capture Params Knoten

In diesem Knoten wird die eindeutige durch BillPay vergebene Transaktionsnummer (transactionid), welche Ihnen in der Preauthorize-Response zurückgespielt wurde, sowie die von Ihnen vergebene Buchungsnummer erwartet.

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

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

captureRequest.getCart()
    .setReference("ZYLOGT")
    .setCurrencyIso3("EUR")
    .setOrderAmountGross(43230);
<?php
/** @var \BillPay\Core\Requests\Capture $captureRequest */
$captureRequest
    ->setTransactionId('1aa2fb2d-2b78-4393-bf06-be0012dda337')
    ->setReference('ZYLOGT')
    ->setMerchantInvoiceNumber('1234567');

$captureRequest->getCustomer()
    ->setId('123456789');

$captureRequest->getCart()
    ->setCurrencyIso3('EUR')
    ->setOrderAmountGross(43230);
Attribute Pflicht Format Werte Info
transactionid + string AN..50 Eindeutige durch BillPay vergebene Transaktionsnummer, welche Ihnen in der preauthorize-Response zurückgespielt wurde.
orderamountgross + positive int N..7 Gesamtbetrag der Buchung (mit Steuer)
[(articlequantity * articlepricegross) + shippingpricegross – rebategross])
currency + string A..3 3-stelliger Währungscode (z.B. “EUR”): ISO4217
reference - string AN..40 Eindeutige Buchungsnummer 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 Veranstalter-System (falls bereits bekannt)
Zulässige Zeichen:
0-9, a-z, A-Z, -, , #, ., :

Regex:
([A-Z]|[a-z]|[0-9]|-|
|#|:|.)*
customerid - string AN.40 Kundennummer im Veranstalterkundenstamm (zulässige Zeichen:
0-9, a-z, A-Z, .,-,_,/)

Response

Durch die Capture-Response kann anhand des Fehlercodes bestimmt werden, ob die Buchung erfolgreich abgeschlossen werden konnte, oder ob es zu einem Fehler kam. Wenn der Fehlercode 0 (error_code=“0”) zurückgegeben wird, konnte die Buchung im Billpay-System erfolgreich angelegt werden.

Data Knoten

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<data
        responsetype="CAPTURE"
        errorcode="0"
        customermessage=""
        merchantmessage=""
        developermessage="">
</data>
System.out.println(captureResponse.getErrorCode());
System.out.println(captureResponse.getMerchantMessage());
System.out.println(captureResponse.getDeveloperMessage());
System.out.println(captureResponse.getCustomerMessage());
<?php
/** @var \BillPay\Core\Responses\Capture $captureResponse */
$captureResponse->getErrorCode();
$captureResponse->getMerchantMessage();
$captureResponse->getDeveloperMessage();
$captureResponse->getCustomerMessage();
Attribute Pflicht Format Werte Info
responsetype + string CAPTURE
errorcode + non-negative int N..3 Fehlercode. Der Standardwert ist “0” und bedeutet kein Fehler. Auflistung der Fehlercodes
merchantmessage + string Die Information in der merchantmessage enthalten vertrauliche Detailinformationen, die dem Kunden nicht angezeigt werden dürfen.
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 (bezieht sich nur auf Rechnung Schuldbeitritt - paymenttype 8)

Dieser Knoten liefert die Bankverbindung von BillPay zurück, an die der Kunde den Reisepreis überweisen soll. Die BillPay Bankverbindung ist auf der Kundenrechnung, die der Kunde mit seinen Reiseunterlagen erhält, auszudrucken. Die Rechnungsstellung erfolgt durch den Veranstalter.

<invoice_bank_account
        activationperformed="0"
        accountholder="BillPay GmbH"
        accountnumber="DE07312312312312312"
        bankcode="BELADEBEXXX"
        bankname="Sparkasse Berlin"
        invoiceduedate="20170813"
        invoicereference="BPZYLOGT/9999" />
System.out.println(captureResponse.getInvoiceBankAccount().isActivationPerformed());
System.out.println(captureResponse.getInvoiceBankAccount().getAccountHolder());
System.out.println(captureResponse.getInvoiceBankAccount().getAccountNumber());
System.out.println(captureResponse.getInvoiceBankAccount().getBankCode());
System.out.println(captureResponse.getInvoiceBankAccount().getBankName());
System.out.println(captureResponse.getInvoiceBankAccount().getInvoiceDueDate());
System.out.println(captureResponse.getInvoiceBankAccount().getInvoiceReference());
<?php
/** @var \BillPay\Core\Responses\Capture $captureResponse */
$captureResponse->getInvoiceBankAccount()->isActivationPerformed();
$captureResponse->getInvoiceBankAccount()->getAccountHolder();
$captureResponse->getInvoiceBankAccount()->getAccountNumber();
$captureResponse->getInvoiceBankAccount()->getBankCode();
$captureResponse->getInvoiceBankAccount()->getBankName();
$captureResponse->getInvoiceBankAccount()->getInvoiceDueDate();
$captureResponse->getInvoiceBankAccount()->getInvoiceReference();
Attribute Pflicht Format Werte Info
activationperformed + boolean 0/1 Kenner, ob die Buchung bereits aktiviert wurde.
accountholder + string AN..255 Kontoinhaber/Begünstigter
accountnumber + string AN..40 BillPay IBAN
bankcode + string AN..16 BillPay BIC
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 orangen Schweizer Einzahlungsschein
esrcodeline - string AN ESR Codeline für den orangen Schweizer Einzahlungsschein

Credit Card Knoten

Dieser Knoten liefert die Kreditkarteninformationen zur weiteren Verarbeitung an den Veranstalter zurück.

<credit_card
        accountholder="BillPay GmbH"
        cardnumber="5105105105105100"
        securitycode="123"
        expirationdate="201908"
        activationdate="20170813" />
System.out.println(captureResponse.getCreditCard().getAccountHolder());
System.out.println(captureResponse.getCreditCard().getCardNumber());
System.out.println(captureResponse.getCreditCard().getSecurityCode());
System.out.println(captureResponse.getCreditCard().getExpirationDate());
System.out.println(captureResponse.getCreditCard().getActivationDate());
<?php
/** @var \BillPay\Core\Responses\Capture $captureResponse */
$captureResponse->getCreditCard()->getAccountHolder();
$captureResponse->getCreditCard()->getCardNumber();
$captureResponse->getCreditCard()->getSecurityCode();
$captureResponse->getCreditCard()->getExpirationDate();
$captureResponse->getCreditCard()->getActivationDate();
Attribute Pflicht Format Werte Info
accountholder + string AN..40 Inhaber der virtuellen Kreditkarte
cardnumber + long int N..16 Die virtuelle Kreditkartennummer
securitycode + string N..3 3-stelliger Prüfcode der virtuellen Kreditkarte (CVV/CVC)
expirationdate + string N..6 Gültigkeitsdatum der virtuellen Kreditkarte im Format: YYYYMM
activationdate + string N..8 Aktivierungsdatum der virtuellen Kreditkarte im Format: YYYYMMDD

Invoice Numbers Knoten

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

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

System.out.println(invoiceNumber.getBillpayInvoiceNumber());
System.out.println(invoiceNumber.getInvoiceId());
<?php
/** @var \BillPay\Core\Responses\Capture $captureResponse */
$invoiceNumbers = $captureResponse->getInvoiceNumbers();

$invoiceNumbers[0]->getBillpayInvoiceNumber();
$invoiceNumbers[0]->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 PayLater/Ratenzahlung - paymenttype = “7”)

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

<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 = RequestResonse.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
/** @var \BillPay\Core\Responses\Capture $captureResponse */
$instalmentDetails = $captureResponse->getInstalmentDetails();
$instalmentDetails->getDurationInMonth();
$instalmentDetails->getFeePercentage();
$instalmentDetails->getFee();
$instalmentDetails->getTotalAmount();
$instalmentDetails->getAnnualPercentageRate();
$instalmentDetails->getNominalPercentageRate();

$instalments = $instalmentDetails->getInstalments();
$instalments[0]->getAmount();
$instalments[0]->getDate();
$instalments[0]->getType();
Attribute Pflicht Format Werte Info
instl_plan +   parent Knoten – wird nur für paymenttype = “7” (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
  ↳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 der instl_plan-Knotens.
  ↳instl + Knoten Unterknoten der instl_list-Knotens.
      ↳date + DATE YYYYMMDD Fälligkeitsdatum der Rate/Gebühr
      ↳type + string AN Gebühren- bzw. Ratentyp (“immediate”, “first”, “date”, “fee”)

Buchungsmanagement

Request-Überblick

XML-Request Erklärung Zeitpunkt Service URL
Cancel Stornierung der gesamten Buchung Wird i. d. Regel im Backend durch eine Aktion / Event oder einen Cron-Job/Batch getriggert. [Base-URL]/cancel
Warenkorbänderung Jegliche Änderungen der Buchung oder der inkludierten Gebühren/Rabatte. Wird i. d. Regel getriggert, wenn sich die Reisekosten ändern, oder die Buchung storniert wird, aber die Stornierungsgebühren bestehen bleiben. [Base-URL]/editCartContent

Cancel

Mit dem “Cancel”-Request wird eine zuvor bei BillPay eröffnete Forderung vollständig storniert (Der Forderungsbetrag wird auf 0 Euro gesetzt). Falls der Kunde bereits Zahlungen an BillPay geleistet hat, oder fällige Beträge bereits vom Konto eingezogen wurde, wird der geleistete Betrag automatisiert zurücküberwiesen und eine entsprechende Mitteilung an den Kunden versendet.

Request

Data Knoten

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

Default Params Node (Merchant Credentials)

Die API-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 Veranstalter ID / Merchant ID/Merchant ID
pid + positive int Portal ID
passwordhash + string MD5 Hash des API-Passworts

Cancel Params Knoten

<cancel_params
        reference="ZYLOGT"
        orderamountgross="43230"
        currency="EUR" />
cancelRequest.getCart()
    .setReference("ZYLOGT")
    .setCurrencyIso3("EUR")
    .setOrderAmountGross(43230);
Attribute Pflicht Format Werte Info
reference + string AN..40 Eindeutige Buchungsnummer 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]|-|
)*
orderamountgross + positive int N..7 Bruttowert (mit Steuer) der Buchung 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 auf den sich die Response bezieht
errorcode + non-negative int N..3 Fehlercode. Der Standardwert ist “0” und bedeutet kein Fehler. Auflistung der Fehlercodes
merchantmessage + string Die Information in der merchantmessage enthalten vertrauliche Detailinformationen, die dem Kunden nicht angezeigt werden dürfen. (ausschließlich)
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/Positionen einer Buchung im BillPay-System geändert werden. Es können bspw. einzelne Artikel oder ganze Warenkorbpositionen aus dem Warenkorb entfernt oder hinzugefügt werden. Ebenfalls können Gebühren erhöht oder reduziert werden.

Für die Erhöhung des Buchungswerts durch Hinzufügen von Warenkorbpositionen oder Erhöhung von Gebühren gelten folgende Regeln:

  • Ist der neue Warenkorbwert der Buchung kleiner oder gleich dem alten Warenkorb, wird die Änderung in jedem Fall akzeptiert.
  • Ist der neue Warenkorbwert größer als der alte Warenkorb, wird Seitens BillPay geprüft ob eine Erhöhung des Buchungswertes zulässig ist. 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 bestehen.

Inhaltlich meldet der Veranstalter 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 Request
apiversion string 2.0.0 BillPay API Version

Default Params Knoten (Veranstalter Zugangsdaten)

Die API-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 Veranstalter ID / Merchant ID/Merchant ID
pid + positive int Portal ID
passwordhash + string MD5 Hash des API-Passworts

Total Knoten

Der total-Knoten beinhaltet alle positionsübergreifenden Informationen zur Buchung inklusive Buchungsnummer und die enthaltenen Gebühren und Rabatte.

<total
        shippingname="Express Versand"
        shippingpricenet="0"
        shippingpricegross="0"
        rebatenet="930"
        rebategross="1000"
        orderamountnet="11675"
        orderamountgross="14000"
        currency="EUR"
        reference="ZYLOGT" />
editCartContentRequest.getShipping()
    .setName("none")
    .setPriceNet(0)
    .setPriceGross(0);

editCartContentRequest.getCart()
    .setOrderAmountNet(11675)
    .setOrderAmountGross(14000)
    .setCurrencyIso3("EUR")
    .setReference("ZYLOGT")
    .createAndAddRebate()
        .setRebateNet(930)
        .setRebateGross(1000);
Attribute Pflicht Format Werte Info
shippingname + string AN..50 Versandart (z.B. “Express”, “Email”, etc..)
shippingpricenet + non-negative int N..7 Nettowert (ohne 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 Buchung in kleinster Währungseinheit (1,00 EUR = 100)
[(articlequantity * articlepricenet) + shippingpricenet – rebatenet]
orderamountgross + positive int N..7 Bruttowert (mit Steuer) der Buchung 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 Buchungsnummer 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 (Liste der Buchungspositionen)

Der article_data-Knoten beinhaltet alle Informationen rund um die in der Buchung enthaltenen Warenkorbpositionen. Pro Position (einzigartiger Posten) wird ein article-Knoten (XML tag) gesetzt. Bei kostenpflichtigen Stornierungen, ist der verbleibenden Betrag (=Stornierungsgebühr) mit Artikel ID “BP_CANCELLATION_FEE” zu übergeben.

<article_data>
    <article 
        articleid="BP_CANCELLATION_FEE" 
        articlequantity="1" 
        articletype="1"
        articlename="LH188" 
        articleprice="12605" 
        articlepricegross="15000" />
    </article_data>
editCartContentRequest.getCart().createAndAddArticle()
    .setId("BP_CANCELLATION_FEE")
    .setQuantity(1)
    .setType(ArticleType.FLIGHT)
    .setName("cancellation fee")
    .setPriceNet(12605)
    .setPriceGross(15000); 
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.
0: Sonstig
1: Flug
2: Pauschalreise (Paket mit Flug)
3: Kombination mit Flug
4: Kombination ohne Flug
5: Hotel
6: Reiseversicherung
7: Mietwagen
articlequantity + positive int N..7 Menge des Artikels im Warenkorb z. B. Anzahl der Übernachtungen
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)

Response

Die Antwort auf den EditCartContent-Request enthält im Erfolgsfall den Error-Code “0” und falls der Request fehlschlagen sollte, einen abweichenden Error-Code und dazugehörigen Fehlermeldung.

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(editCartContentResponse.getErrorCode());
System.out.println(editCartContentResponse.getMerchantMessage());
System.out.println(editCartContentResponse.getDeveloperMessage());
System.out.println(editCartContentResponse.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 Die Information in der merchantmessage enthalten vertrauliche Detailinformationen, die dem Kunden nicht angezeigt werden dürfen.
customermessage + string Fehlermeldung für den Kunden
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 Veranstalter zurück.

<assigned_invoice_number>
    <invoice_number
        invoiceid="REBP1234/1700186R1"
        billpayinvoicenumber="ZYLOGT#1" />
</assigned_invoice_number>        
InvoiceNumber invoiceNumber = RequestResonse.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 PayLater/Ratenzahlung - paymenttype = “7”)

In diesem Knoten gibt BillPay alle relevanten Informationen zur Ratenzahlung mit dem aktualisierten Ratenplan zurück.

<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 = RequestResonse.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 = “7” (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 Buchung 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”)

Get Billpay Bank Data

Sofern die Buchung mit Zahlart Rechnung Schuldbeitritt (paymenttype=“8”) getätigt wurde, können mit diesem Request die Kontodaten für die Kundenzahlung erneut angefordert werden. Die Response enthält alle Informationen, die der Kunde zum Begleichen der Forderung benötig. Ist die Buchung bereits aktiviert, enthält die Response auch das gesetzte Zahlungsziel.

Request

Data Node

<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 (Veranstalter-Zugangsdaten/Credentials

Die Veranstalter API-Zugangsdaten werden durch BillPay generiert und Ihnen 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 Veranstalter ID / Merchant ID
pid + positive int Portal ID
passwordhash + string MD5 des durch BillPay vergebenen API-Passworts

Order Params Knoten

 <order_params reference="ZYLOGT" />
getBillPayBankDataRequest.setReference("ZYLOGT");
Attribute Pflicht Format Werte Info
reference + string AN..40 Eindeutige Buchungsnummer 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 Response zu diesen Request liefert alle relevanten Informationen, der der Kunde zum Begleichen der Rechnung 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(getBillPayBankDataResponse.getErrorCode());
System.out.println(getBillPayBankDataResponse.getMerchantMessage());
System.out.println(getBillPayBankDataResponse.getDeveloperMessage());
System.out.println(getBillPayBankDataResponse.getCustomerMessage());
Attribute Pflicht Format Values Info
responsetype + string GET_BILLPAY_BANK_DATA Name des Requests auf den sich die Response bezieht
errorcode + non-negative int N..3 Fehlercode. Der Standardwert ist “0” und bedeutet kein Fehler. Auflistung der Fehlercodes
merchantmessage + string Die Information in der merchantmessage enthalten vertrauliche Detailinformationen, die dem Kunden nicht angezeigt werden dürfen.
customermessage + string Fehlermeldung für den Kunden (wird nicht benötigt)
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 (bezieht sich nur auf Rechnung Schuldbeitritt - paymenttype 8)

Dieser Knoten liefert die Bankverbindung von BillPay zurück, an die der Kunde den Reisepreis überweisen soll. Die BillPay Bankverbindung ist auf der Kundenrechnung, die der Kunde mit seinen Reiseunterlagen enthält, auszudrucken.

<bank_account
        accountholder="BillPay GmbH"
        accountnumber="DE07312312312312312"
        bankcode="BELADEBEXXX"
        bankname="Sparkasse Berlin"
        firstduedate="20170707"
        invoicereference="BPZYLOGT/9999" />
System.out.println(getBillPayBankDataResponse.getInvoiceBankAccount().getAccountHolder());
System.out.println(getBillPayBankDataResponse.getInvoiceBankAccount().getAccountNumber());
System.out.println(getBillPayBankDataResponse.getInvoiceBankAccount().getBankCode());
System.out.println(getBillPayBankDataResponse.getInvoiceBankAccount().getBankName());
System.out.println(getBillPayBankDataResponse.getInvoiceBankAccount().getInvoiceDueDate());
System.out.println(getBillPayBankDataResponse.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

Dieser Knoten führt die Rechnungsnummer und die Rechnung-und Forderungs-ID aus dem BillPay System für den Ausnahmefall, dass BillPay die Rechnungsstellung übernimmt.

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

System.out.println(dueDate.getDuedate());
System.out.println(dueDate.getInvoiceid());
Attribute Pflicht Format Werte Info
invoice + Unterknoten des invoice_list-Knotens
  ↳duedate + string N..8 Zahlungsziel im Format JJJJMMTT
  ↳invoiceid - string AN..40 ([A-Z]|[a-z]|[0-9]|-|_|#|:|.)*

Kundendokumente

Ein weiterer Teil der Integration der BillPay Zahlarten umfasst die Anpassung der Kundendokumente (Buchungsbestätigung und Rechnung), die durch den Veranstalter 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

Rechnungstexte

Zahlart Deutsch English
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 using the reference $$ reference $$ 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 booking by the BillPay GmbH.
PayLater/Ratenkauf 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 booking 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 booking was completed and on the booking 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.

Beispiel-Requests

Preauth: Rechnung

<?xml version="1.0" encoding="UTF-8"?>
<data requesttype="PREAUTHORIZE" tcaccepted="1" expecteddaystillshipping="45" manualcapture="0" paymenttype="8" 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="ZYLOGT" merchantinvoicenumber="1234567" />
    <article_data>
        <article articleid="220-2365851307" articlequantity="1" articletype="1" articlename="LH188" articlepricenet="20567" articlepricegross="22115">
            <flight_information departingfrom="TXL" departingon="20170818" arrivingat="FRA"  arrivingon="20170818" bookingclass="bc" routetype="ow" tickettype="fl" />
        </article> 
        <article articleid="220-2365851307" articlequantity="1" articletype="1" articlename="LH188" articlepricenet="20567" articlepricegross="22115">
            <flight_information departingfrom="TXL" departingon="20170820" arrivingat="FRA"  arrivingon="20170820" bookingclass="bc" routetype="ow" tickettype="fl" />
        </article>    
    </article_data>
    <trip_data historicaltripcount="1" historicaltripamount="80000" historicaltripcurrency="EUR">
        <traveler_list groupsize="2">
            <traveler salutation="Herr" firstname="Thomas" lastname="Testkunde" dateofbirth="19741012">
                <flight_information>
                        <frequent_flyer membership="1" program="1" membershipid="12345" />
                </flight_information>
            </traveler> 
           <traveler salutation="Frau" firstname="Thomassina" lastname="Testkunde" dateofbirth="19720210">
                <flight_information>
                        <frequent_flyer membership="0" program="0" membershipid="0" />
                </flight_information>
            </traveler>
        </traveler_list>
    </trip_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_COLLATERAL_PROMISE);

    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()
        .setDaysTillShipping(45)
        .setName("none")
        .setPriceNet(0)
        .setPriceGross(0);

    preauthorizeRequest.getCart()
        .setOrderAmountNet(23277)
        .setOrderAmountGross(27700)
        .setCurrencyIso3("EUR")
        .setReference("ZYLOGJ")
        .createAndAddRebate()
            .setRebateNet(840)
            .setRebateGross(1000);

    preauthorizeRequest.getCart().createAndAddArticle()
        .setId("220-2365851307")
        .setQuantity(1)
        .setType(ArticleType.FLIGHT)
        .setName("LH188")
        .setPriceNet(10924)
        .setPriceGross(13000)
        .createFlight()
            .setDepartingFromAirport("TXL")
            .setDepartingOn(new SimpleDateFormat("yyyy/MM/dd").parse("2018/10/14"))
            .setArrivingAtAirport("MUC")
            .setArrivingOn(new SimpleDateFormat("yyyy/MM/dd").parse("2018/10/14"))
            .setBookingClass(BookingClass.BUSINESS_CLASS)
            .setRouteType(RouteType.ONE_WAY)
            .setTicketType(TicketType.NO_REBOOKING_FEE);

    preauthorizeRequest.getCart().createAndAddArticle()
        .setId("220-2365851308")
        .setQuantity(1)
        .setType(ArticleType.FLIGHT)
        .setName("LH376")
        .setPriceNet(13193)
        .setPriceGross(15700)
        .createFlight()
            .setDepartingFromAirport("MUC")
            .setDepartingOn(new SimpleDateFormat("yyyy/MM/dd").parse("2018/10/15"))
            .setArrivingAtAirport("DOH")
            .setArrivingOn(new SimpleDateFormat("yyyy/MM/dd").parse("2018/10/15"))
            .setBookingClass(BookingClass.BUSINESS_CLASS)
            .setRouteType(RouteType.ONE_WAY)
            .setTicketType(TicketType.NO_REBOOKING_FEE);

    TripData tripData = preauthorizeRequest.createTripData();
    tripData.setGroupSize(2)
        .setHistoricalTripCount(1)
        .setHistoricalTripAmount(80000)
        .setHistoricaltripCurrency("EUR");

    tripData.createAndAddTraveler()
        .setDateOfBirth(new SimpleDateFormat("yyyy/MM/dd").parse("1980/10/14"))
        .setSalutation("Herr")
        .setFirstName("Thomas")
        .setLastName("Testkunde")
        .setMembership(1)
        .setProgram(1)
        .setMembershipId("12345");

    tripData.createAndAddTraveler()
        .setDateOfBirth(new SimpleDateFormat("yyyy/MM/dd").parse("1980/10/14"))
        .setSalutation("Frau")
        .setFirstName("Thomassina")
        .setLastName("Testkunde")
        .setMembership(0)
        .setProgram(0)
        .setMembershipId("0");

    //sending the Request to BillPay and retrieving the response

    PreauthorizeResponse preauthorizeResponse = preauthorizeRequest.send();

    //getting data out of the response

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

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

        // the following are only returned if you are implementing virtual credit card solution
        try {
            System.out.println(preauthorizeResponse.getCreditCard().getAccountHolder());
            System.out.println(preauthorizeResponse.getCreditCard().getCardNumber());
            System.out.println(preauthorizeResponse.getCreditCard().getSecurityCode());
            System.out.println(preauthorizeResponse.getCreditCard().getExpirationDate());
            System.out.println(preauthorizeResponse.getCreditCard().getActivationDate());
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

Preauth: Lastschrift

<?xml version="1.0" encoding="UTF-8"?>
<data requesttype="PREAUTHORIZE" tcaccepted="1" expecteddaystillshipping="45" manualcapture="0" paymenttype="9" 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="ZYLOGT" merchantinvoicenumber="1234567" />
    <article_data>
        <article articleid="220-2365851307" articlequantity="1" articletype="1" articlename="LH188" articlepricenet="20567" articlepricegross="22115">
            <flight_information departingfrom="TXL" departingon="20170818" arrivingat="FRA"  arrivingon="20170818" bookingclass="bc" routetype="ow" tickettype="fl" />
        </article> 
        <article articleid="220-2365851307" articlequantity="1" articletype="1" articlename="LH188" articlepricenet="20567" articlepricegross="22115">
            <flight_information departingfrom="TXL" departingon="20170820" arrivingat="FRA"  arrivingon="20170820" bookingclass="bc" routetype="ow" tickettype="fl" />
        </article>    
    </article_data>
    <trip_data historicaltripcount="1" historicaltripamount="80000" historicaltripcurrency="EUR">
        <traveler_list groupsize="2">
            <traveler salutation="Herr" firstname="Thomas" lastname="Testkunde" dateofbirth="19741012">
                <flight_information>
                        <frequent_flyer membership="1" program="1" membershipid="12345" />
                </flight_information>
            </traveler> 
           <traveler salutation="Frau" firstname="Thomassina" lastname="Testkunde" dateofbirth="19720210">
                <flight_information>
                        <frequent_flyer membership="0" program="0" membershipid="0" />
                </flight_information>
            </traveler>
        </traveler_list>
    </trip_data>
    <bank_account accountholder="Thomas Testkunde" accountnumber="DE12500105170648489890" sortcode="" />
    <fraud_detection sessionid="97d3d1b1cc6b0686bbc1f19feec80e6c" />
</data>
private void preauthorizeDirectDebitExample() 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_COLLATERAL_PROMISE)
        .createBankAccount()
        .setAccountHolder("Thomas Testkunde")
        .setAccountNumber("DE96100500003521863462")
        .setSortCode("BELADEBEXXX");

    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("10116")
            .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()
        .setDaysTillShipping(45)
        .setName("none")
        .setPriceNet(0)
        .setPriceGross(0);

    preauthorizeRequest.getCart()
        .setOrderAmountNet(23277)
        .setOrderAmountGross(27700)
        .setCurrencyIso3("EUR")
        .setReference("ZYLOGLZ")
        .createAndAddRebate()
            .setRebateNet(840)
            .setRebateGross(1000);

    preauthorizeRequest.getCart().createAndAddArticle()
        .setId("220-2365851307")
        .setQuantity(1)
        .setType(ArticleType.FLIGHT)
        .setName("LH188")
        .setPriceNet(10924)
        .setPriceGross(13000)
        .createFlight()
            .setDepartingFromAirport("TXL")
            .setDepartingOn(new SimpleDateFormat("yyyy/MM/dd").parse("2018/10/14"))
            .setArrivingAtAirport("MUC")
            .setArrivingOn(new SimpleDateFormat("yyyy/MM/dd").parse("2018/10/14"))
            .setBookingClass(BookingClass.BUSINESS_CLASS)
            .setRouteType(RouteType.ONE_WAY)
            .setTicketType(TicketType.NO_REBOOKING_FEE);

    preauthorizeRequest.getCart().createAndAddArticle()
        .setId("220-2365851308")
        .setQuantity(1)
        .setType(ArticleType.FLIGHT)
        .setName("LH376")
        .setPriceNet(13193)
        .setPriceGross(15700)
        .createFlight()
            .setDepartingFromAirport("MUC")
            .setDepartingOn(new SimpleDateFormat("yyyy/MM/dd").parse("2018/10/15"))
            .setArrivingAtAirport("DOH")
            .setArrivingOn(new SimpleDateFormat("yyyy/MM/dd").parse("2018/10/15"))
            .setBookingClass(BookingClass.BUSINESS_CLASS)
            .setRouteType(RouteType.ONE_WAY)
            .setTicketType(TicketType.NO_REBOOKING_FEE);

    TripData tripData = preauthorizeRequest.createTripData();
    tripData.setGroupSize(2)
        .setHistoricalTripCount(1)
        .setHistoricalTripAmount(80000)
        .setHistoricaltripCurrency("EUR");

    tripData.createAndAddTraveler()
        .setDateOfBirth(new SimpleDateFormat("yyyy/MM/dd").parse("1980/10/14"))
        .setSalutation("Herr")
        .setFirstName("Thomas")
        .setLastName("Testkunde")
        .setMembership(1)
        .setProgram(1)
        .setMembershipId("12345");

    tripData.createAndAddTraveler()
        .setDateOfBirth(new SimpleDateFormat("yyyy/MM/dd").parse("1980/10/14"))
        .setSalutation("Frau")
        .setFirstName("Thomassina")
        .setLastName("Testkunde")
        .setMembership(0)
        .setProgram(0)
        .setMembershipId("0");

    //sending the Request to BillPay and retrieving the response

    PreauthorizeResponse preauthorizeResponse = preauthorizeRequest.send();

    //getting data out of the response

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

        // The following is only returned if you are implementing virtual credit card solution
        try {
            System.out.println(preauthorizeResponse.getCreditCard().getAccountHolder());
            System.out.println(preauthorizeResponse.getCreditCard().getCardNumber());
            System.out.println(preauthorizeResponse.getCreditCard().getSecurityCode());
            System.out.println(preauthorizeResponse.getCreditCard().getExpirationDate());
            System.out.println(preauthorizeResponse.getCreditCard().getActivationDate());
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

Preauth: PayLater

<?xml version="1.0" encoding="UTF-8"?>
<data requesttype="PREAUTHORIZE" tcaccepted="1" expecteddaystillshipping="45" manualcapture="0" paymenttype="7" 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="ZYLOGT" merchantinvoicenumber="1234567" />
    <article_data>
        <article articleid="220-2365851307" articlequantity="1" articletype="1" articlename="LH188" articlepricenet="20567" articlepricegross="22115">
            <flight_information departingfrom="TXL" departingon="20170818" arrivingat="FRA"  arrivingon="20170818" bookingclass="bc" routetype="ow" tickettype="fl" />
        </article> 
        <article articleid="220-2365851307" articlequantity="1" articletype="1" articlename="LH188" articlepricenet="20567" articlepricegross="22115">
            <flight_information departingfrom="TXL" departingon="20170820" arrivingat="FRA"  arrivingon="20170820" bookingclass="bc" routetype="ow" tickettype="fl" />
        </article>    
    </article_data>
    <trip_data historicaltripcount="1" historicaltripamount="80000" historicaltripcurrency="EUR">
        <traveler_list groupsize="2">
            <traveler salutation="Herr" firstname="Thomas" lastname="Testkunde" dateofbirth="19741012">
                <flight_information>
                        <frequent_flyer membership="1" program="1" membershipid="12345" />
                </flight_information>
            </traveler> 
           <traveler salutation="Frau" firstname="Thomassina" lastname="Testkunde" dateofbirth="19720210">
                <flight_information>
                        <frequent_flyer membership="0" program="0" membershipid="0" />
                </flight_information>
            </traveler>
        </traveler_list>
    </trip_data>    
    <rate_Request ratecount="6" terminmonths="6" totalamountgross="45823" />
    <bank_account accountholder="Thomas Testkunde" accountnumber="DE12500105170648489890" sortcode="" />
    <fraud_detection sessionid="97d3d1b1cc6b0686bbc1f19feec80e6c" />
</data>
private void preauthorizePayLaterExample() 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_COLLATERAL_PROMISE)
        .createBankAccount()
        .setAccountHolder("Thomas Testkunde")
        .setAccountNumber("DE12500105170648489890")
        .setSortCode("BELADEBEXXX");

    preauthorizeRequest.getPaymentDetails().createInstalment()
        .setRateCount(12)
        .setTermInMonths(12)
        .setTotalAmountGross(31024);

    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()
        .setDaysTillShipping(45)
        .setName("none")
        .setPriceNet(0)
        .setPriceGross(0);

    preauthorizeRequest.getCart()
        .setOrderAmountNet(23277)
        .setOrderAmountGross(27700)
        .setCurrencyIso3("EUR")
        .setReference("ZYLOGZ")
        .createAndAddRebate()
            .setRebateNet(840)
            .setRebateGross(1000);

    preauthorizeRequest.getCart()
        .createAndAddArticle()
        .setId("220-2365851307")
        .setQuantity(1)
        .setType(ArticleType.FLIGHT)
        .setName("LH188")
        .setPriceNet(10924)
        .setPriceGross(13000)
        .createFlight()
            .setDepartingFromAirport("TXL")
            .setDepartingOn(new SimpleDateFormat("yyyy/MM/dd").parse("2018/10/14"))
            .setArrivingAtAirport("MUC")
            .setArrivingOn(new SimpleDateFormat("yyyy/MM/dd").parse("2018/10/14"))
            .setBookingClass(BookingClass.BUSINESS_CLASS)
            .setRouteType(RouteType.ONE_WAY)
            .setTicketType(TicketType.NO_REBOOKING_FEE);

    preauthorizeRequest.getCart().createAndAddArticle()
        .setId("220-2365851308")
        .setQuantity(1)
        .setType(ArticleType.FLIGHT)
        .setName("LH376")
        .setPriceNet(13193)
        .setPriceGross(15700)
        .createFlight()
            .setDepartingFromAirport("MUC")
            .setDepartingOn(new SimpleDateFormat("yyyy/MM/dd").parse("2018/10/15"))
            .setArrivingAtAirport("DOH")
            .setArrivingOn(new SimpleDateFormat("yyyy/MM/dd").parse("2018/10/15"))
            .setBookingClass(BookingClass.BUSINESS_CLASS)
            .setRouteType(RouteType.ONE_WAY)
            .setTicketType(TicketType.NO_REBOOKING_FEE);

    TripData tripData = preauthorizeRequest.createTripData();
    tripData.setGroupSize(2)
        .setHistoricalTripCount(1)
        .setHistoricalTripAmount(80000)
        .setHistoricaltripCurrency("EUR");

    tripData.createAndAddTraveler()
        .setDateOfBirth(new SimpleDateFormat("yyyy/MM/dd").parse("1980/10/14"))
        .setSalutation("Herr")
        .setFirstName("Thomas")
        .setLastName("Testkunde")
        .setMembership(1)
        .setProgram(1)
        .setMembershipId("12345");

    tripData.createAndAddTraveler()
        .setDateOfBirth(new SimpleDateFormat("yyyy/MM/dd").parse("1980/10/14"))
        .setSalutation("Frau")
        .setFirstName("Thomassina")
        .setLastName("Testkunde")
        .setMembership(0)
        .setProgram(0)
        .setMembershipId("0");

    //sending the Request to BillPay and retrieving the response

    PreauthorizeResponse preauthorizeResponse = preauthorizeRequest.send();

    //getting data out of the response

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

        // The following is only returned if instalments is the chose payment method
        InstalmentPlan instalmentPlan = preauthorizeResponse.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 you are implementing virtual credit card solution
        try {
            System.out.println(preauthorizeResponse.getCreditCard().getAccountHolder());
            System.out.println(preauthorizeResponse.getCreditCard().getCardNumber());
            System.out.println(preauthorizeResponse.getCreditCard().getSecurityCode());
            System.out.println(preauthorizeResponse.getCreditCard().getExpirationDate());
            System.out.println(preauthorizeResponse.getCreditCard().getActivationDate());
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

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="ZYLOGT" 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("ZYLOGT")
        .setCurrencyIso3("EUR")
        .setOrderAmountGross(44230);

    CaptureResponse captureResponse = captureRequest.send();

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

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

        // The following is only returned if instalments is the chose payment method
        InstalmentPlan instalmentPlan = captureResponse.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 you are implementing virtual credit card solution
        System.out.println(captureResponse.getCreditCard().getAccountHolder());
        System.out.println(captureResponse.getCreditCard().getCardNumber());
        System.out.println(captureResponse.getCreditCard().getSecurityCode());
        System.out.println(captureResponse.getCreditCard().getExpirationDate());
        System.out.println(captureResponse.getCreditCard().getActivationDate());
    }
}

Cancel

In diesem Fall ist die Buchung komplett storniert und für den Kunden entstehen keine Kosten.

<?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="ZYLOGT" 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("ZYLOGT")
        .setCurrencyIso3("EUR")
        .setOrderAmountGross(44230);

    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());
    }
}

Edit Cart: Umbuchung

Der Kunde hat seinen Flug umgebucht und zahlt 50 € Umbuchungsgebühr.

<?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="None" shippingpricenet="0" shippingpricegross="0" rebatenet="930" rebategross="1000" orderamountnet="20460" orderamountgross="22000" currency="EUR" reference="ZYLOGT" />
    <article_data>
        <article articleid="220-2365851307" articlequantity="1" articlename="LH188" articlepricenet="16740" articlepricegross="18000" />
        <article articleid="2345" articlequantity="1" articlename="Change booking fee" articlepricenet="4650" articlepricegross="5000" />
    </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("none")
        .setPriceNet(0)
        .setPriceGross(0);

    editCartContentRequest.getCart().createAndAddArticle()
        .setId("220-2365851307")
        .setQuantity(1)
        .setType(ArticleType.FLIGHT)
        .setName("LH188")
        .setPriceNet(20567)
        .setPriceGross(22115);

    editCartContentRequest.getCart().createAndAddArticle()
        .setId("2345")
        .setQuantity(1)
        .setType(ArticleType.FLIGHT)
        .setName("Change booking fee")
        .setPriceNet(4200)
        .setPriceGross(5000);

    editCartContentRequest.getCart()
        .setOrderAmountNet(16270)
        .setOrderAmountGross(26115)
        .setCurrencyIso3("EUR")
        .setReference("ZYLOGT")
        .createAndAddRebate()
            .setRebateNet(930)
            .setRebateGross(1000);

     EditCartContentResponse editCartContentResponse = editCartContentRequest.send();   

     if (captureResponse.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());
    }
}

Edit Cart: mit Stornogebühr

Der Kunde storniert kostenpflichtig und zahlt 150 € Umbuchungsgebühr.

<?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="None" shippingpricenet="0" shippingpricegross="0" rebatenet="930" rebategross="1000" orderamountnet="13020" orderamountgross="14000" currency="EUR" reference="ZYLOGT" />
    <article_data>
        <article articleid="BP_CANCELLATION_FEE" articlequantity="1" articlepricenet="13950" articlepricegross="15000" />
    </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("none")
        .setPriceNet(0)
        .setPriceGross(0);

    editCartContentRequest.getCart().createAndAddArticle()
        .setId("BP_CANCELLATION_FEE")
        .setQuantity(1)
        .setType(ArticleType.FLIGHT)
        .setName("cancellation fee")
        .setPriceNet(12605)
        .setPriceGross(15000);

    editCartContentRequest.getCart()
        .setOrderAmountNet(11675)
        .setOrderAmountGross(14000)
        .setCurrencyIso3("EUR")
        .setReference("ZYLOGT")
        .createAndAddRebate()
            .setRebateNet(930)
            .setRebateGross(1000);

     EditCartContentResponse editCartContentResponse = editCartContentRequest.send();

     if(captureResponse.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());
    }
}

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="ZYLOGT" />
</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("ZYLOGT");

    GetBillPayBankDataResponse getBillPayBankDataResponse = getBillPayBankDataRequest.send();

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

        DueDate dueDate = getBillPayBankDataResponse.getDueDates().get(0);
        System.out.println(dueDate.getDuedate());
        System.out.println(dueDate.getInvoiceid());
    }
}

Anhang

Salutations

Gender “female”: Gender “male”:
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

Frequent Flyer Programs

ID Number Program Name
0 None
1 Other (not listed)
2 Miles & More
3 Topbonus
4 Etihad Guest
5 Flying Blue
6 Iberia Plus
7 S7 Priority
8 Aeroflot Bonus
9 EuroBonus
10 Flying Blue
11 MilleMiglia
12 WOW Club
13 LANPASS
14 Smiles
15 Aerolíneas Plus
16 LifeMiles
17 MileagePlus
18 SkyMiles
19 AAdvantage
20 Aeroplan
21 Altitude
22 Club Premier
23 Frequent Flyer
24 Executive Club
25 Executive Club
26 Avios Travel Programme
27 My Jet2 Travel Club
28 Vantage Club
29 Flying Club
30 Egyptair Plus
31 Egyptair Plus
32 Matmid Club
33 Miles & Smiles
34 Pegasus Plus
35 SunPoints
36 Phoenix Miles
37 Eastern Miles
38 The Marco Polo Club
39 ANA Mileage Club
40 JAL Mileage Bank
41 BIG
42 Royal Orchid Plus
43 Qantas Frequent Flyer
44 Velocity Frequent Flyer
45 Airpoints

API Fehlermeldungen

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 Veranstalter zu loggen, um auftretende Fehler der Implementierung zu überwachen und zu korrigieren.

Error-Code Message Audience Message
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.