PayU Russia

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

API Version

Minimum required API version: 1.1.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 Type
Apple Pay - Encrypted TokeneWallet
Google PayeWallet
MAESTROCards
MASTERCARDCards
MIRCards
QIWIBank Transfer
SvyaznoyCash
VISACards
VISA ElectronCards

Payment Page

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

Payment Method
ApplePay
Google Pay
MAESTRO
MASTERCARD
MIR
UnionPay
VISA

Currencies

RUB

Features

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

FeatureSupported
3DS 2.0 ExternalNo
3DS 2.0 PaymentsOS-handledNo
3DS 2.0 Provider-handledNo
3DS 2.0 Self-handledNo
InstallmentsNo
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.

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 supportedAsynchronous
Refund Both partial and multiple are supportedAsynchronous
Void Not ApplicableAsynchronous
Supported requests for cash transactions.
RequestPartial/MultipleMode
Authorize Not ApplicableAsynchronous
Supported requests for bank transfer transactions.
RequestPartial/MultipleModeNotes
AuthorizePartial and multiple are not supportedAsynchronousAfter the Authorize request, PayU Russia will capture the funds manually. You should thus not invoke a Capture request yourself. To receive a notification when the Capture is done, register webhooks and enable notifications for Create Capture events.
Supported requests for eWallet transactions.
RequestPartial/MultipleMode
AuthorizePartial and multiple are not supportedAsynchronous
Capture Partial is 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

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 Russia.
  • secret_key: Secret key provided by PayU Russia.
To see your PayU Russia credentials, open your PayU administration page and choose Account Management > Account settings.
Required
In the PaymentsOS Control Center, create webhooks to be notified when a transaction changes its status.Required
In your PayU Russia account, configure the currencies you want to use in transactions. Contact PayU Russia support for assistance.Required
In your PayU Russia 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 Russia support for assistance.Required
In your PayU Russia account, enable the IRN identifier by defaultRequired
In your PayU Russia account, configure all IPNs to use version 4 by defaultRequired
Disable the cvv check if you do not require customers to enter their cvv code when initiating a payment. This can only be done by PayU Russia support. Contact PayU Russia support for assistance.Optional
Enable partial captures if desired. This can only be done by PayU Russia support. Contact PayU Russia support for assistance.Optional
If you want to use the Svyaznoy payment method, make sure that auto-capture is enabled in your PayU Russia account.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

You must enable IPNs (Instant Payment Notifications) to keep PaymentsOS in sync with PayU systems. To enable IPNs, login to your PayU Russia account, and open the Account Management > Account Settings > IPN Settings tab.

In your account, configure the following IPN URL:

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

As a last step, enable IPNs in your PayU Russia account (by default, IPNs are enabled for Authorized orders only). Click Account Settings > Notifications > Send notifications for and select the following:

  • Canceled and returned orders
  • Complete orders

Integrating 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.

Integrating Apple Pay with PaymentsOS

PayU Russia supports the non-decrypted Network Token flow. Once you’ve obtained a network token through Apple Pay, the payload needs to be passed ‘as is’ (that is, without decryption), after which PayU Russia extracts the network token for you.

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:

  1. 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.

  2. 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.

  3. 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"
  }
}

Once you’ve obtained a network token through Apple Pay, the payload needs to be passed ‘as is’ (that is, without decryption), after which we extract the network token for you. You pass the token fields as key-value pairs under payment_method.additional_details in the Create Authorization request. Make sure to also include all fields from the token 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"
    }
  }
}

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.

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.

Handling the Charge Request Response for Cash Transactions

If the charge request is successful, then the provider will return a charge response containing:

  • A status of pending.
  • The expiration date of the Payment Receipt.
  • A provider_data.document object with href links to the Payment Receipt in HTML format and possibly the Payment Receipt in PDF format.

Note that the provider_data.additional_information field may contain a barcode, for receipt tracking purposes.

Now direct your customer to one, or both of the transaction payment receipts, so that they can print the receipt. Your customer should then take the payment receipt to the relevant Payment Office and pay for their purchase, before the expiration date.

When the provider notifies us that your customer has paid, we will update the transaction status. If no payment notification is received by the expiration date then the transaction will be considered as failed.

Testing

The following table lists the card numbers you can use for testing.

Test Card Number Expiration Month Expiration Year CVV / CVC2 Cardholder Name 3DS Enrolled Payment Status Error received
4652035440667037 08 Next year 971 Any name No Success payment -
4051060000000178 12 Next year 895 Any name Yes Success payment -
5105105105105100 03 Next year 235 Any name No Success payment -
5547629478785897 07 Next year 123 Any name Yes Success payment -
2200204265570145 03 Next year 235 Any name No Success payment -
2200201673687446 07 Next year 123 Any name Yes Success payment -
5563693062030796 03 Up to 20 years in the future 235 Any name No Failed payment Stolen card, pick up
4921301010459253 03 Up to 20 years in the future 235 Any name No Failed payment Default error
2200200000000000 03 Up to 20 years in the future 235 Any name No Failed payment Non Sufficient Funds

[snippet](../snippets/html/provider-testing/payu-russia-test-cards >}}

You can use the following public sandbox test Merchant account without registering:

POS Currency MERCHANT_CODE SECRET_KEY
RUB payostst paymentsos_test1#
Last modified January 18, 2023