PayU Romania

Follow the standard PaymentsOS integration procedure, and then apply the relevant extra specifications in this section to integrate with PayU Romania.

API Version

Minimum required API version: 1.1.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 tables below lists payment methods that are supported through a server-to-server integration and through the PayU payment page.

Server-to-Server Integrations

The following table lists all supported payment methods through a server-to-server integration.

Payment MethodPayment Method TypeNotes
ALPHABANK INSTALLMENTSCardsWith installments
BCR Click 24Bank Transfer
BCR INSTALLMENTSCardsWith installments
BRD INSTALLMENTSCardsWith installments
BRDFCardsWith installments
BT24 Internet BankingBank Transfer
CARD AVANTAJCardsWith installments
GARANTI ROCardsWith installments
Google PayeWallet
MAESTROCardsWithout installments
MASTERCARDCardsWithout installments
OPTIMOCardsWith installments
RAIFFEISENCardsWith installments
STAR_BTCardsWith installments
VISACardsWithout installments
VISA ElectronCardsWithout installments
WIREBank Transfer

Payment Page

The following table lists all supported payment methods available on the PayU payment page.

Payment Method
ALPHABANK INSTALLMENTS
BCR Click 24
BCR INSTALLMENTS
BRD INSTALLMENTS
BRDF
BT24 Internet Banking
CARD AVANTAJ
Edenred
GARANTI RO
Google Pay
MAESTRO
MASTERCARD
MASTERPASS
OPTIMO
RAIFFEISEN
Sodexo
STAR_BT
VISA
VISA Electron
WIRE

Currencies

RON, USD, EUR, GBP, HUF, BGN, CZK, DKK, PLN, SEK, HRK, and UAH.

Features

The following table provides an overview of all supported and non-supported features.

FeatureSupportedNotes
3DS 1.0 ExternalYes
3DS 1.0 InternalYes
3DS 2.0 ExternalYes
3DS 2.0 InternalYesSupported flow type: Self-handled Flow. For more information, see 3DS 2 Self-handled Flow.
InstallmentsYes
Level 2 and 3 DataNo
Multi-seller PaymentsNo
Network TokensNo
Payment FacilitatorNo
PayU RiskNo
Pre-authorizationNo
Retrieve Supported Payment MethodsNo
Retrieve Supported PlansNo
Statement Soft DescriptorNo
Stored Credentials FlagYes
Transaction Processing without CVVYes

Requests

The following table lists all supported requests for card-based transactions. Use the bodybuilder to create a sample request body for each request type.

Supported requests for card transactions.
RequestPartial/MultipleModeNotes
AuthorizePartial and multiple are not supportedAsynchronousAutomatic capture is supported.
Capture Partial is supportedAsynchronousSupport for partial Capture depends on the specific acquirer.
Refund Partial is supportedAsynchronous
Void Not ApplicableAsynchronous
Supported requests for bank transfer transactions.
RequestPartial/MultipleMode
AuthorizePartial and multiple are not supportedSynchronous
CapturePartial and multiple are not supportedSynchronous
Supported requests for eWallet transactions.
RequestPartial/MultipleMode
AuthorizePartial and multiple are not supportedAsynchronous
CapturePartial and multiple are not supportedAsynchronous
Supported requests for payment page transactions.
RequestPartial/MultipleMode
Authorize Not ApplicableAsynchronous
Capture Not ApplicableAsynchronous
Refund Both partial and multiple are supportedSynchronous
Void Not ApplicableSynchronous

Request Retries in the Event of a Provider Network Error

Note that requests with PayU Romania are not idempotent safe, so we cannot deduce the status of a request in the event of a provider_network_error. If such an event occurs, we will return a 201 status code and keep the request in status ‘Pending’ to prevent double charges.

Setup Procedures

The following table lists the setup procedures that are specific to this provider.

