Local Payment Methods
Pay Upon Invoice
Overview
Availability
Pay Upon Invoice is currently in limited release and is only available to pilot merchants in
Germany. If you want to participate in the pilot, please
contact us.
Eligibility
Important
When adding Pay upon Invoice with Ratepay/Rechnungskauf mit Ratepay as a payment option to your
checkout integration, you must
acknowledge and accept these Terms
and understand they are part of the PayPal User Agreement.
Payment type | Buyer countries | Seller countries | Currency codes | Customer transaction limits |
---|---|---|---|---|
`pay_upon_invoice` | Germany | Germany | `EUR` | Min: 5.00 `EUR`, Max: 2500.00 `EUR` |
- This integration is available only in Germany to eligible merchants. The only supported currency is Euros.
- You must sell goods in the B2C model only.
- You must ship orders within seven days after the transaction.
- You must be approved to accept transactions using this payment method. PayPal will ask you to enter a valid VAT ID Number as per EU regulations. Without a valid VAT ID for your business, Braintree/PayPal is required to collect additional VAT as applicable on Braintree/PayPal fees.
- Request approval to enable Pay upon Invoice by contacting a member of the Braintree support team.
How It Works
Braintree/PayPal facilitates the interaction between you and Ratepay:
- Braintree/PayPal sends the buyer information to Ratepay for risk assessment. Depending on the result, Ratepay will send the buyer payment instructions or a rejection notice.
- You are funded immediately when the buyer successfully completes the checkout process with the Pay upon Invoice method. The buyer pays Ratepay instead of you. Ratepay is responsible for following up with the buyer to ensure the payment is made.
- You must inform the buyer that they have 30 days to pay Ratepay via bank transfer.
- Braintree/PayPal may contact you in case a buyer has opened a dispute with Ratepay. You are required to respond to these inquiries.
- Buyer receives an invoice with cart details and Ratepay's payment instruction details, including the payment reference number, that are returned in the API response. Always use the payment instructions details provided on a per transaction basis to ensure accuracy. In the invoice, instruct the buyer to pay only with Ratepay.
- Buyer pays Ratepay by logging into their bank account and making a bank transfer. If you have a simplified integration, you are obliged to ship the order within 7 calendar days.
- If the buyer does not pay within the due date, the buyer is subject to dunning fees charged by Ratepay. There is no action required from you during the follow-up and dunning process.
Note
Ensure to use PayPal credentials for Onboarding, Disputes handling, Providing Shipment
information, Funds settlement and Reports.
Dispute handling
Buyers can open a dispute with Ratepay. You must respond within 10 business days with evidence,
either through the PayPal Resolution Center or with the Disputes API. If you don't respond within
the timeframe, you're subject to an automatic reversal of the disputed funds. When responding to
disputes, you must, depending on the dispute type:
- Provide the carrier name and shipping tracking number. You need these to respond to an "Item Not Received" dispute.
- Provide the invoice you sent to the buyer as part of the evidence.
- In certain cases, additional written explanation might be required. For example, if a buyer has returned the item and claims no refund was received.
- Retain the proof of shipment and delivery for at least 180 days from the time of order placement. There might be instances when you're asked for this evidence after 90 days of order placement for Ratepay to legally defend a buyer-defaulted transaction. If you don't provide this evidence, you're subject to an automatic reversal of the disputed funds.
Provide shipment information
As soon as a shipment is made, send tracking information to PayPal. Include the tracking ID and
carrier name through either the:
- PayPal Add Tracking API. Send shipment tracking numbers for all Rechnungskauf mit Ratepay transactions. Set
notify_buyer
tofalse
for all Pay upon Invoice transactions. - Transaction details page in your PayPal account.
VAT statements
You can access monthly VAT Statements through your PayPal account. These statements reflect a
summary of VAT collected by PayPal for any fees charged by PayPal. You can use these statements to
claim your tax credits or self-assessment of VAT charges.
Configuration
- Create, verify, and link
your PayPal business account in the Braintree Control Panel. In order to process Local Payment
Methods, you need to have a valid PayPal business account. It is required for
onboarding/provisioning, funds movement, reporting, and viewing/responding to disputes.
- For direct merchants, you also need to onboard the linked PayPal account using the following links:
FraudNet integration
FraudNet is a PayPal-developed, JavaScript library embedded into a merchant's web page to collect
browser-based data to help reduce fraud. Upon checkout, data elements are sent to PayPal Risk
Services for fraud and risk assessment. FraudNet is for desktop browsers only. Data collected by
FraudNet is used for risk analysis and authentication. PayPal does not share FraudNet data with
third parties for their own independent benefit. Client SDK will automatically add FraudNet library
integration to the merchant's webpage once braintree.dataCollector
entity is gets
created. However data collector component itself still require a merchant to follow integration
steps to be able to use it on a page. Please refer to the
data collector
component of Client SDK for more information.
Invoke Pay Upon Invoice
-
You must invoke the
startPayment
method for preprocessing and result handling. -
The
startPayment
method requires thecorrelationId
parameter. The example below includes how to retrieve thecorrelationId
from the data collector component.
- Callback
- Promise
// Create a client.
braintree.client.create({
authorization: CLIENT_AUTHORIZATION
}, function (clientErr, clientInstance) {
// Stop if there was a problem creating the client.
// This could happen if there is a network error or if the authorization
// is invalid.
if (clientErr) {
console.error('Error creating client:', clientErr);
return;
}
// Create a data collector component.
braintree.dataCollector.create({
client: clientInstance,
paypal: true,
}, function (dataCollectorErr, dataCollectorInstance) {
// Stop if there was a problem creating the data collector component.
// This could happen if there was a network error or if it's incorrectly
// configured.
if (dataCollectorErr) {
console.error('Error creating data collector:', dataCollectorErr);
return;
}
// Create a local payment component.
braintree.localPayment.create({
client: clientInstance,
}, function (localPaymentErr, localPaymentInstance) {
// Stop if there was a problem creating the local payment component.
// This could happen if there was a network error or if it's incorrectly
// configured.
if (localPaymentErr) {
console.error('Error creating local payment:', localPaymentErr);
return;
}
var correlationId = dataCollectorInstance.rawDeviceData.correlation_id;
var puiButton = document.getElementById('pui-button');
puiButton.addEventListener('click', function () {
// Invoke PUI...
localPaymentInstance.startPayment({
paymentType: 'pay_upon_invoice',
amount: '100.00',
currencyCode: 'EUR',
givenName: 'Max',
surname: 'Mustermann',
address: { // This is used as the shipping address.
streetAddress: 'Taunusanlage 12',
locality: 'Frankfurt',
postalCode: '60325',
countryCode: 'DE',
},
// PUI specific parameters
billingAddress: {
streetAddress: 'Schönhauser Allee 84',
locality: 'Berlin',
postalCode: '10439',
countryCode: 'DE'
},
birthDate: '1990-01-01',
email: 'buyer@example.com',
locale: 'en-DE',
customerServiceInstructions: 'Customer service phone is +49 6912345678.',
lineItems: [{
category: 'PHYSICAL_GOODS',
name: 'Basketball Shoes',
quantity: '1',
unitAmount: '81.00',
unitTaxAmount: '19.00',
}],
phone: '6912345678',
phoneCountryCode: '49',
correlationId: correlationId,
onPaymentStart: function (data) {
// NOTE: It is critical here to store data.paymentId on your server
// so it can be mapped to a webhook sent by Braintree once the
// buyer completes their payment.
console.log('Payment ID:', data.paymentId);
},
}, function (startPaymentError) {
// Handle any error calling startPayment
console.error('Error!', startPaymentError);
});
});
});
});
});
startPayment
, the following parameters are required for the
pay_upon_invoice
payment type:
address
amount
billingAddress
birthDate
correlationId
currencyCode
customerServiceInstructions
email
givenName
lineItems
locale
onPaymentStart
paymentType
phone
phoneCountryCode
surname
Capturing Pay Upon Invoice Transactions
There is no capture call for Pay Upon Invoice transactions; Braintree will associate a transaction
on behalf of the merchant once we receive confirmation that the invoice has been confirmed.
Configure webhooks
A webhook integration is required for Pay Upon Invoice. Webhooks serve as confirmation of a
successful transaction based on an invoice as well as notification of a rejected invoice approval.
See the webhooks guide for a general overview
on how to configure webhooks. Below is an example of a Local Payment funded webhook for when the
payment has been approved by RatePay and a transaction is created:
- JSON
{
"local_payment_funded": {
"payment_id": "the_payment_id",
"payment_context_id": "the_payment_context_id",
"transaction": {
"id": "the_transaction_id",
"amount": 1.00,
"currency_iso_code": "EUR",
"created_at": "2022-03-07",
"order_id": "the_order_id",
"status": "settled"
}
}
}
- JSON
{
"local_payment_expired": {
"payment_id": "the_payment_id",
"payment_context_id": "the_payment_context_id"
}
}