PayU Single Platform (PL, CZ, HU, SK)
Follow the standard PaymentsOS integration procedure, and then apply the relevant extra specifications described below.
- API Version
- Payment Methods
- Currencies
- Features
- Requests
- Setup Procedures
- Integration Procedures
- Provider Specific Response Codes
- Testing
API Version
Minimum required API version: 1.0.0
The following features require an API version higher than the minimum:
- 3DS 2.0 Internal requires API version 1.3.0
- 3DS 2.0 External requires API version 1.3.0
Payment Methods
The following table lists all supported payment methods.
Payment Method | Payment Method Type |
---|---|
Apple Pay | eWallet |
BLIK | eWallet |
Google Pay | eWallet |
MAESTRO | Cards |
MASTERCARD | Cards |
Payment Wall | Bank Transfer |
PBL Pay by Link | Bank Transfer |
VISA | Cards |
Currencies
BGN, CHF, CZK, DKK, EUR, GBP, HRK, HUF, NOK, PLN, RON, RUB, SEK, UAH, USD
Bank transfer only supports CZK, EUR and PLN.
Features
The following table provides an overview of all supported and non-supported features.
Requests
The following table lists all supported requests. Use the bodybuilder to create a sample request body for each request type.
Request | Partial/Multiple | Mode | Notes |
---|---|---|---|
Authorize | Partial and multiple are not supported | Asynchronous |
|
Capture | Partial and multiple are not supported | Asynchronous |
|
Refund | Partial is supported | Asynchronous | |
Void | Not Applicable | Asynchronous |
Request | Partial/Multiple | Mode | Notes |
---|---|---|---|
Authorize | Partial and multiple are not supported | Asynchronous |
|
Capture | Partial and multiple are not supported | Asynchronous | The hold on the funds will be released if you did not capture the funds within 10 days of the Authorize request. |
Refund | Partial is supported | Asynchronous |
Request | Partial/Multiple | Mode |
---|---|---|
Authorize | Partial and multiple are not supported | Asynchronous |
Capture | Partial and multiple are not supported | Asynchronous |
Setup Procedures
The following table lists the setup procedures that are specific to this provider.
Configuration | Required/Optional |
---|---|
In the PaymentsOS Control Center, configure the following credentials:
For your live credentials, login to your PayU Account. In the PayU Biz Panel, in the Online payments tab, click > My Shops > click POS of the relevant shop > click the name under POS > CONFIGURATION KEYS. | Required |
In the PaymentsOS Control Center, register webhooks to be notified when a transaction changes its status. The payment flows for PayU Single Platform are asynchronous, which return responses with the pending status. | Required |
In your PayU Single Platform account, disable the Automatic collection option in your PayU Single Platform account for the relevant PayU Single Platform payment methods. This will enable the correct processing of authorization requests, and keep PaymentsOS in sync with the PayU system. | Required |
In your PayU Single Platform account, configure the currencies you want to use in transactions (only applicable to the credit card and payment_wall payment methods). | Required |
In your PayU Single Platform account, enable Tokenization for credit card payment methods. Contact PayU Single Platform support for assistance. | Required |
In your PayU Single Platform account, disable the CVV check if desired. Contact PayU Single Platform support for assistance. | Optional |
Integration Procedures
The following sections list the integration procedures that are specific to this provider.
Redirecting your customer for Asynchronous Payment Flows
You'll need to redirect your customer for the following payment methods:
- Credit card payments that include 3D Secure
- PBL bank transfers
- payment_wall payments
When you send a post authorization
request, we will return an authorization resource containing an authorization.redirection.url
, and a status of pending
. Redirect your customer to this URL, so that they can authenticate themselves and complete the payment flow:
- For credit card payment methods, the redirection is to a 3D Secure site.
- For the PBL payment method, the redirection is to your customer's bank authentication site.
- For the payment_wall payment method, the redirection is to a PayU Single Platform hosted page, where your customer can select a payment method.
Once the authentication / payment method selection process at the provider is done, we'll redirect your customer's browser back to your site, using the merchant_site_url
(that you provided in the post authorization
). We've included the following URL parameters in the merchant_site_url
, to provide you with the context of the page that you'll need to load: payment_id
, authorization_id
, and status
(of the authorization). Here's an example:
<merchant_site_url>
?payment_id=dd1fbe34-4636-4a61-8cb1-27ac8a175284
&authorization_id=aec1c306-e0f7-452b-8fb5-5b34489e9d10
&status=Pending
Note
The status of your authorization request may still be pending
when we redirect your customer back to your site (while the provider is processing the request).
If you do not pass a merchant_site_url
, the user will not be able to complete the 3DS authentication flow. The response data of the Create Authorization request will indicate this in the additional_details.error
field:
{
"additional_details": {
"error": "The transaction requires 3DS authentication, but cannot be completed as the merchant_site_url was not provided"
}
...
}
Note
If the user could not complete the 3DS authentication flow, the transaction will remain in status Pending
. After 5 days, the transaction will transition to a status of Failed
.
Parsing the Response of the Retrieve Supported Payment Methods Request
When building your checkout page, you can choose to invoke the Retrieve Supported Payment Methods request to retrieve a list of supported payment methods. The response will have a structure similar to the following:
...
{
"supported_payment_methods": [
{
"display_name": "Płacę później",
"vendor": "dp",
"source_type": "bank_transfer",
"status": "ENABLED",
"logo_url": "https://static.payu.com/images/mobile/logos/pbl_dp.png"
},
{
"display_name": "BLIK",
"vendor": "blik",
"source_type": "bank_transfer",
"status": "ENABLED",
"logo_url": "https://static.payu.com/images/mobile/logos/pbl_blik.png"
}
...
],
...
}
When creating a transaction flow for PBL and Payment Wall, you are required to pass in the bank_name
in the request body of the Create Authorization request. Contrary to what you would expect, the bank_name
corresponds to the vendor
field returned in the response data of the Retrieve Supported Payment Methods request.
Here's a sample Create Authorization request for a bank transfer using the PBL payment method. Notice that bank_name
is populated with the value of the vendor
field you obtained when invoking the Retrieve Supported Payment Methods request. You should specify a bank_name
value, regardless of the source_type
returned by the Retrieve Supported Payment Methods request.
{
"merchant_site_url": "http://www.abc.com/return-url",
"payment_method": {
"source_type": "bank_transfer",
"type": "untokenized",
"vendor": "PBL",
"additional_details": {
"bank_name": "blik", // This is the vendor
"language": "pl"
}
},
"reconciliation_id": "40762342"
}
Integrating Apple Pay
Note
Make sure your account with PayU Single Platform has been configured to support Apple Pay.
Integrating Apple Pay involves the following:
Configuring your Apple Developer Account and adding Apple Pay to your checkout page.
Integrating Apple Pay with your PaymentsOS transaction flows.
Configuring your Apple Developer Account
Before following the procedures below, contact us to request a CSR (Certificate Signing Request) certificate. Apple requires this certificate. Then proceed as follows:
Configure your Apple Developer Account for Apple Pay. For help, see this video on the Apple developer site. Note that you will be required to upload the CSR (Certificate Signing Request) certificate as part of the configuration procedures.
When setting up your account in step 1, you will generate a apple_pay.cer file. Send us this file so that we can store it in your account.
Integrate Apple Pay in your checkout page using Apple's Javascript API, as explained on the Apple developer site.
Now proceed to integrate Apple Pay with PaymentsOS.
Integrating Apple Pay with PaymentsOS
Once your Apple Developer account is setup and you've added Apple Pay to your checkout page, you are ready to integrate Apple Pay with PaymentsOS.
When the customer chooses to pay with Apple Pay, Apple will return a token to your web page. Here's a sample token:
{
"version": "EC_v1",
"data": "DjI8Ez7nPhVo742aGEzABz/TfxCPt9LSdf2/h+0xIgVJbi3fQqd4lv3ogoTI3SQ7vZrDAWI8g2lbd5sflXBHc0z+wSeybsCcqZB3n1edRFXU7+6DYmdhFFWWCejwUc6XZWmsSaVNEQf+Kc0SeYrj8Eskdapj8bYX/QXxXSPqS4IKSjB+f3O0gUXSq7LK/jA9dl+BbWW0l3gXERU6n5rcYndO5rnjiwNUpnm7EMIMfNU+IPbsubpL82kbL2MdMJB1grel03J4JKld6G0pFSmjR2mF/xBY/yKkADRhoQkVlDRicuKVMpdRXXbIQjw/yRkLv/u8iy1wXI5YmEBB+W4QpPYsuxys94gMPaKhcaEK/OaT099aFrNBezbuLMTcTzbhXOpPwWn9pkAK0eZNOQ==",
"signature": "MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgEFADCABgkqhkiG9w0BBwEAAKCAMIID5jCCA4ugAwIBAgIIaGD2mdnMpw8wCgYIKoZIzj0EAwIwejEuMCwGA1UEAwwlQXBwbGUgQXBwbGljYXRpb24gSW50ZWdyYXRpb24gQ0EgLSBHMzEmMCQGA1UECwwdQXBwbGUgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxEzARBgNVBAoMCkFwcGxlIEluYy4xCzAJBgNVBAYTAlVTMB4XDTE2MDYwMzE4MTY0MFoXDTIxMDYwMjE4MTY0MFowYjEoMCYGA1UEAwwfZWNjLXNtcC1icm9rZXItc2lnbl9VQzQtU0FOREJPWDEUMBIGA1UECwwLaU9TIFN5c3RlbXMxEzARBgNVBAoMCkFwcGxlIEluYy4xCzAJBgNVBAYTAlVTMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEgjD9q8Oc914gLFDZm0US5jfiqQHdbLPgsc1LUmeY+M9OvegaJajCHkwz3c6OKpbC9q+hkwNFxOh6RCbOlRsSlaOCAhEwggINMEUGCCsGAQUFBwEBBDkwNzA1BggrBgEFBQcwAYYpaHR0cDovL29jc3AuYXBwbGUuY29tL29jc3AwNC1hcHBsZWFpY2EzMDIwHQYDVR0OBBYEFAIkMAua7u1GMZekplopnkJxghxFMAwGA1UdEwEB...",
"header": {
"ephemeralPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZMzlWOx8Xo8pXlOvzYONy+gvUy59ZOeuCov3kzc7fESczZTyvmA9dU9AdVMFaYyfCXlMG5oedi3Wy4yubqfxtg==",
"publicKeyHash": "xrJqUFO2jN5edGS8iETkfNXtwqnwSqRUUrQJBysFpZ8=",
"transactionId": "aa0b77fbb4f64cd3e5deef65177938b2d836e0d7d93d58000d8d54cfca19ae13"
}
}
Now pass the token's fields as key-value pairs in the payment_method.additional_details
field of the Create Authorization request. Make sure to also include all fields from the token's header
object using key names as shown in the example below (include just the fields, not the entire object). Here's a sample request body:
{
"payment_method": {
"source_type": "ewallet",
"type": "untokenized",
"vendor": "applepay",
"additional_details": {
"data": "DjI8Ez7nPhVo742aGEzABz/TfxCPt9LSdf2/h+0xIgVJbi3fQqd4lv3ogoTI3SQ7vZrDAWI8g2lbd5sflXBHc0z+wSeybsCcqZB3n1edRFXU7+6DYmdhFFWWCejwUc6XZWmsSaVNEQf+Kc0SeYrj8Eskdapj8bYX/QXxXSPqS4IKSjB+f3O0gUXSq7LK/jA9dl+BbWW0l3gXERU6n5rcYndO5rnji...",
"ephemeralPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZMzlWOx8Xo8pXl...",
"publicKeyHash": "xrJqUFO2jN5edGS8iETkfNXtwqnwSqRUUrQJBysFpZ8=",
"signature": "MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgEFADCABgkqhkiG9w0BBwEAAKCAMIID5j...",
"transactionId": "aa0b77fbb4f64cd3e5deef65177938b2d836e0d7d93d58000d8d54cfca19ae13",
"version": "EC_v1"
}
}
}
Using the Bodybuilder to Generate the Sample Request
When using the BodyBuilder to generate sample requests, make sure to choose the eWallet payment type.
You can now complete the transaction by invoking the Create Capture request.
Integrating Google Pay
Note
Make sure your account with PayU Single Platform has been configured to support Google Pay.
Integrating Google Pay involves the following:
Adding Google Pay to your checkout page.
Integrating Google Pay with your PaymentsOS transaction flows.
Adding Google Pay to your Checkout Page
Start by adding Google Pay to your checkout page, as explained in the Google developer documentation. For guidelines that detail how to reference the Google Pay brand within your website, see the brand guidelines published on the Google developer documentation site.
Now proceed to integrate Google Pay with PaymentsOS.
Integrating Google Pay with PaymentsOS
Once you've added Google Pay to your checkout page, you are ready to integrate Google Pay with PaymentsOS.
When the customer chooses to pay with Google Pay, Google will return a token to your web page. Here's a sample token:
{
"signature": "MEYCIQCbOYSGLvmt5mfJROZPJ/KiRhNKzQJfgwL1YcGeC1LhLQIhAOVQ5PdCbmHasSDmaWDNyujbKzvWC34ZpSB+LNcGQfh2",
"protocolVersion": "ECv1",
"signedMessage": "{\"encryptedMessage\":\"ORlKvJUgFcdSkRwdS3p9qa9iHo2332SiPUWYhV50bvwwFJFmRwGZap9fRTHAZyz5b45QFODB5VEe4b7xfpj6880I5gzFye9kfRB97pfDIP5HTxUt6G2JoPYxLClvU/h681giQT9l/FkpNmce6nHk3QpPWt0zT10HkYXSrQQ40RkReRelJ/5n6iylKy+/kJE2kxpwoc0pkN/JQp9LyfxOeDXfcipf8Wqc8GM/mRd4sh6TVtZ1cFuEgZ2+xnAaN+L/ad55LODV5UClUp1IYorJxeO+yqykvDxniTz4uGFmF2faJZZujBEXJ8iVEoXTwnQgYR19nyIPEiZM2NLGB7THDlYKgb2L42AJ5jtUHzKgiTzF9+RUChf6s5hb0YB45hSLdBqGlFyC7vCLlLE5XjKiuoiNXd416bElauRdl/kaKxLdb+5cBobbEvGmKr00Kp8zBA\\u003d\\u003d\",\"ephemeralPublicKey\":\"BLbp7luOTrmE9eqGZ0JvDSOY39yDWcff/qFxhexV6CKQjgQ/iSmB3KT5a8sjMH/VFHsKTkFDwF5Rh8OmSMSthX4\\u003d\",\"tag\":\"bs205RuNTDh0bfyTDvZ1K3wHCXa4OXLOrQh/sGkR4aY\\u003d\"}"
}
Now pass the token's fields as key-value pairs in the payment_method.additional_details
field of the Create Authorization request. Here's a sample request body:
{
"payment_method": {
"source_type": "ewallet",
"type": "untokenized",
"vendor": "googlepay",
"additional_details": {
"signature": "MEYCIQCbOYSGLvmt5mfJROZPJ/KiRhNKzQJfgwL1YcGeC1LhLQIhAOVQ5PdCbmHasSDmaWDNyujbKzvWC34ZpSB+LNcGQfh2",
"protocol_version": "ECv1",
"signed_message": "{\"encryptedMessage\":\"ORlKvJUgFcdSkRwdS3p9qa9iHo2332SiPUWYhV50bvwwFJFmRwGZap9fRTHAZyz5b45QFODB5VEe4b7xfpj6880I5gzFye9kfRB97pfDIP5HTxUt6G2JoPYxLClvU/h681giQT9l/FkpNmce6nHk3QpPWt0zT10HkYXSrQQ40RkReRelJ/5n6iylKy+/kJE2kxpwoc0pkN/JQp9LyfxOeDXfcipf8Wqc8GM/mRd4sh6TVtZ1cFuEgZ2+xnAaN+L/ad55LODV5UClUp1IYorJxeO+yqykvDxniTz4uGFmF2faJZZujBEXJ8iVEoXTwnQgYR19nyIPEiZM2NLGB7THDlYKgb2L42AJ5jtUHzKgiTzF9+RUChf6s5hb0YB45hSLdBqGlFyC7vCLlLE5XjKiuoiNXd416bElauRdl/kaKxLdb+5cBobbEvGmKr00Kp8zBA\\u003d\\u003d\",\"ephemeralPublicKey\":\"BLbp7luOTrmE9eqGZ0JvDSOY39yDWcff/qFxhexV6CKQjgQ/iSmB3KT5a8sjMH/VFHsKTkFDwF5Rh8OmSMSthX4\\u003d\",\"tag\":\"bs205RuNTDh0bfyTDvZ1K3wHCXa4OXLOrQh/sGkR4aY\\u003d\"}"
}
}
}
Using the Bodybuilder to Generate the Sample Request
When using the BodyBuilder to generate sample requests, make sure to choose the eWallet payment type.
You can now complete the transaction by invoking the Create Capture request.
Integrating BLIK
When integrating BLIK in your payment flow, you have two options to choose from:
You redirect your customers to the BLIK authentication page, where they enter their BLIK authorization code and complete the transaction.
You allow customers to enter their BLIK authorization code directly in your checkout page, without redirecting them to the BLIK authentication page. When choosing this option, you can also allow your customers to sign-up for a BLIK billing agreement. With a BLIK billing agreement in place, customers can pay with a single 'click' and do not need to enter their authorization code each time they want to complete a payment.
Implementing a Redirect to the BLIK Authentication Page
If desired, you can integrate BLIK by redirecting your customers to the BLIK authentication page for entering their BLIK authorization code and completing the transaction. To do so, pass the following payment_method
object in the body of the Create Authorization request. Notice that the payment_method
object must also include an additional_details.bank_name
field, with a value of blik
.
{
"payment_method": {
"source_type": "ewallet",
"type": "untokenized",
"vendor": "blik",
"additional_details": {
"bank_name": "blik"
}
}
}
Processing the BLIK Authorization Code in your Checkout Page
Rather then redirecting your customers to the BLIK authentication page for entering their authorization code, you can also process the BLIK authorization code directly in your checkout page. Simply prompt your customers for their authorization code and pass it in the payment_method.additional_details.authorization_code
field of the Create Authorization request. You must also pass a payment_method.additional_details.bank_name
field with a value of blik
.
{
"payment_method": {
"source_type": "ewallet",
"type": "untokenized",
"vendor": "blik",
"additional_details": {
"authorization_code":"777123",
"bank_name": "blik"
}
}
}
Implementing One-click BLIK Payments
If you process the BLIK authorization code directly in your checkout page, you can also allow your customers to sign-up for a BLIK billing agreement. With a BLIK billing agreement in place, customers can pay with a single 'click' in all subsequent transactions and do not need to enter their authorization code each time they want to complete a payment.
To sign-up a customer for a BLIK billing agreement, invoke the Create Authorization request and pass a payment_method.additional_details.register
field with a value of true
. Of course, customers will still need to enter their authorization code when signing up. So when signing-up the customer, make sure to still pass this code in the payment_method.additional_details.authorization_code
field. You must also pass a payment_method.additional_details.bank_name
field with a value of BLIK_TOKEN
. Here's a sample request body:
{
"payment_method": {
"source_type": "ewallet",
"type": "untokenized",
"vendor": "blik",
"additional_details": {
"authorization_code":"777123",
"bank_name": "BLIK_TOKEN",
"register": "true"
}
}
}
The response of the Create Authorization request will include a token in the provider_data.additional_information.blik_payment_method_token
field. This token represents the BLIK billing agreement. Grab the token and store it in a customer object, as explained in Saving the Token. You can then pass the token in all subsequent Create Authorization requests (see how to Use the Saved Token to Accept a Payment). You pass the token, like so:
Here's a sample
"payment_method": {
"type": "tokenized",
"token": "your token"
}
Provider Specific Response Codes
The following response codes are specific to PayU Single Platform.
Error Code | Description |
---|---|
ERROR_VALUE_INVALID, OPENPAYU_PAYMENT_CREATE_BLOCKED_CHECKOUT_PAY_METHOD |
Chosen payment method is currently unavailable. |
SSD | In the event that an exempt from 3DS authentication was requested and the request is evaluated by an issuer that only supports 3DS1, then you will receive a soft decline code (SSD). The error response code and description will indicate the reasons for the decline. You should then retry the authorization, passing in a three_d_secure_attributes.internal.challenge_indicator value of 4 (Challenge requested (Mandate)) in the Create Authorization request. |
Testing
This section list the test card numbers you can use for testing your integration and outlines the test procedures for bank transfer payment methods.
Testing with Credit Card Payment Methods
You can use test cards for testing.
Card number | Expiration date | CVV | Expected response | 3-D Secure | Card type |
---|---|---|---|---|---|
4444333322221111 | 12-2029 | 123 | Positive authorization | no | Visa |
5434021016824014 | 12-2029 | 123 | Positive authorization | no | MasterCard |
5099802211165618 | 12-2029 | 123 | Positive authorization | no | Maestro |
4012001037141112 | 12-2029 | 123 | Positive authorization | yes | Visa |
5000105018126595 | 12-2029 | 123 | Negative authorization | no | Maestro |
You can use the following public sandbox test POSes without registering:
POS Currency | POS ID | secret_key | second_key |
---|---|---|---|
POS_PLN | 356102 | 67c13e1355d7694e6c7a3f22d1cc8bea | 7d73d76c776bcee7245d3459aebccf62 |
POS_EUR | 356103 | cf73c2810d8769b1b3ff243464dc5429 | e90905cc04234967e969da988589d0ef |
POS_USD | 356104 | 60566c3d8a4d7771ae8f2ec10b8b74c6 | 7947b03b6d5cf08c82da2778f44a519b |
POS_SEK | 356105 | 7ef1918c0884da716e2c27e0d72352cf | f91f7b4481a9d3d1fdc80d2ad38e3593 |
POS_CZK | 356107 | a83fd674e3912acb7c5a3233f25eb3f1 | d3a369c216e12e189bb735dd317de932 |
For testing a 3DS 2 flow, use the following cards:
Card number | Expected Response |
---|---|
4245757666349685 | Required 3DS2 challenge |
4012001037141120 | Required 3DS method (device fingerprinting made by the issuer) and required 3DS challenge |
5100052384536826 | 3DS2 frictionless flow |
Testing with the PBL or payment_wall Payment Methods
To test an authorization request, use the following values for the payment_method.additional_details.bank_name
field:
- For the live environment use: "t", "payment_wall".
- For the test environment use: "m", "o", "p", "c", or "payment_wall".