The preauthorization request is used to transmit all necessary information to perform the identity and credit check on the customer. The result of this check (either "APPROVED" or "DENIED") will be sent back to your system in realtime and will determine whether or not the customer can use the selected BillPay payment method.
In the case of a positive authorization, the order will be created in the BillPay system based upon the unique ID sent in the parameter "reference". From a legal viewpoint, this is the moment BillPay acquires the debt for this specific customer and order.
Request
XML Header
<?xml version="1.0" encoding="UTF-8"?>
Data Node
Attribute | Type | Possible Values | Details |
---|---|---|---|
tcaccepted | Int | 0/1 | Boolean flag that indicates if the customer has accepted the BillPay terms of service / the data protection policy |
expecteddaystillshipping | Int | Payment type 1-4: the expected delay in shipping, Payment Type 7: Amount of days until the customer will depart for their trip. | |
capturerequestnecessary | Int | Standard: 0 | Boolean flag that indicates if the preauthorization is done in Autocapture mode; Attention: The standard is set to "0"; any changes to this standard have to be agreed upon by te BillPay integration support. |
paymenttype | Int | 1: Invoice 2: Direct Debit 3: Transaction Credit 4: PayLater 7: PayLater Collateral Promise (for Travel Industry) |
Id of the desired payment method |
<data
tcaccepted="1"
expecteddaystillshipping="0"
capturerequestnecessary="0"
paymenttype="1"
api_version="1.5.11">
<!-- Request Daten -->
</data>
Default Params Node (Merchant Credentials)
Attribute | Type | Details |
---|---|---|
mid | Int | Merchant Id |
pid | Int | Portal Id |
bpsecure | String | MD5 hash of the API security key (delivered by BillPay) |
<default_params
mid="4441"
pid="6021"
bpsecure="25d55ad283aa400af464c76d713c07ad"/>
Preauth Params
This node is only required if your portal makes use of the prescoring request. If you have not contractually agreed to the implementation of prescoring, than you can ignore this data.
Parameters specific to the Payment Method Pre-scoring | Mandatory | Data format | Comments |
---|---|---|---|
is_prescored | + | 0: No 1: Yes |
Value indicates if a prescore -request was sent previously. Please note: If the Payment Method Pre-scoring is activated, the value "1" has to be sent. |
bptid | + | AN ... 50 | BillPay transaction number The transaction number is sent in the response to the prescore-request. It is used to match prescore- and preauthorize-requests. |
<preauth_params
is_prescored="1"
bptid="1aa2fb2d-2b78-4393-bf06-be0012dda337" />
Customer Details Node (customer billing address)
Attribute | Mandatory | Type | Possible Values | Details |
---|---|---|---|---|
customerid | - | String | AN..40 | Customer ID in the merchant system (Allowed characters are: 0-9, a-z, A-Z, .,-,_,/) |
customertype | + | Int | g: Guest n: New Customer e: Existing Customer |
Type of customer |
salutation | + | String | Default: See addendum Saluations |
Salutation |
title | - | String | AN..20 | academic title (e.g. "Dr.") |
firstName | + | String | AN..40 | First name |
lastName | + | String | AN..40 | Last name |
street | + | String | AN..40 | Street |
streetNo | - | String | AN..7 | House number |
addressAddition | - | String | AN..40 | Address addition |
zip | + | String | AN..7 | ZIP code |
city | + | String | AN..40 | City |
country | + | String | ISO3166-aplha-3 | Customer Country Code (z.B."DEU") |
+ | String | AN..40 (excl. non-valid special characters) | Email address | |
phone | -* | String | AN..40 | Phone number |
cellPhone | - | String | AN..40 | Mobile number |
birthday | -* | String | JJJJMMTT | Date of birth |
language | + | String | ISO639-1 | Customer language (e.g. "de") |
ip | + | String | IPv4 & IPv6 | IP address of the client |
customerGroup | + | String | p: Private b: Business |
Customer group |
<customer_details
customerid="123456"
customertype="e"
salutation="Herr"
title=""
firstName="Thomas"
lastName="Testkunde"
street="Tinnowitzerstrasse 1"
streetNo=""
addressAddition=""
zip="10115"
city="Berlin"
country="DEU"
email="anymail@gmx.de"
phone="03012345678"
cellPhone=""
birthday="19741012"
language="de"
ip="127.0.0.1"
customerGroup="p" />
phone
is a mandatory field when paymenttype
equals 3, 4 or 7 (all installments products) or when country
equals "NLD"
birthday
is a mandatory field when customerGroup
equals "p"
Shipping Details Node (customer shipping address)
This node contains either the boolean flag useBillingAddress
to be set to "true" ("1") or the full alternate shipping address. Attention: Due to the high risk of default, this feature can only be offered when specifically agreed upon in the merchants contract with BillPay.
*The fields for the alternate shipping address only need to be populated if the parmater useBillingAddress
is set to "0"
*see addendum defaults for business cusomers
Attribute | Mandatory | Type | Possible Values | Details |
---|---|---|---|---|
useBillingAddress | + | Boolean | BOOLEAN 1/0 | 0: use deviating shipping address 1: use the given billing address Identifier that indicates if the shipping address is equal to the billing address |
salutation | +* | String | Default: see Addendum Salutations |
Salutation |
title | +* | String | AN..20 | academic title (e.g. "Dr.") |
firstName | +* | String | AN..40 | First name |
lastName | +* | String | AN..40 | Last name |
street | +* | String | AN..40 | Street |
streetNo | +* | String | AN..7 | House number |
addressAddition | - | String | AN..40 | Address addition |
zip | +* | String | AN..7 | ZIP code |
city | +* | String | AN..40 | City |
country | +* | String | ISO3166-aplha-3 | Customer country code (z.B."DEU") |
phone | +* | String | AN..40 | Phone number |
cellPhone | - | String | AN..40 | Mobile number |
<shipping_details
useBillingAddress="1"
salutation=""
title=""
firstName=""
lastName=""
street=""
streetNo=""
addressAddition=""
zip=""
city=""
country=""
phone=""
cellPhone="" />
Company Details Node (Details about business customers)
If the order is being placed by a business customers (`customertype´ = "b"), additional information needs to be collected about the business.
Attribute | Mandatory | Type | Possible Values | Details |
---|---|---|---|---|
name | + | String | AN..200 | Registered name of the company |
legalForm | + | String | Defauls: see addendum legal forms |
Company legal form |
registerNumber | +* | String | AN..20 | Company register number |
holderName | +* | String | AN..100 | Owner's full name |
taxNumber | - | String | valid tax ID (DEXXXXXXXXX) |
<company_details
name="Testfirma"
legalForm="GmbH"
registerNumber="HRB 122 029 B"
holderName="Testinhaber"
taxNumber="DE268874183" />
Article Data Node (List of all ordered articles)
All information relating to the purchased products are collected in the article_data
node. Every unique article is represented by an individual XML tag.
*Important! Article IDs have to be unique!
Attribute | Mandatory | Type | Possible Values | Details |
---|---|---|---|---|
articleid | + | String | AN..20 | Unique article ID |
articlequantity | + | Int | N..7 | Article quantity |
articlename | + | String | AN..50 | Article name |
articlecategory | - | String | AN..50 | Article Category |
articlesubcategory1 | - | String | AN..50 | Article Sub-Category |
articlesubcategory2 | - | String | AN..50 | Article Sub-Category |
articleprice | + | Int | N..7 | Article net price (smallest currency unit; 1,00 EUR = 100) |
articlepricegross | + | Int | N..7 | Article gross price (smallest currency unit; 1,00 EUR = 100) |
<article_data>
<article
articleid="1234"
articlequantity="2"
articlename="Shirt"
articlecategory="Clothing"
articlesubcategory1="Van Laack"
articleprice="10084"
articlepricegross="12000" />
<article
articleid="2345"
articlequantity="1"
articlename="Hose"
articlecategory="Clothing"
articlesubcategory1="Ralph Lauren"
articleprice="16807"
articlepricegross="20000" />
</article_data>
Bank Data Node (Customer Bank Info)
The bank data is only processed in case direct debit or PayLater - transaction credit payment is selected. This is the case if parameter „paymenttype“ has values "2", "3", "4", "7" or "9". Otherwise the bank data is ignored.
Attribute | Mandatory | Type | Possible values | Details |
---|---|---|---|---|
accountholder | + (if paymentType in {2,3,4,7}) | String | AN..100 | First and Lastname of account holder |
accountnumber | + (if paymentType in {2,3,4,7}) | Int | AN..30 | International Bank Account Number |
sortcode | + (if paymentType in {2,3,4,7}) AND LAND NOT DE | Int | AN..11 | Bank Identifier Code |
<bank_account
accountholder="Thomas Testkunde"
accountnumber="DE12345678123456781234"
sortcode="" />
Total Node (Generic details about the order)
To total
node contains all generic information about the order and all connected fees / rebates.
*If sticking to the standard: capturerequestnecessary
="0"
Attribute | Mandatory | Type | Possible values | Details |
---|---|---|---|---|
shippingname | + | String | AN..50 | Shipping method name (e.g. "Express") |
shippingprice | + | Int | N..7 | net value of all order specific (shipping) fees (e.g. shipping, express fee) (1,00 EUR = 100) |
shippingpricegross | + | Int | N..7 | gross value of all order specific (shipping) fees (e.g. shipping, express fee) (1,00 EUR = 100) |
rebate | + | Int | N..7 | positive net value of all rebates, coupons and all other positions that affect the order total value (1,00 EUR = 100) |
rebategross | + | Int | N..7 | positive gross value of all rebates, coupons and all other positions that affect the order total value (1,00 EUR = 100) |
carttotalprice | + | Int | N..7 | net value of the order total (1,00 EUR = 100) |
carttotalpricegross | + | Int | N..7 | gross value of the order total (1,00 EUR = 100) |
currency | + | String | ISO4217 | 3-digit currency code of the order (e.g. "EUR") |
reference | +* | String | AN..40 | Unique order ID in the merchant system (allowed characters: 0-9, a-z, A-Z,.,-,_,/) |
<total
shippingname="Express Versand"
shippingprice="840"
shippingpricegross="1000"
rebate="1681"
rebategross="2000"
carttotalprice="36134"
carttotalpricegross="43000"
currency="EUR"
reference="1773673332" />
Fraud Detection Node
This node contains the session ID parameter that is used to identify fraudulent customers/sessions and prevent them from using the BillPay payment methods. This serves to prevent fraud in your shop and must always have the same value as the "identifier" designated in the configuration of the JavaScript his widgets.
Attribute | Mandatory | Type | Possible Values | Details |
---|---|---|---|---|
session_id | + | String | AN..100 | a session ID (must be equal to the session ID set in the JavaScript widget configuration script) |
<fraud_detection session_id="97d3d1b1cc6b0686bbc1f19feec80e6c"/>
Rate Request Node
For the payment methods PayLater / Ratenkauf (paymenttype
="3" / paymenttype
="4" / paymenttype
="7") some additional parameters have to be passed to the BillPay system. These additional parameters describe the installment plan itself. The values are set and passed along in your checkout form by our widget when the customer selects their preferred payment plan duration in our widget and proceeds through your checkout.
Attribute | Mandatory | Type | Possible Values | Details |
---|---|---|---|---|
term | +* | Int | N..7 | Term of the installment plan |
ratecount | + | Int | N..7 | Count of installments to be paid during the term |
totalamount | + | Int | N..7 | Total amount of the installments plan including the transaction credit interest / PayLater fee |
<rate_request ratecount="6" term="6" totalamount="45520"/>
Async Capture Request Node (Prepayment process)
For the payment methods PayLater and Transaction Credit, BillPay offers a unique "prepayment" feature, which lets customers pay a small percentage of the order total upfront (via the Giropay online banking gateway) and increase their credit score for the authorization request.
This node contains the URLs the customer will be redirected to to perform the online transfer as well as the URL for the asynchronous BillPay server response.
Attribute | Mandatory? | Type | Possible Values | Details |
---|---|---|---|---|
redirect_url | + | String | AN | Shop-sided result page after successful / failed prepayment. |
notify_url | + | String | AN | Shop-sided webservice URL for async BillPay response. |
<async_capture_request>
<redirect_url><![CDATA[http://url1.de/redirect]]></redirect_url>
<notify_url><![CDATA[http://url1.de/notify]]></notify_url>
</async_capture_request>
Sample XML: Invoice B2C
<?xml version="1.0" encoding="UTF-8"?>
<data tcaccepted="1" expecteddaystillshipping="0" capturerequestnecessary="0" paymenttype="1" api_version="1.5.11">
<default_params mid="4441" pid="6021" bpsecure="25d55ad283aa400af464c76d713c07ad" />
<customer_details customerid="" customertype="e" salutation="Herr" title="" firstName="Thomas" lastName="Testkunde" street="Tinnowitzerstrasse 1" streetNo="" addressAddition="" zip="10115" city="Berlin" country="DEU" email="anymail@gmx.de" phone="03012345678" cellPhone="" birthday="19741012" language="de" ip="127.0.0.1" customerGroup="p" />
<shipping_details useBillingAddress="1" salutation="" title="" firstName="" lastName="" street="" streetNo="" addressAddition="" zip="" city="" country="" phone="" cellPhone="" />
<total shippingname="Express Versand" shippingprice="840" shippingpricegross="1000" rebate="1681" rebategross="2000" carttotalprice="36134" carttotalpricegross="43000" currency="EUR" reference="1773673332" reference2="" />
<article_data>
<article articleid="1234" articlequantity="2" articlename="Shirt" articlecategory="Clothing" articlesubcategory1="Van Laack" articleprice="10084" articlepricegross="12000" />
<article articleid="2345" articlequantity="1" articlename="Hose" articlecategory="Clothing" articlesubcategory1="Ralph Lauren" articleprice="16807" articlepricegross="20000" />
</article_data>
<fraud_detection session_id="97d3d1b1cc6b0686bbc1f19feec80e6c" />
</data>
Sample XML: Invoice B2B
<?xml version="1.0" encoding="UTF-8"?>
<data tcaccepted="1" expecteddaystillshipping="0" capturerequestnecessary="0" paymenttype="1" api_version="1.5.18">
<default_params mid="4441" pid="6021" bpsecure="25d55ad283aa400af464c76d713c07ad" />
<customer_details customerid="" customertype="e" salutation="Herr" title="" firstName="Thomas" lastName="Testkunde" street="Tinnowitzerstrasse 1" streetNo="" addressAddition="" zip="10115" city="Berlin" country="DEU" email="anymail@gmx.de" phone="03012345678" cellPhone="" birthday="19741012" language="de" ip="127.0.0.1" customerGroup="b" />
<shipping_details useBillingAddress="1" salutation="" title="" firstName="" lastName="" street="" streetNo="" addressAddition="" zip="" city="" country="" phone="" cellPhone="" />
<company_details name="Test Company" legalForm="gmbh" registerNumber="HRB 9874568" holderName="Thomas Testkunder" taxNumber="DE268874183" />
<total shippingname="Express Versand" shippingprice="840" shippingpricegross="1000" rebate="1681" rebategross="2000" carttotalprice="36134" carttotalpricegross="43000" currency="EUR" reference="761463697" reference2="" />
<article_data>
<article articleid="1234" articlequantity="2" articlename="Shirt" articleprice="10084" articlepricegross="12000" />
<article articleid="2345" articlequantity="1" articlename="Hose" articleprice="16807" articlepricegross="20000" />
</article_data>
<fraud_detection session_id="97d3d1b1cc6b0686bbc1f19feec80e6c" />
</data>
Sample XML: Direct Debit
<?xml version="1.0" encoding="UTF-8"?>
<data tcaccepted="1" expecteddaystillshipping="0" capturerequestnecessary="0" paymenttype="2" api_version="1.5.18">
<default_params mid="4441" pid="6021" bpsecure="25d55ad283aa400af464c76d713c07ad" />
<customer_details customerid="" customertype="e" salutation="Herr" title="" firstName="Thomas" lastName="Testkunde" street="Tinnowitzerstrasse 1" streetNo="" addressAddition="" zip="10115" city="Berlin" country="DEU" email="anymail@gmx.de" phone="03012345678" cellPhone="" birthday="19741012" language="de" ip="127.0.0.1" customerGroup="p" />
<shipping_details useBillingAddress="1" salutation="" title="" firstName="" lastName="" street="" streetNo="" addressAddition="" zip="" city="" country="" phone="" cellPhone="" />
<bank_account accountholder="Thomas Testkunde" accountnumber="DE89370400440532013000" sortcode="" />
<total shippingname="Express Versand" shippingprice="840" shippingpricegross="1000" rebate="1681" rebategross="2000" carttotalprice="36134" carttotalpricegross="43000" currency="EUR" reference="1519088641" reference2="" />
<article_data>
<article articleid="1234" articlequantity="2" articlename="Shirt" articleprice="10084" articlepricegross="12000" />
<article articleid="2345" articlequantity="1" articlename="Hose" articleprice="16807" articlepricegross="20000" />
</article_data>
<fraud_detection session_id="12a854eb6758ec7770860a230269275b" />
</data>
Sample XML: PayLater/Transaction Credit
<?xml version="1.0" encoding="UTF-8"?>
<data tcaccepted="1" expecteddaystillshipping="0" capturerequestnecessary="0" paymenttype="4" api_version="1.5.18">
<default_params mid="4441" pid="6021" bpsecure="25d55ad283aa400af464c76d713c07ad" />
<customer_details customerid="" customertype="e" salutation="Herr" title="" firstName="Thomas" lastName="Testkunde" street="Tinnowitzerstrasse 1" streetNo="" addressAddition="" zip="10115" city="Berlin" country="DEU" email="anymail@gmx.de" phone="03012345678" cellPhone="" birthday="19741012" language="de" ip="127.0.0.1" customerGroup="p" />
<shipping_details useBillingAddress="1" salutation="" title="" firstName="" lastName="" street="" streetNo="" addressAddition="" zip="" city="" country="" phone="" cellPhone="" />
<rate_request ratecount="6" term="6" totalamount="45520" />
<bank_account accountholder="Thomas Testkunde" accountnumber="DE89370400440532013000" sortcode="" />
<total shippingname="Express Versand" shippingprice="840" shippingpricegross="1000" rebate="1681" rebategross="2000" carttotalprice="36134" carttotalpricegross="43000" currency="EUR" reference="1747930987" reference2="" />
<article_data>
<article articleid="1234" articlequantity="2" articlename="Shirt" articleprice="10084" articlepricegross="12000" />
<article articleid="2345" articlequantity="1" articlename="Hose" articleprice="16807" articlepricegross="20000" />
</article_data>
<fraud_detection session_id="12a854eb6758ec7770860a230269275b" />
<async_capture_request>
<redirect_url>
<![CDATA[http://google.de/my_shops_paylater_giropay_redirect_url.php]]>
</redirect_url>
<notify_url>
<![CDATA[http://google.de/my_shops_paylater_giropay_notify_url.php]]>
</notify_url>
</async_capture_request>
</data>
Response
Data Node (Result of the identity and credit check)
The data
node contains all relevant information about the scoring result. In addition to the pure result ("APPROVED" / "DENIED") it contains a unique BillPay transaction ID (bptid) that identifies the the request and result.
Attribute | Mandatory | Type | Possible Values | Details |
---|---|---|---|---|
status | + | String | "APPROVED" / "DENIED" | Status of the identity and credit check |
bptid | + | String | AN..50 | Unique BillPay transaktion ID |
error_code | + | Int | N..3 | Error code (0: No error); For an extensive list of all error codes and messages please refer to the following list Error codes |
merchant_message | - | String | AN..200 | Detailled error message for the merchant |
customer_message | - | String | An..200 | Detailled error message to be shown to the customer |
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<data
bptid="1aa2fb2d-2b78-4393-bf06-be0012dda337"
customer_message=""
error_code="0"
merchant_message=""
status="APPROVED">
<!-- weitere Antwortdaten -->
</data>
Corrected Address Node (Optional: Normalized customer address)
This node returns the normalized customer address.
Attribute | Mandatory? | Type | Possible Values | Details |
---|---|---|---|---|
city | + | String | AN..50 | Normalized city |
country | + | String | ISO3166 alpha-3 | Normalized country code (z.B. "DEU") |
street | + | String | AN..50 | Normalized street |
streetNo | + | String | AN..15 | Normalized house number |
zip | + | String | AN..7 | Normalized ZIP code |
<corrected_address
city="Berlin"
country="DEU"
street="Zinnowitzer Str."
streetNo="1"
zip="10115"/>
Invoice Bank Account Node (only "Invoice" & "Transaction Credit CHE", if capturerequestnecessary
= "0")
This node returns the BillPay bank account data to be used by the customer when paying for the order he/she placed. This information should be parsed and printed on the invoice document the customers receive with their package.
Attribute | Mandatory? | Type | Possible Values | Details |
---|---|---|---|---|
account_holder | + | String | AN..255 | Account holder |
account_number | + | String | AN..40 | BillPay IBAN |
bank_code | + | String | AN..16 | BillPay BIC |
bank_name | + | String | AN..255 | Name of the BillPay bank |
invoice_reference | + | String | AN..255 | Transaction purpose |
<invoice_bank_account
account_holder="BillPay GmbH"
account_number="DE07312312312312312"
bank_code="BELADEBEXXX"
bank_name="Sparkasse Berlin"
invoice_reference="BP555666777/9999"/>
Hire Purchase Node (only for PayLater and Transaction Credit)
In this node, BillPay returns the necessary information related to the installment plan.
Attribute | Mandatory? | Type | Possible Values | Details |
---|---|---|---|---|
instl_plan | Parent node | |||
num_inst | Int | N | Number of installments | |
calc | Child node of the instl_plan node. | |||
-> duration | Int | N | Duration of the payment plan in months | |
-> fee_percent | Int | N | PayLater fee (%) | |
-> fee_total | Int | N | Total PayLater fees | |
-> pre-payment | Int | N | Deposit amount | |
-> total_amount | Int | N | Total amount of the PayLater order (including the fees) | |
-> eff_annual | Int | N | Annual effective interest rate (%) | |
-> nominal | Int | N | Annual nominal interest rate (%) | |
instl_list | (node) | Child node of the instl_plan node. | ||
-> instl | (node) | Child node of the instl_list node. | ||
date | DATE | YYYYMMDD | Date of the installment | |
type | String | AN | Type of Installment („immediate“, „first“, „date“, „fee“) |
Response
<hire_purchase>
<instl_plan num_inst="6">
<calc>
<duration>
6
</duration>
<fee_percent>
6.00
</fee_percent>
<fee_total>
2520
</fee_total>
<pre_payment>
0
</pre_payment>
<total_amount>
45520
</total_amount>
<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>
</hire_purchase>