ConfigurationRequired/Optional
In the PaymentsOS Control Center, configure the following credentials:
  • merchant_code: The merchant id in PayU Romania.
  • secret_key: Secret key provided by PayU Romania.
To see your PayU Romania credentials, open your PayU administration page and choose Account Management > Account settings.
Required
In your PayU Romania account, configure the currencies you want to use in transactions. Contact PayU Romania support for assistance.Required
In your PayU Romania account, enable IPNs (Instant Payment Notifications). This will ensure that PaymentsOS is kept in sync with PayU systems. See Configuring IPN Settings below. Contact PayU Romania support for assistance.Required
In your PayU Romania account, enable the IRN identifier by defaultRequired
In your PayU Romania account, configure all IPNs to use version 4 by defaultRequired
If you intend to use an external 3DS flow, make sure to verify the following:
  • Your PayU Romania account must be configured to support 3DS from an external MPI.
  • The acquirer to which PayU Romania routes the transaction must support 3DS from an external MPI.
  • If you configured multiple providers in your PaymentsOS account, then you should define a route rule to direct transactions to a provider that can process data received from an external 3DS service. For more information, see Routing Transactions to a Provider Supporting External 3DS.
Contact PayU Romania support for assistance.
Optional
If you intend to use fast refunds, make sure your account has been configured to support card tokenization. Contact PayU Romania support for assistance.

Note: With a fast refund, the refund amount is paid to the customer within 30 minutes after the refund has been processed. Fast refunds are only supported for payments done in RON, EUR or USD with MasterCard or Visa. Use the Bodybuilder to generate a sample Create Refund request that includes the field for requesting a fast refund (make sure check the 'Include optional fields in the output' checkbox).
Optional

Integration Procedures

The following sections list the integration procedures that are specific to this provider.

Considerations when Creating an Authorization

The authorization amount may be higher than the payment.amount, due to commissions related to installments. The final authorization.amount can be seen in the response to the authorization request.

Configuring IPN settings

Enabling IPNs is mandatory, to keep the PaymentsOS platform in sync with PayU systems.

Login to your PayU Romania account, and choose Account Management > Account Settings > IPN Settings.

First, set the following IPN URL fFor the PaymentsOS live environment: https://api.paymentsos.com/callbacks/payuromania/live/notifications

Next, select the following (required) fields:SALEDATE, REFNOEXT, ORDERSTATUS, IPN_PID[], IPN_PNAME[], IPN_DATE, and IPN_TOTALGENERAL. We recommend selecting all the fields.

Now enable IPNs in your PayU Romania account by choosing Account Settings > Notifications > Type of notifications, and select IPN (Instant Payment Notification) (by default, only Authorized orders is enabled.)

As a last step, Activate all IPN types by choosing Account Settings > Notifications > Send notifications for, and select:

  • Canceled and returned orders
  • Complete orders

Redirecting your Customer for Redirection Flows (Bank Transfer Payment Methods and 3DS)

When you send a post authorization request, a redirection flow may be required (for instance for 3D Secure authentication, or if the customer chooses to pay using a bank transfer payment method). If so, 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 / complete the payment flow.

Once the redirection session 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 request). 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

Special Responses for WIRE Payment Method

The WIRE payment methods don’t follow the standard redirect flow. The response from a post authorization for WIRE contains a list of your merchant bank accounts, which you should display to your customer. They will need to select a bank account, to transfer to.

Here’s a sample response from a post authorization request for the WIRE payment method:

