Pay

https://{Environment}.payture.com/api/Pay

Команда Pay используется для выполнения платежа по одностадийной схеме.

Результатом обработки запроса является списание денежных средств с карты Покупателя. Списанные средства могут быть полностью или частично возвращены на карту Покупателя при помощи команды Refund.

Запрос

curl https://sandbox3.payture.com/api/Pay \
  -X POST \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d Key=Merchant \
  -d Amount=12480 \
  -d OrderId=5f63838d-fb03-00c6-c890-c67cfc1c54ea \
  --data-urlencode "PayInfo=PAN=4111111111100031;EMonth=12;EYear=22;CardHolder=Ivan Ivanov;SecureCode=123;OrderId=5f63838d-fb03-00c6-c890-c67cfc1c54ea;Amount=12480" \
  --data-urlencode "CustomFields=IP=241.22.197.12;Product=Ticket"
<?php
$payInfo = http_build_query([
    'PAN'        => '4111111111100031',
    'EMonth'     => '12',
    'EYear'      => '22',
    'CardHolder' => 'Ivan Ivanov',
    'SecureCode' => '123',
    'OrderId'    => '5f63838d-fb03-00c6-c890-c67cfc1c54ea',
    'Amount'     => '12480',
], '', ';');

$customFields = http_build_query([
    'IP'      => '241.22.197.12',
    'Product' => 'Ticket',
], '', ';');

$data = http_build_query([
    'Key'          => 'Merchant',
    'Amount'       => '12480',
    'OrderId'      => '5f63838d-fb03-00c6-c890-c67cfc1c54ea',
    'PayInfo'      => $payInfo,
    'CustomFields' => $customFields,
]);

$ch = curl_init('https://sandbox3.payture.com/api/Pay');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

echo $response;
const payInfo = new URLSearchParams({
  PAN: '4111111111100031',
  EMonth: '12',
  EYear: '22',
  CardHolder: 'Ivan Ivanov',
  SecureCode: '123',
  OrderId: '5f63838d-fb03-00c6-c890-c67cfc1c54ea',
  Amount: '12480',
}).toString().replace(/&/g, ';');

const customFields = new URLSearchParams({
  IP: '241.22.197.12',
  Product: 'Ticket',
}).toString().replace(/&/g, ';');

const body = new URLSearchParams({
  Key: 'Merchant',
  Amount: '12480',
  OrderId: '5f63838d-fb03-00c6-c890-c67cfc1c54ea',
  PayInfo: payInfo,
  CustomFields: customFields,
});

const res = await fetch('https://sandbox3.payture.com/api/Pay', {
  method: 'POST',
  headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
  body,
});

console.log(await res.text());
import requests
from urllib.parse import urlencode

pay_info = urlencode({
    'PAN': '4111111111100031',
    'EMonth': '12',
    'EYear': '22',
    'CardHolder': 'Ivan Ivanov',
    'SecureCode': '123',
    'OrderId': '5f63838d-fb03-00c6-c890-c67cfc1c54ea',
    'Amount': '12480',
}).replace('&', ';')

custom_fields = urlencode({
    'IP': '241.22.197.12',
    'Product': 'Ticket',
}).replace('&', ';')

response = requests.post(
    'https://sandbox3.payture.com/api/Pay',
    data={
        'Key': 'Merchant',
        'Amount': '12480',
        'OrderId': '5f63838d-fb03-00c6-c890-c67cfc1c54ea',
        'PayInfo': pay_info,
        'CustomFields': custom_fields,
    },
)

print(response.text)
using System.Net.Http;
using System.Collections.Generic;
using System.Threading.Tasks;

var payInfo = string.Join(";", new[]
{
    "PAN=4111111111100031",
    "EMonth=12",
    "EYear=22",
    "CardHolder=Ivan Ivanov",
    "SecureCode=123",
    "OrderId=5f63838d-fb03-00c6-c890-c67cfc1c54ea",
    "Amount=12480",
});

var customFields = string.Join(";", new[]
{
    "IP=241.22.197.12",
    "Product=Ticket",
});

var form = new Dictionary<string, string>
{
    ["Key"]          = "Merchant",
    ["Amount"]       = "12480",
    ["OrderId"]      = "5f63838d-fb03-00c6-c890-c67cfc1c54ea",
    ["PayInfo"]      = payInfo,
    ["CustomFields"] = customFields,
};

using var client = new HttpClient();
var response = await client.PostAsync(
    "https://sandbox3.payture.com/api/Pay",
    new FormUrlEncodedContent(form));

Console.WriteLine(await response.Content.ReadAsStringAsync());
Получить ссылку

