Custom Receipts

Should you require more flexibility than ready-made receipts provide, you can also send or print custom receipts, including payment-related data!
You need to make sure, that your custom receipt contains all the required fields stated below and that you are able to also send receipts for successful refunds.
Sample Receipt
1 2 3 4 5 6 7 8 9
Required Receipt information
The image above shows where the data contained in the API or SDK response below should be displayed:
  1. Full address of the merchant, including the country. Iterate over
    $.merchantDetails
    , for each item print
    $.value
    .
  2. $.receiptType.value
  3. $.transactionType.value
  4. $.amountAndCurrency
  5. The payment details, e.g., the masked account number. Iterate over
    $.paymentDetails
    , for each item print
    $.label
    and
    $.value
    .
  6. $.statusText.value
  7. $.date.value
    and
    $.time.value
  8. The clearing details, e.g., the merchant identifier. Iterate over
    $.clearingDetails
    , for each item print
    $.label
    and
    $.value
    .
  9. [optional]
    $.identifier.value
    , This transactionIdentifier makes it easier to trace the payment in our system.
  10. If the
    $.signatureLineRequired
    is true, then you have to print a signature line on your merchant receipt.
Accessing Receipt Data from the SDK
The receipts are already embedded in the transaction reference that you receive after a successful transaction. The transaction object provides access to the receipt for both, the merchant and the customer.
Receipts are only attached if the transaction did not fail, so always make sure to check the transaction and both receipt properties before accessing them.
On iOS,use
MPTransactionProcess *process = [transactionProvider startTransactionWithParameters:transactionParameters accessoryParameters:accessoryParameters registered:[...] statusChanged:[...] actionRequired:[...] completed:^(MPTransactionProcess *process, MPTransaction *transaction, MPTransactionProcessDetails *details) { MPReceipt *merchantReceipt = transaction.merchantReceipt; MPReceipt *customerReceipt = transaction.customerReceipt; }];
And on Android, use
TransactionProcess paymentProcess = transactionProvider.startTransaction(transactionParameters, accessoryParameters, new TransactionProcessWithRegistrationListener() { @Override public void onCompleted(TransactionProcess process, Transaction transaction, TransactionProcessDetails processDetails) { Receipt customerReceipt = transaction.getCustomerReceipt(); Receipt merchantReceipt = transaction.getMerchantReceipt(); } } );
Query Receipt Data from the Platform API
You can query receipt data for a transaction by its
transactionIdentifier
and the language code, e.g.
en-us
. You can find the necessary authentication and endpoints for this API here.
get
/v2/transactions/{transactionIdentifier}/receipts/customer/{country-code}
Response
{ "status": "ok" "data": { "merchantDetails": [ { "label": null, "key": "MerchantDetailsPublicName", "value": "Company Name" }, { "label": null, "key": "MerchantDetailsAddress", "value": "Street 42b" }, { "label": null, "key": "MerchantDetailsZip", "value": "12345" }, { "label": null, "key": "MerchantDetailsCity", "value": "City" }, { "label": null, "key": "MerchantDetailsCountry", "value": "Germany" }, { "label": null, "key": "MerchantDetailsContact", "value": "+49 (170) 1234567" }, { "label": null, "key": "MerchantDetailsAdditionalInformation", "value": "Tax ID: 1234567890" } ], "receiptType": { "key": "ReceiptType", "label": "Receipt Type", "value": "Merchant Receipt" }, "transactionType": { "key": "TransactionType", "label": "Type", "value": "Payment" }, "date": { "key": "Date", "label": "Date", "value": "16.7.2013" }, "time": { "key": "Time", "label": "Time", "value": "15:38:14" }, "identifier": { "key": "Identifier", "label": "PWID", "value": "#{#transactionIdentifier}" }, "statusText": { "key": "StatusText", "label": "Information", "value": "Please retain receipt!" }, "amountAndCurrency": { "key": "AmountAndCurrency", "label": "Amount", "value": "5.20 €" }, "subject": { "key": "Subject", "label": "Description", "value": "MyUsage" }, "paymentDetails": [ { "key": "PaymentDetailsSchemeOrLabel", "label": "Card", "value": "Visa Credit" }, { "key": "PaymentDetailsMaskedAccount", "label": "Account", "value": "1234" }, { "key": "PaymentDetailsEMVApplicationID", "label": "AID", "value": "A0000000041010" }, { "key": "PaymentDetailsSource", "label": "Entry Mode", "value": "Magstripe" }, { "key": "PaymentDetailsPanSequenceNumber", "label": "PAN Sequence Number", "value": "1" } ], "clearingDetails": [ { "key": "ClearingDetailsTransactionIdentifier", "label": "Transaction", "value": "*" }, { "key": "ClearingDetailsAuthorizationCode", "label": "Authorization", "value": "*/*" }, { "key": "ClearingDetailsMerchantId", "label": "Merchant ID", "value": "*" }, { "key": "ClearingDetailsTerminalId", "label": "Terminal ID", "value": "*" } ], "signatureLineRequired" : false }, }
Adjusting Timezone, Language, and Number Formatting of Receipt Data
The receipt data provided by the API can easily be localized. Just pass the name of your time zone as defined in the tz databasevia the
tzdatabase
via the
timezone
parameter, e.g. Europe/Berlin,Europe/London, Europe/Lisbon or Africa/Johannesburg.
To adjust language and number formatting, pass your locale via the
locale
parameter. Currently, we support the locales listed in the table below. Should your required locale not be part of it, feel free to contact us!
Supported
locale
en-*(e.g. en-US, en-GB)
de-* (e.g. de-DE, de-AT, de-CH)
fr-* (e.g. fr-FR, fr-CH, fr-BE)
it-* (e.g. it-IT, it-CH)
nl-* (e.g. nl-NL, nl-BE)
pt-* (e.g. pt-PT)
es-* (e.g. es-ES)