{
  "id": "da6aa5ce-7c2c-474a-bbd5-5837fd5505dc",
  "amount": 31500,
  "created": "1515076243342",
  "reconciliation_id": "74ac9b5e-6204-4265-a8d0-a0532d15d1ce",
  "provider_specific_data": {
    "additional_details": {
      "payment_method": "WIRE"
    }
  },
  "payment_method": {
    "billing_address": {
      "country": "TUR",
      "first_name": "John",
      "last_name": "Doe",
      "phone": "756312633",
      "email": "John.Doe@email.com"
    },
    "type": "untokenized",
    "source_type": "WIRE"
  },
  "result": {
    "status": "Pending"
  },
  "provider_data": {
    "provider_name": "PayURomania",
    "response_code": "PENDING_AUTHORIZATION",
    "description": "Order saved and pending authorization.",
    "raw_response": "{\"AUTH_CODE\":\"\",\"RETURN_MESSAGE\":\"Order saved and pending authorization.\",\"ALIAS\":\"dfdfee128cb5870d4601c894e96f13a0\",\"STATUS\":\"SUCCESS\",\"RRN\":\"\",\"DATE\":\"2018-01-04 17:30:43\",\"ORDER_REF\":\"74ac9b5e-6204-4265-a8d0-a0532d15d1ce\",\"RETURN_CODE\":\"PENDING_AUTHORIZATION\",\"HASH\":\"0ccffa773df5236026b6984d4627931a\",\"REFNO\":\"48880145\"}",
    "authorization_code": "",
    "external_id": "48880145",
    "documents": [{
        "descriptor": "bank_list",
        "content_type": "json",
        "content": "{\"BANK_IDENTIFIER\":\"IS BANK\",\"BANK_ACCOUNT\":\"TR770006400000110111847674\",\"ROUTING_NUMBER\":[\"\"],\"IBAN_ACCOUNT\":\"TR770006400000110111847674\",\"BANK_SWIFT\":\"ISBKTRIS\",\"COUNTRY\":\"Turkey\",\"WIRE_RECIPIENT_NAME\":\"PayU Ödeme Kuruluşu AŞ\",\"WIRE_RECIPIENT_VAT_ID\":\"0550442060\"}"
      }, {
        "descriptor": "bank_list",
        "content_type": "json",
        "content": "{\"BANK_IDENTIFIER\":\"FINANSBANK\",\"BANK_ACCOUNT\":\"TR680011100000000056754760\",\"ROUTING_NUMBER\":[\"\"],\"IBAN_ACCOUNT\":\"TR680011100000000056754760\",\"BANK_SWIFT\":\"FNNBTRIS  \",\"COUNTRY\":\"Turkey\",\"WIRE_RECIPIENT_NAME\":\"PayU Ödeme Kuruluşu AŞ\",\"WIRE_RECIPIENT_VAT_ID\":\"0550442060\"}"
      }, {
        "descriptor": "bank_list",
        "content_type": "json",
        "content": "{\"BANK_IDENTIFIER\":\"YAPI KREDI BANKASI\",\"BANK_ACCOUNT\":\"TR680006701000000046382916\",\"ROUTING_NUMBER\":[\"\"],\"IBAN_ACCOUNT\":\"TR680006701000000046382916\",\"BANK_SWIFT\":\"YAPITRISFEX\",\"COUNTRY\":\"Turkey\",\"WIRE_RECIPIENT_NAME\":\"PayU Ödeme Kuruluşu AŞ\",\"WIRE_RECIPIENT_VAT_ID\":\"0550442060\"}"
      }, {
        "descriptor": "bank_list",
        "content_type": "json",
        "content": "{\"BANK_IDENTIFIER\":\"TURK EKONOMI BANKASI\",\"BANK_ACCOUNT\":\"TR070003200000000030539275\",\"ROUTING_NUMBER\":[\"\"],\"IBAN_ACCOUNT\":\"TR070003200000000030539275\",\"BANK_SWIFT\":\"TEBUTRIS\",\"COUNTRY\":\"Turkey\",\"WIRE_RECIPIENT_NAME\":\"PayU Ödeme Kuruluşu AŞ\",\"WIRE_RECIPIENT_VAT_ID\":\"0550442060\"}"
      }, {
        "descriptor": "bank_list",
        "content_type": "json",
        "content": "{\"BANK_IDENTIFIER\":\"TURKIYE GARANTI BANKASI, A.S.\",\"BANK_ACCOUNT\":\"TR530006200006800006295309\",\"ROUTING_NUMBER\":[\"\"],\"IBAN_ACCOUNT\":[\"\"],\"BANK_SWIFT\":\"TGBATRISXXX\",\"COUNTRY\":\"Turkey\",\"WIRE_RECIPIENT_NAME\":\"PayU Ödeme Kuruluşu AŞ\",\"WIRE_RECIPIENT_VAT_ID\":\"0550442060\"}"
      }, {
        "descriptor": "bank_list",
        "content_type": "json",
        "content": "{\"BANK_IDENTIFIER\":\"AKBANK\",\"BANK_ACCOUNT\":\"TR270004600171888000103527\",\"ROUTING_NUMBER\":[\"\"],\"IBAN_ACCOUNT\":[\"\"],\"BANK_SWIFT\":\"AKBKTRIS\",\"COUNTRY\":\"Turkey\",\"WIRE_RECIPIENT_NAME\":\"PayU Ödeme Kuruluşu AŞ\",\"WIRE_RECIPIENT_VAT_ID\":\"0550442060\"}"
      }
    ]
  }
}

