Notifications (Webhooks)

Process Update 2022-02-21

From now on it is possible to activate automatic retries for webhooks. Read more about retries down below.

Changelog Version 2021-10-12

Transaction

  • The attribute metadata has now a consistent type. It is always an object even if it is empty. In older versions it was an array when it was empty.

Invoice

  • Removed attribute amount
  • Added new attributes originalAmount and refundedAmount. Original amount is the amount of the payment where refunded amount is the total amount refunded at the time of the webhook.

Changelog Version 2020-06-10

Transaction

  • new attribute amount in smallest unit of the transaction currency. This amount will include the refunded amount for refund-webhooks

Changelog Version 2019-12-19

Transaction:

  • new status uncaptured (only with PSP Clearhaus Acquiring)

Changelog Version 2019-10-15

Transaction:

  • new attribute preAuthorizationId which contains the ID of the origin pre-authorized transaction (which had the status "authorized").
  • new values for the payment attribute: cardNumber, expiry. This is only set for pre-authorized transactions or subscription payments.

General:

  • Correct handling of zero-decimal currencies. All amounts are in the smallest unit of the currency. (e.g. 2 JPY => 2, 2 EUR => 200), before it would have been 200 for all currencies.

Changelog Version 2019-07-16

New transaction status:

  • a new status refund_pending for transactions for which the refund has been initialized but not yet confirmed by the bank.

Changelog Version 2019-02-13

Transaction statuses renamed:

  • chargeback dispute to chargeback
  • Technical error to error
  • Partially refunded to partially-refunded

New Subscription status:

  • a new status in_notice for subscriptions which will not renew at the end of the period. In previous version it will appear as cancelled subscription.

Invoice gets new attributes:

  • sku: stock keeping unit (string)
  • vatRate: the vat rate in percentage (float)

Events

Payzzter webhooks will be fired on the following events.

Transaction

  • Order placed (status: waiting)
  • Successful payment processed (status: confirmed)
  • Payment aborted by customer (status: cancelled)
  • Payment declined (status: declined)
  • Pre-authorization successful (status: authorized)
  • Payment (partial-) refunded by merchant (status: refunded / partially-refunded), see changelog
  • Refund pending (status: refund_pending), see changelog
  • Chargeback by card holder (status: chargeback), see changelog
  • Technical error (status: error), see changelog

Subscription

  • On successful payment of a subscription payment
  • On failed payment of a subscription payment
  • On cancelled subscription
  • On noticed subscription (new by 2019-02-13, see changelog)

Configuration

The configuration for the webhooks can be found at Settings > API.
There must be an accessible URL / IP address where the data should be sent to.
You can choose which content type you want to use. "Normal (PHP-Post) means application/x-www-form-urlencoded and is best used for PHP-applications. "JSON" means application/json and is best used for all different applications.

How to use

For an integration into a web shop you will create a Payzzter Gateway. After the transaction has been performed, you will get a notification request to your server. You can identify the transaction by paymentLinkId or referenceId in Invoice object.

Data

The data will be either sent in JSON format or as HTTP POST form-data.

Depending on the information you want to track in your system, please go to the object specification:

Examples

Currently we only have an example written in PHP.

Download full PHP example with a corresponding MySQL database: click here to download

<?php

/**
 * The data of the POST request
 * @var array $transaction
 */
$transaction = !empty($_POST['transaction']) ? $_POST['transaction'] : array();

if (!empty($transaction)) {
		$invoice = $transaction['invoice'];
 	  $customFields = $invoice['custom_fields'];
 	  $contact = $transaction['contact'];
}

Retries

When activated for a webhook, the platform will try to resend the webhook based on the following policy:

  1. immediately (max. 1 - 1.5 minutes after first synchronous attempt)
  2. 15 minutes after last attempt
  3. 1 hour after last attempt
  4. 2 hours after last attempt
  5. 4 hours after last attempt
  6. 24 hours after last attempt
  7. 24 hours after last attempt
  8. 24 hours after last attempt
  9. 24 hours after last attempt
  10. 24 hours after last attempt

Please note that those attempts will be asynchronously triggered.