В запросах наименования параметров чувствительны к регистру

ПараметрОписаниеФормат
KeyНаименование платежного Терминала
Предоставляется с параметрами тестового/рабочего доступа
String
Mandatory
OrderIdУникальный идентификатор платежа в системе Продавца
Рекомендуемый формат: GUID/UUID или Alphanumeric. Другие форматы могут вызвать сбои в работе банковских сервисов.
String [1..50]
Mandatory
AmountСумма платежа в копейках (или другая минимальная единица валюты терминала)
Цифры, не содержащие десятичных или других разделителей
Integer
Mandatory
PayInfoПараметры для совершения транзакции
Url Encoded строка, содержащая пары ключей и их значений, разделённые символом «;» (точка с запятой). Ключи и значения разделены символом «=» (равно)
String
Mandatory
CustomFieldsДополнительные поля транзакции
Url Encoded строка, содержащая пары ключей и их значений, разделённые символом «;» (точка с запятой). Ключи и значения разделены символом «=» (равно)
String
Optional
ChequeИнформация о чеке в формате JSON, закодированная в Base64String
Optional

Состав параметра PayInfo

Внимание! Параметры OrderId и Amount передаются дважды в одном запросе: в основных параметрах запроса и в параметре PayInfo.

ПараметрОписаниеФормат
PANНомер карты
Цифры без пробелов
String [13..19]
Mandatory
EMonthМесяц истечения срока действия карты
2 цифры
Integer
Mandatory
EYearГод истечения срока действия карты
Последние 2 цифры года
Integer
Mandatory
OrderIdУникальный идентификатор платежа в системе Продавца
Рекомендуемый формат: GUID/UUID или Alphanumeric. Другие форматы могут вызвать сбои в работе банковских сервисов.
String [1..50]
Mandatory
AmountСумма платежа в копейках (или другая минимальная единица валюты терминала)
Цифры, не содержащие десятичных или других разделителей
Integer
Mandatory
SecureCodeCVC2/CVV2 код
3 или 4 цифры. Обязательность передачи зависит от типа платежа и конфигурации платежного Терминала
Integer
Optional
CardHolderФамилия и имя держателя карты
Только латинские буквы и пробел
String [1..30]
Optional

Пример параметра PayInfo (decoded):

PAN=4111111111100031;
EMonth=12;
EYear=22;
CardHolder=Ivan Ivanov;
SecureCode=123;
OrderId=5f63838d-fb03-00c6-c890-c67cfc1c54ea;
Amount=12480

Пример возможных ключей параметра CustomFields

ПараметрОписаниеФормат
IPIP адрес Покупателя
IPv4 или IPv6
String
Optional
DescriptionДополнительное описание платежаString
Optional

Пример параметра CustomFields (decoded):

IP=241.22.197.12;
Description=MyTestTransaction

Ответ

XML строка с элементом Pay

Примеры ответов

<Pay OrderId="5f63838d-fb03-00c6-c890-c67cfc1c54ea" Key="Merchant" Success="True" Amount="12480"/>
ПараметрОписаниеФормат
SuccessПризнак успешности операции. Принимает значения:
True — операция успешна
False — операция неуспешна
3DS — необходима аутентификация 3‑D Secure
String
Mandatory
OrderIdИдентификатор платежа в системе Продавца
Соответствует переданному в запросе
String [1..50]
Mandatory
KeyНаименование платежного Терминала
Соответствует переданному в запросе
String
Mandatory
AmountСумма платежа в копейках (или другая минимальная единица валюты терминала)
Передается, если «Success=True» или «Success=3DS». Соответствует переданному в запросе
Integer
Optional
ACSUrlАдрес сервера аутентификации 3-D Secure
Передается, если «Success=3DS»
String
Optional
PaReqЗапрос на аутентификацию 3-D Secure
Передается, если «Success=3DS»
String
Optional
ThreeDSKeyУникальный идентификатор транзакции (MD)
Передается, если «Success=3DS»
String
Optional
ThreeDSVersionВерсия протокола 3-D Secure:
1.0 — первая версия
2.1 — вторая версия
Передается, если «Success=3DS»
String
Optional
FinalTerminalКонечный Терминал, на котором был выполнен платеж
Передается, если было перенаправление на другой Терминал
String
Optional
AddInfoДополнительные параметры транзакции, которые могут быть переданы в ответе платежного шлюза по согласованию со службой поддержки Payture
Описание формата и возможных параметров доступно здесь
Object
Optional
ErrCodeКод ошибки. См. коды ошибок
Передается, если «Success=False»
String
Optional