Integrating 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. Proceed as follows:

  1. Grab the token that Google returns to your web page when the customer chooses to pay with Google Pay. Here’s a sample token:
{
  "protocolVersion":"ECv2",
  "signature":"MEQCIH6Q4OwQ0jAceFEkGF0JID6sJNXxOEi4r+mA7biRxqBQAiAondqoUpU/bdsrAOpZIsrHQS9nwiiNwOrr24RyPeHA0Q\u003d\u003d",
  "intermediateSigningKey": {
    "signedKey": "{\"keyExpiration\":\"1542323393147\",\"keyValue\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/1+3HBVSbdv+j7NaArdgMyoSAM43yRydzqdg1TxodSzA96Dj4Mc1EiKroxxunavVIvdxGnJeFViTzFvzFRxyCw\\u003d\\u003d\"}",
    "signatures": ["MEYCIQCO2EIi48s8VTH+ilMEpoXLFfkxAwHjfPSCVED/QDSHmQIhALLJmrUlNAY8hDQRV/y1iKZGsWpeNmIP+z+tCQHQxP0v"]
  },
    "signedMessage":"{\"tag\":\"jpGz1F1Bcoi/fCNxI9n7Qrsw7i7KHrGtTf3NrRclt+U\\u003d\",\"ephemeralPublicKey\":\"BJatyFvFPPD21l8/uLP46Ta1hsKHndf8Z+tAgk+DEPQgYTkhHy19cF3h/bXs0tWTmZtnNm+vlVrKbRU9K8+7cZs\\u003d\",\"encryptedMessage\":\"mKOoXwi8OavZ\"}"
}
  1. Grab the intermediateSigningKey from Google’s token and run JSON.stringify twice on the intermediateSigningKey’s value:
