The translation was generated automatically and may contain mistakes
Payment notice
C payment by VK Pay You may be notified of the result of the transaction (e.g., payment or refund).
In order to receive notifications,, connecting to the Payment System API Give the technical support the URL to which you want to receive notifications. You can give several addresses at once.
To change URLs or add new ones, write to technical support at vkpay_solutions@vk.team .
The notification must be processed and sent to the payment system a response with the result of processing: success or error. If you do not respond, the payment system will carry out the transaction, but will continue to send notifications, assuming that you have not processed the transaction.
Advice. We recommend that you keep these notifications on your side. They are useful for performing returns on unsuccessful transactions and for collecting statistics.
The payment system can send notifications from subnets: 176.112.170.160/29 , 188.93.57.60/32 , 188.93.57.3/32 , 188.93.57.39/32 , 188.93.57.33/32 , 188.93.57.38/32 , 188.93.57.50/32 .
The Interaction Scenario
- 1.
- 2.
- 3.
- 4.
Step 1. Get a notification
After making a payment, the payment system will send a notification of the result of the transaction to the URL that you specified when connecting to VK Pay.
Notification is sent POST -request and contains three fields:
- •
dataJSON notification data encoded in the BASE64 string. - •
signature— signature of the notification . - •
versionversion of the API protocol.
Check authentication of Notification using the public key and process the data .
Example of notification
data= ewogICJib2R5IjogewogICAgInRyYW5zYWN0aW9uX2lkIjogIjI5RUQyNENDLURGMDctMTFFNy1BMTc5LTQ4RDAyMjFDREJFMiIsCiAgICAibm90aWZ5X3R5cGUiOiAiVFJBTlNBQ1RJT05fU1RBVFVTIiwKICAgICJhZGRlZCI6ICIxNTEzMDYwNzUxIiwKICAgICJ1c2VyX2luZm8iOiB7CiAgICAgICJ1c2VyX2lkIjogInRlc3RfdXNlciIKICAgIH0sCiAgICAiaXNzdWVyX2lkIjogIjExMjIzMyIsCiAgICAiYW1vdW50IjogIjEwLjUiLAogICAgImN1cnJlbmN5IjogIlJVQiIsCiAgICAiZGVzY3JpcHRpb24iOiAi0KLQtdGB0YLQvtCy0YvQuSDQv9C70LDRgtC10LYiLAogICAgInBheV9tZXRob2QiOiAiY2FyZF9ydWIiLAogICAgInBheW1lbnRfaW5mbyI6IHsKICAgICAgInBheWVyX2lkIjogIjkxNTQ0MzMwMjIiCiAgICB9LAogICAgInBhaWQiOiAiMTUxMzA2MDc1MiIsCiAgICAibWVyY2hhbnRfaWQiOiAxMTMzNDQ1NQogIH0sCiAgImhlYWRlciI6IHsKICAgICJzdGF0dXMiOiAiT0siLAogICAgInRzIjogIjE1MTMwNjA3NTIiLAogICAgImNsaWVudF9pZCI6ICIxNzUzNzciCiAgfQp9&signature=igrfduikuswHRxmGSuDkeFdSpQBdkld748tPon9DIgbkzise1FwJjq82a1gVwHzWG2FUpyF0WN%2BB2ocNH46LHXbdM9V%2FZ9g2QcWy
6TuJHHicuC6c%2Fqxdc0wAEbFXrp2STkPOv67Q4ZC6N1R3y6Y%2FXk%2Brp1iTcIdYbZtWx4qMVWnpby2Y58lzFXkC1fSidVoXNJFV6gxCqw0qprkAuutBJRx3vRP49EbEee6vPRqMAg1FqGzl%2BRG8NzFihT41LjJXyFhFS6DzFbQpnicBaj0rqSeewnsO
JF9U926kYQSAyOiwT5PEH%2Bow1pbr010%2BifhzHfb4b64q884g%3D%3D&version=2-03
Step 2. Check the signature of the notification
The payment system generates a notification signature using OpenSSL (the RSA algorithm) using the system’s private key.
The signature of the payment notification is a field signature which contains the field data data BASE64 strings encoded using the RSA algorithm.
To verify the signature, use the public key that you received when you entered into a contract with the payment system operator.
Example of a public key
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAukXD0MX64KKsWuiv2A4/
IEaXknvze019wZtvxYOIgGFjeWGp26CMa627cKpQS8TOT9TJ9OgbWuI+MWTK2dfP
yDzqfuPVHWbnBaM85O3tQ/Tv2mBwkvzP3z1gTZ+mYSuAfZG0H6vLG0GPDj2I79Zj
QSXcLSNWoS+7XNcLgDE5RCdAF+VLlSir+e1n/JWRb3XtIyyrDMF3VzfJsX6DVhxW
4FfhxqjX4JHiMhdDHHiuzMJ3zNaLOzS7ynaQ5OgCfp89ageNMgp1DbLpGbxlXlex
m4/CSuoVEY6NPrpytVAOJhiE0rwtBZPsMTGzXtBXpxv2NyO2Qdh0kjhB+qa3mmln
XwIDAQAB
-----END PUBLIC KEY-----
Example of verifying a notification signature in PHP
$verify_res = openssl_verify($input['data'], base64_decode($input['signature']), $public_key);
if (!$verify_res) {
die 'Can\'t verify notification signature';
}Step 3. Handle these notifications
Process the field data data .
Here is an example field data . List of available fields It depends on the transaction and the payment method.
Example of data in a structure data In the payment
{
"body": {
"transaction_id": "29ED24CC-DF07-11E7-A179-48D0221CDBE2",
"notify_type": "TRANSACTION_STATUS",
"added": "1513060751",
"user_info": {
"user_id": "test_user"
},
"issuer_id": "112233",
"amount": "10.5",
"currency": "RUB",
"description": "Тестовый платёж",
"pay_method": "card_rub",
"payment_info": {
"payer_id": "9154433022"
},
"paid": "1513060752",
"merchant_id": 11334455
},
"header": {
"status": "OK",
"ts": "1513060752",
"client_id": "175377"
}
}Step 4. Send a response to the notification
For this purpose:
- 1.Form the field
dataJSON notification data encoded in the BASE64 string. The structure depends on the result of processing the notification: successfully or unsuccessfully . - 2.
- 3.Send a response to the payment system.
Example of response to a notification
{
"version": "2-03",
"data": "ewogImJvZHkiOiB7CiAgICAgInRyYW5zYWN0aW9uX2lkIjoiODFDMTBERDYtRjU3NS0zNDg1LUE2QUQtRUJGMDc5MDBDRDYyIiwKICAgICAibm90aWZ5X3R5cGUiOiJwYXltZW50X2RlbGl2ZXJlZCIKICAgICAgfSwKICJoZWFkZXIiOiB7CiAgICAic3RhdHVzIjogIk9LIiwKICAgICJ0cyI6IDE1MTMwNjA3NTIsCiAgICAiY2xpZW50X2lkIjogIjE3NTM3NyIKICB9Cn0==33324b236d226c8298ea62f976f5bc457afaca8f",
"signature": "8afa84aaba70b10896253dc491b55c047cf048bc"
}Response to the notification
Structure of the response
The response to the JSON notification should include the fields:
- •
versionversion of the protocol. The latest version:2-03. - •
dataJSON notification data encoded in the BASE64 string. - •
signature— signature of response .
Field Formation data Successful processing of the notification
If the processing of the notification is successful, in response to the notification, send:
- •In the body of the answer
bodyin the fieldnotify_typeOne meaning:payment_deliveredpayment is made orpayment_declined- payment denied. - •In the title
headerin the fieldstatusmeaningOK.
Example data Successful processing of the notification
{
"body": {
"transaction_id":"81C10DD6-F575-3485-A6AD-EBF07900CD62",
"notify_type":"payment_delivered"
},
"header": {
"status": "OK",
"ts": 1513060752,
"client_id": "175377"
}
}Object Fields body Successful processing of the notification
Field | Type | Description |
|---|---|---|
transaction_id Mandatory | string | The transaction ID. It should coincide with transaction_id which you received in the payment notice. Format: UUID by RFC 4122 . |
notify_type Mandatory | string | Type of notification. Possible values:
• payment_delivered Payment is made
• payment_declined - payment denied. |
Header Fields header Successful processing of the notification
Field | Type | Description |
|---|---|---|
status Mandatory | string | Status of notification processing. With successful processing, the value OK . |
ts Mandatory | number | Time stamp of request formation. Format: Number, Unix Timestamp . |
client_id Mandatory | number | User ID in the payment system, issued when connected. |
Field Formation data Error handling the notification
If there was an error in processing the notification, in response to the notification, send:
- •In the body of the answer
bodyin the fieldnotify_typemeaningTRANSACTION_STATUS. - •in the title
header: in the fielderror- code and description of the error, in the fieldstatusmeaningERROR. More specifically, in errors in Notification Processing .
Example data Error handling the notification
{
"body": {
"transaction_id":"81C10DD6-F575-3485-A6AD-EBF07900CD62",
"notify_type":"TRANSACTION_STATUS"
},
"header":{
"status":"ERROR",
"ts":1571822085,
"client_id":"123456",
"error":{
"code":"ERR_ARGUMENTS",
"message":"Описание ошибки"
}
}
}Object Fields body Error handling the notification
Field | Type | Description |
|---|---|---|
transaction_id Mandatory | string | The transaction ID. It should coincide with transaction_id which you received in the payment notice. Format: UUID by RFC 4122 . |
notify_type Mandatory | string | Type of notification. Contains the meaning: TRANSACTION_STATUS . |
store_info Non-binding | string | Any additional parameters that you want to pass in the response in text format. |
Header Fields header Error handling the notification
Field | Type | Description |
|---|---|---|
status Mandatory | string | Status of notification processing. In case of processing error, the value ERROR . |
ts Mandatory | number | Time stamp of request formation. Format: Number, Unix Timestamp . |
client_id Mandatory | number | User ID in the system, issued when connected. |
error Mandatory | object | Description of the error. In the object error You need to pass two fields: code error code and message A description of the error. More specifically, in errors in Notification Processing . |
Notification Processing Errors error.code
Mistake | Description | Actions by the payment system |
|---|---|---|
ERR_SYSTEM | A technical error is on the side of your service. | Notification will be sent again. |
ERR_ARGUMENTS | Error handling notification parameters. | Notifications will be stopped. |
ERR_SIGNATURE | Error verifying the signature of the notification. | Notifications will be stopped. |
ERR_DUPLICATE | Notification with this transaction_id It's been processed. | Notifications will be stopped. |
Forming the signature of the notification response
Signing a response to a payment notification is a field signature which contains the result of the BASE64 string concatenation from the field encoded by the SHA256 cryptographic hashing algorithm in the HEX representation data The private key of the seller.
To sign the response to the notification:
- 1.
- 2.
- 3.
- 4.
Step 1. Form the field data
Field data A JSON object with a header and a request body. Structure data depends on the result of processing the notification: successfully or unsuccessfully .
Example data Successful processing of the notification
{
"body": {
"transaction_id":"81C10DD6-F575-3485-A6AD-EBF07900CD62",
"notify_type":"payment_delivered"
},
"header": {
"status": "OK",
"ts": 1513060752,
"client_id": "175377"
}
}Step 2. Encode the generated field data in the BASE64 line
Example field data encoded in the BASE64 string
ewogImJvZHkiOiB7CiAgICAgInRyYW5zYWN0aW9uX2lkIjoiODFDMTBERDYtRjU3NS0zNDg1LUE2QUQtRUJGMDc5MDBDRDYyIiwKICAgICAibm90aWZ5X3R5cGUiOiJwYXltZW50X2RlbGl2ZXJlZCIKICAgICAgfSwKICJoZWFkZXIiOiB7CiAgICAic3RhdHVzIjogIk9LIiwKICAgICJ0cyI6IDE1MTMwNjA3NTIsCiAgICAiY2xpZW50X2lkIjogIjE3NTM3NyIKICB9Cn0=
Step 3. Concatenate the BASE64 string obtained in the previous step with the seller’s private key
Example of field concatenation data and private key
ewogImJvZHkiOiB7CiAgICAgInRyYW5zYWN0aW9uX2lkIjoiODFDMTBERDYtRjU3NS0zNDg1LUE2QUQtRUJGMDc5MDBDRDYyIiwKICAgICAibm90aWZ5X3R5cGUiOiJwYXltZW50X2RlbGl2ZXJlZCIKICAgICAgfSwKICJoZWFkZXIiOiB7CiAgICAic3RhdHVzIjogIk9LIiwKICAgICJ0cyI6IDE1MTMwNjA3NTIsCiAgICAiY2xpZW50X2lkIjogIjE3NTM3NyIKICB9Cn0==33324b236d226c8298ea62f976f5bc457afaca8f
Step 4. From the string obtained after combining, calculate the cryptographic hash SHA256 in the HEX representation
8afa84aaba70b10896253dc491b55c047cf048bc
Done! Use the resulting value when sending a request in the parameter signature .
Example of the final result
{
"version": "2-03",
"data": "ewogImJvZHkiOiB7CiAgICAgInRyYW5zYWN0aW9uX2lkIjoiODFDMTBERDYtRjU3NS0zNDg1LUE2QUQtRUJGMDc5MDBDRDYyIiwKICAgICAibm90aWZ5X3R5cGUiOiJwYXltZW50X2RlbGl2ZXJlZCIKICAgICAgfSwKICJoZWFkZXIiOiB7CiAgICAic3RhdHVzIjogIk9LIiwKICAgICJ0cyI6IDE1MTMwNjA3NTIsCiAgICAiY2xpZW50X2lkIjogIjE3NTM3NyIKICB9Cn0==33324b236d226c8298ea62f976f5bc457afaca8f",
"signature": "8afa84aaba70b10896253dc491b55c047cf048bc"
}Object Fields body In the payment notification
Object Fields body It depends on the transaction and the payment method.
Field | Type | Description |
|---|---|---|
transaction_id | string | The transaction ID. The value of this parameter must be passed in the response to the notification. Format: UUID by RFC 4122 . |
notify_type | string | Possible values:
• payment_delivered Payment is made
• payment_declined Payment is rejected
The importance of this field is necessary. send in response to notification . |
added | string | Date and time of creation of the transaction in format Unix Timestamp . It is calculated according to Moscow time (GMT+3). |
user_info | object | Additional information about the user. Detailed description of the fields - in parameters user_info . |
issuer_id | string | The order ID is on your side. |
txn_id | string | Order ID on the payment system side. |
keep_uniq | boolean | Service Parameter. |
amount | number | Amount of payment. It takes a positive value when receiving funds and a negative - when writing off. Example: 21.05 |
currency | string | Currency of payment by ISO 4217 . |
payee_amount | number | Amount of credit, including commission. Example: 21.05 |
payee_fee_amount | number | The amount of the payment recipient’s commission. Example: 21.05 |
payer_amount | number | Amount of write-off, including commission. Example: -21.05 |
payer_fee_amount | number | The amount of the commission of the sender of payment. Example: -21.05 |
description | string | Description of payment. |
virtual_amount | number | Amount in virtual or in-game currency (e.g. VKontakte votes)) |
virtual_currency | string | The game currency code. |
status | string | status of the transaction. Possible values:
• new A new transaction. Request transaction status with a reasonable interval method POST /transaction/status .
• rejected Payment rejected, the money returned to the payer.
• paid — payment is successful (the status is final), the money is credited to the recipient’s account.
• expired - the life of the payment in the system has expired, the money has returned to the payer. It can return if, when forming the payment, the life time was limited in the parameter ttl .
• held — payment is blocked (for two-stage payments).
• hold_failed — it was not possible to write off the amount of payment, the money was returned to the payer (for two-stage payments).
• hold_canceled Cancellation of payment, commission is not charged (for two-stage payments).
• wait The transaction is rejected, but the cause is still unknown. Request transaction status with a reasonable interval method POST /transaction/status .
• process The transaction is still being processed. Request transaction status with a reasonable interval method POST /transaction/status . |
expires | string | The date and time when the life of the transaction will end, in the format Unix Timestamp . It is calculated according to Moscow time (GMT+3). Relevant for unfinished transactions. |
pay_method | string | Method of payment. |
pay_system_name | string | The name of the payment system. |
bind_id | string | Binding ID in case of a binding payment. Format: UUID by RFC 4122 . |
payment_info | object | Payment information on the payment system side. Detailed description of the fields — in Parameters payment_info . |
store_info | object | Additional parameters transmitted by you in response to payment notification . |
merchant_param | string | Additional parameters that you passed on during the transaction. |
paid | string | Date and time of payment in format Unix Timestamp . It is calculated according to Moscow time (GMT+3). |
merchant_id | integer | Recipient ID of the payment you received connecting to the Payment System API . |
merchant_name | string | Name of the recipient of the payment. |
decline_reason | string | Reason for rejection of payment. See the possible values in section on Transaction Errors . |
refund_for | string | The return transaction ID. It is present when the payment is returned. |
refunds | string | Information on refunds for the current transaction. |
gate_response | string | Contains txn_id Transaction ID on the payment system side. |
social_auth | object | User IDs on social networks. Possible parameters in the format string :
• vk The user ID is VKontakte>
• ok User ID in Classmates.
• mm User ID in My World social network. |
Object Fields user_info
Object user_info It contains information about the payer.
See other payment notification options in the section Object Fields body .
Parameter | Type | Description |
|---|---|---|
user_id | string | A user ID on your side (e.g. email, ID, username, phone number).
Minimum length: 1 |
buyer_ip | string | IP address of the user. Format: IP version 4 by RFC 791 . |
avatar | boolean | The presence of the avatar of the user: true There is an avatar, false There is no avatar. |
avg_check | number | The average payment check of the user in VK Pay in rubles. Example: -21.05 |
avg_card_check | number | The average user's check in VK Pay on bank cards in rubles. |
balance | number | The balance of funds in the user's account in rubles. Example: -21.05 |
birth_date | string | Date of birth of the user. Format: ДД.ММ.ГГГГ . |
cid | string | ClientID a unique identifier of the session, machine, User-Agent, IP of the user or a combination thereof. |
city | string | City of the user. |
country | string | User country according to c alpha-3 ISO 3166-1 .
Length: 3 symbols. |
ip_country | string | User country by IP address according to alpha-3 ISO 3166-1 .
Length: 3 symbols. |
friends | number | The number of friends is VKontakte> Format: A positive integer. |
games | string | The name of the game is VKontakte>
One thought on “Fun Farm?2? |
name | string | User name.
Example: Персик |
surname | string | Last name. |
patronymic | string | The patronymic. |
nick | string | Name of the character in VK Play. |
payments | boolean | Availability of payments to the user: true - there is, false - No. |
phone | number | Telephone number, including country code.
Template: ^[0-9]{10,16}$ |
phone_country_code | string | Country identified by the user's phone number. Format: in accordance with alpha-3 ISO 3166-1 .
Length: 3 symbols. |
prev_agent | string | User-Agent of the last user login. |
prev_ip | string | IP address of the user's last login. Format: IP version 4 by RFC 791 . |
reg_agent | string | User-Agent during registration. |
reg_date | string | Date of User Registration.
Format: ДД.ММ.ГГГГ . |
reg_email | string | The phone number or email with which the user has registered. |
reg_ip | string | IP address of user registration. Format: IP version 4 by RFC 791 . |
reg_ip_country | string | The country of registration of the user, defined by IP, in accordance with alpha-3 ISO 3166-1 .
Length: 3 symbols. |
reg_time | string | Registration time. It is calculated according to Moscow time (GMT+3).
Format: ЧЧ:ММ:СС |
sex | string | User's gender. Possible values: w - woman, m - a man. |
user_verified | boolean | Confirmation of User Authorization ( user_id (b) Recipient of payment: true Confirmed, false - not confirmed. |
shown_id | string | User ID, which will be displayed in the payment form.
Maximum length: 255 characters. |
hwid | string | The user's device ID is Hardware ID. |
passport_full | string | Passport data of the user: series, number, by whom and when issued. |
reg_address_full | string | User registration address. |
tax_id | number | The Individual Taxpayer Number (INN). |
beneficiary_id | string | Beneficiary ID. |
benef_reg_date | string | Date of registration of the beneficiary identifier. |
tax_profile_country | string | The country code specified in the user profile, in accordance with alpha-3 ISO 3166-1 .
Length: 3 symbols. |
tax_ip_country | string | The country code specified in the user profile, in accordance with alpha-3 ISO 3166-1 .
Length: 3 symbols. |
tax_phone_country_code | string | Country code defined by the phone number specified in the user profile, in accordance with alpha-3 ISO 3166-1 .
Length: 3 symbols. |
Object Parameters payment_info
Object payment_info contains data on the payment side of the payment system.
See other payment notification options in the section Object Fields body .
Field | Type | Description |
|---|---|---|
sender | string | Data from the payer. |
recipient | string | Recipient's data. |
payer_id | string | User ID in the payment system. |
date | string | Date and time of payment in format Unix Timestamp . It is calculated according to Moscow time (GMT+3). |
amount | number | The amount of payment in the currency of payment on the payment system side. Example: -21.05 |
currency | string | Currency of payment in the payment system ISO 4217 . |
sms_service | string | Service ID for SMS payments. |
sms_text | string | Text of SMS. |
refund_type | string | Type of return . It comes in the notification when the payment is refunded. Possible values: refund Refund of payment, reversal Cancellation of payment. |
chained_transaction_id | string | Identifier of chain transaction. |
refunded_transaction_id | string | The ID of the cancelled transaction. Format: UUID by RFC 4122 . |
card_payment_amount | number | The amount that will be debited from the bank card. Example: -21.05 |
bonus_payment_amount | number | The amount that will be deducted from the bonus balance (if available). Example: -21.05 |
country | string | Country in accordance with alpha-3 ISO 3166-1 . |
mit | boolean | A sign of recurrent payment, such as autopayment, regular subscription payment. Values available:
• 1 - recurrent payment.
• 0 Non-recurrent payment (by default). |
card_rec_id | string | Recurrent payment identifier. Present if the payment is repeated periodically. |
Transaction Errors
Parameter decline_reason The payment notification may contain the following values:
Mistake | Description |
|---|---|
3DS_USER | 3DS authentication error. |
ACQUIRER_LIMIT | Restriction on the side of the acquirer. |
ACQUIRER_TECH | A technical error on the acquirer's side. |
AUTHENTICATION_FAILED | Authentication is unsuccessful. |
CARD_EXPIRED | The card expires. |
CARD_LIMIT | Bank card payment denied. Contact the issuing bank that issued the card. |
CARD_LIMIT_3DS | Card payment denied. The map data has been deleted. Contact the issuing bank that issued the card. |
CARD_LIMIT_AMOUNT | Exceeded the daily limits on the card (number of transactions, amount). Contact the issuing bank that issued the card. |
CARD_LIMIT_CVV | Card payment denied. 3DS authentication is required. Contact the issuing bank that issued the card. |
CARD_LIMIT_ONLINE | Online payments on the card are prohibited. Contact the issuing bank that issued the card. |
CARD_LIMIT_ONLINE_3DS | Online payments on the card are prohibited. The map data has been deleted. Contact the issuing bank that issued the card. |
CARD_LIMIT_ONLINE_CVV | Online payments on the card are prohibited. 3DS authentication is required. Contact the issuing bank that issued the card. |
CARD_PARAM | The map data is incorrect. Check the data and try. |
CARD_PARAM_PAN | The card number is incorrect. Check the map data and try again. |
DUPLICATE_ORDER | Duplicate requests. |
ERR_RESPONSE_TIMEOUT | Exceeded the limit of waiting for a response from the acquiring bank. Please contact technical support at vkpay_solutions@vk.team . |
ERR_VOID_ERROR | Error canceling the transaction. Please contact technical support at vkpay_solutions@vk.team . |
FRAUD | Suspicious transaction. |
INPUT | Input errors. |
ISSUER_NOT_ALLOWED | The transaction is not authorized by the issuer. Contact the issuing bank that issued the card. |
ISSUER_REJECT | Card payment denied. Contact the issuing bank that issued the card. |
ISSUER_TECH | The issuing bank that issued the card does not respond. Please go to the bank. |
NOT_ENOUGH_MONEY | Not enough money for the transaction. Try using another card or another payment method. |
ORDER_NOT_FOUND | Order not found. |
REFUND_ORDER_NOT_FOUND | Order not found. The cancellation may have already been made. Wait for the change of order status. |
REJECTED_UNKNOWN | Impossible to make a payment. Please contact technical support at vkpay_solutions@vk.team . |
SECURITY | Impossible to make a payment. Please contact technical support at vkpay_solutions@vk.team . |
SYSTEM | No payment could be made. Make sure the data entry is correct and try again. |
UNKNOWN | Impossible to make payment. Please contact technical support at vkpay_solutions@vk.team . |
VTERM_DISABLED | Payment Recipient ID merchant_id indicated incorrectly or blocked. Please contact technical support at vkpay_solutions@vk.team . |