JSON.stringify(JSON.stringify({
    "signedKey": "{\"keyValue\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/1+3HBVSbdv+j7NaArdgMyoSAM43yRydzqdg1TxodSzA96Dj4Mc1EiKroxxunavVIvdxGnJeFViTzFvzFRxyCw==\",\"keyExpiration\":\"4756616787684\"}",
    "signatures": [
        "MEUCIQDuExYygEgjbdyRHZK2HsRhjl/bOA7xXmaRsSIHI+LD9AIgQR996zrfX4onAszvdaVmQYiBphkQ5nAlc2UXqX/J14E="
    ]
}));
  1. 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 (notice that the stringified intermediateSigningKey value must be passed as a string):
{
  "payment_method": {
    "source_type": "ewallet",
    "type": "untokenized",
    "vendor": "googlepay",
    "additional_details": {
      "signature": "MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgEFADCABgkqhkiG9w0BBwEAAKCAMIID5j...",
      "protocol_version": "ECv2",
      "intermediate_signing_key": "{\"signedKey\":\"{\\\"keyExpiration\\\":\\\"1542323393147\\\",\\\"keyValue\\\":\\\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/1+3HBVSbdv+j7NaArdgMyoSAM43yRydzqdg1TxodSzA96Dj4Mc1EiKroxxunavVIvdxGnJeFViTzFvzFRxyCw\\\\u003d\\\\u003d\\\"}\",\"signatures\":[\"MEYCIQCO2EIi48s8VTH+ilMEpoXLFfkxAwHjfPSCVED/QDSHmQIhALLJmrUlNAY8hDQRV/y1iKZGsWpeNmIP+z+tCQHQxP0v\"]}",
      "signed_message": "{\"encryptedMessage\":\"1Dc4mm6z7TopQ3FnWAyDFDYj77HencFTK/Il1vT3JojLf9Gn/BpluT/Qs1aeRoTLEuA4k9zOIYJXsbi72efNSwrKBl+hBMWJFO50YIG50b9vs/OQu6pKYke0T1PuqGdAhmmYI0/Av7iMQHkGiU/s6Ds8TwP9BMzYUk+rNtyyWBtfHViALMiCda02Sjz7V4Cv5GZXadNDLMN0ebqCaHzWXkw0NPT8HIuS6mvpDxUDOREIXwQeNXK+Wjl+H7SkGVdBA6T8goJH/u+Bx+G1ae4DukQ7aqS+WqzzR0QIebv1Sq1J/UnC71oInEyWtjDZz4EFhPMZsqBAcGC3FUmdhwYE9nx9jsU3JNCpNmOjd8hOPOY5foHTADDNhRhzskNVZ3w6N0YtM61Ao+rd2utd4WGtu8vhZlHHbKO+4lWLmdr0HuCM/YBQioHDngeSXUmeCAlCxQ\\u003d\\u003d\",\"ephemeralPublicKey\":\"BAHVfSI4qx/YftOPE8HiUXuVwcEiHkPpdXsqAzNdhe5aTw/Ihn/B6S+JOz3JjPO+pOigiUNPtPflc4J04D44FwA\\u003d\",\"tag\":\"7LK+7CZ0kvsBiXN3ClFEUD3KnjYAn8aK/Lyqg3mw1C8\\u003d\"}"
    }
  }
}

Of course, you can use 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.

Testing

For testing in the sandbox environment, contact your PayU Romania account representative to request a dedicated testing account.

You can use the following test cards for testing:

Test Card Number Expiration Month Expiration Year CVV / CVC2 Cardholder Name 3DS Enrolled Payment Status Error received
4111111111111111 12 Any year in the future 123 Any name YES Success payment -
4111111111111111 11 Any year in the future 123 Any name No Success payment -
5105105105105100 11 Any year in the future 123 Any name No Failed payment Not sufficient funds
5563693062030796 11 Any year in the future 123 Any name No Failed payment Stolen card, pick up
4921301010459253 11 Any year in the future 123 Any name No Failed payment Default error

You can test installments payment methods using the following card details for different testing scenarios:

Brand Test Card Numbers Expiration Month Expiration Year CVV / CVC2 Cardholder Name
Card Avantaj 5186170004106668
5186170028360523
5186170008405330
03 2021 123 Any Name
BRD Finance 5220620107681833
5220620150352787
5220620137283642
03 2021 123 Any Name
Star BT 4555552420664386
4555551748017871
4555553122374365
03 2021 123 Any Name
Raiffeisen 6011116461271023
6011113186588013
6011113776422151
03 2021 123 Any Name
Garanti Bonus Card 5555003167580804
5555004528364631
5555004866445521
03 2021 123 Any Name
BCR 4999990806306657
4999995741805002
4999992252873230
03 2021 123 Any Name
AlphaBank 4670935882226267
4670934671405661
4670935815277585
03 2021 123 Any Name
Last modified September 29, 2022