Оплата по карте
Версия – 1.1
Вызов методов для оплаты можно делать только server to server.
Если у вас нет PSI DSS то карточные данные нельзя передавать с устройства на ваш сервер. Для передачи карточных даных вам необходимо сформировать криптограмму на устройстве и передавать криптограмму на ваш сервер, также пройти asv-сканирование и заполнить лист самооценки, подробнее можно почитать в документации: https://developers.cloudpayments.ru/#platezhi-v-odin-klik
Для всех методов оплаты необходимо передавать access token.
Оплата комиссии за счет отправителя
Если вы хотите, чтобы ваши сотрудники не платили комиссию сервиса при выводе чаевых, вы можете предложить платящему оплатить комиссию сервиса за получателя.
Вам обязательно необходимо отобразить эту информацию на вашей форме оплаты и у платящего должна быть возможность отказаться. Для получения суммы чаевых с учетом комиссии с платящего необходимо использовать Расчет комиссии с платящего.
Если платящий согласен оплатить комиссию за получателя, необходимо в Авторизацию платежа передать параметр “feeFromPayer”: true, в противном случае false.
Пример реализации у нас:
Расчет комиссии с платящего
Адрес: https://api.cloudtips.ru/api/payment/fee
Тип: GET
Запрос:
Наименование | Тип | Обязательность | Описание |
---|---|---|---|
amount | decimal | Да | Сумма чаевых |
layoutId | String | Да | Уникальный идентификатор страницы оплаты получателя |
Пример запроса:
{
"amount": 0;
"layoutId": "string"
}
Ответ:
Наименование | Тип | Обязательность | Описание |
---|---|---|---|
amount | decimal | Да | Сумма чаевых |
feeAmount | decimal | Да | Комиссия с платящего в % |
amountFromPayer | decimal | Да | Сумма с платящего с учетом комиссии с платящего |
succeed | Boolean | Да | Стату запроса, значение true и false |
errors | Array of string | Да | Возвращатеся список ошибок, относящихся целиком к запросу |
validationErrors | Array of string | Да | Поле представлено в формате ключ-значение и содержит ошибки, которые отнести к конкретному полю запроса |
Пример ответа:
{
"data": {
"amount": 0,
"feeAmount": 0,
"amountFromPayer": 0
},
"succeed": true,
"statusCode": 0,
"errors": [
"string"
],
"validationErrors": {
"additionalProp1": [
"string"
],
"additionalProp2": [
"string"
],
"additionalProp3": [
"string"
]
}
}
Получение данных для страницы оплаты
Описание: Получение информации о платежной странице получателя
Адрес: https://api.cloudtips.ru/api/paymentpages/{layoutId}
Тип: GET
Запрос:
Наименование | Тип | Обязательность | Описание |
---|---|---|---|
layoutId | String | Да | Уникальный идентификатор страницы оплаты получателя |
Пример запроса:
-
Ответ:
Наименование | Тип | Обязательность | Описание |
---|---|---|---|
url | String | Да | Ссылка на страницу оплаты |
title | String | Да | Название |
backgroundUrl | String | Да | Ссылка на обложку |
avatarUrl | String | Да | Ссылка на аватарку получателя |
logoUrl | String | Да | Ссылка на логотип |
nameText | String | Да | Имя получателя |
backgroundColor | String | Да | Цвет бэкграунда страницы оплаты |
linksColor | String | Да | Цвет ссылок |
buttonsColor | String | Да | Цвет кнопок |
applePayEnabled | Boolean | Да | Оплата по apple pay доступна, значения true и false |
googlePayEnabled | Boolean | Да | Оплата по google pay доступна, значения true и false |
userAgreementText | String | Да | Текст пользовательского соглашения |
userAgreementUrl | String | Да | Ссылка на пользовательское соглашение |
hideReCaptchaHint | Boolean | Да | Скрывать иконку капчи |
excludeCharityBanner | Boolean | Да | Не используется |
paymentMessage | String | Да | Текст на странице оплаты |
successMessage | String | Да | Текст на странице успешной оплаты |
failMessage | String | Да | Не используется |
amount |
| Да | Блок для управления полем сумма |
amountPresetSettings |
| Да | Блок с предустановленными суммами |
enabled | Boolean | Да | Включен, значения true и false |
amounts | Array of integer | Да | Варианты сумм |
constraints |
| Да | Не используется |
range |
| Да | Ограничение на сумму платежа |
minimal | decimal | Да | минимальная сумма платежа |
maximal | decimal | Да | максимальная сумма платежа |
fixed | decimal | Да | фиксированная сумма платежа |
target |
| Да | Блок цель |
startDate | Date | Да | Дата начала сбора денег |
finishDate | Date | Да | Дата окончания сбора денег |
targetAmount | decimal | Да | Сумма цели |
currentAmount | decimal | Да | Текущая сумма |
rating |
| Да | Блок рейтинг |
enabled | Boolean | Да | Включен, значения true и false |
components |
| Да | Компоненты рейтинга |
id | String | Да | Уникальный идентификатор компоненты |
title | String | Да | Название компоненты |
imageUrl | String | Да | Ссылка на изображение |
availableFields |
| Да | Блок полей для заполнения |
comment |
| Да | Комментарий |
title | String | Да | Название поля |
enabled | Boolean | Да | Включен, значения true и false |
required | Boolean | Да | Обязательно, значения true и false |
| Да | Почта платящего | |
title | String | Да | Название поля |
enabled | Boolean | Да | Включен, значения true и false |
required | Boolean | Да | Обязательно, значения true и false |
name |
| Да | Имя платящего |
title | String | Да | Название поля |
enabled | Boolean | Да | Включен, значения true и false |
required | Boolean | Да | Обязательно, значения true и false |
phoneNumber |
| Да | Телефон платящего |
title | String | Да | Название поля |
enabled | Boolean | Да | Включен, значения true и false |
required | Boolean | Да | Обязательно, значения true и false |
payerCity |
| Да | Город платящего |
title | String | Да | Название поля |
enabled | Boolean | Да | Включен, значения true и false |
required | Boolean | Да | Обязательно, значения true и false |
afterPaymentActions |
| Да | Действие после оплаты |
emailSending | Boolean | Да | Отправить email, значения true и false. Если выбран true, то поле email обязательно для заполнения |
payerFee |
| Да | Блок комиссия за счет платящего |
enabled | Boolean | Да | Включен, значения true и false |
initialState | String | Да | Положение по умолчанию, значения:
|
buttonPosition | String | Да | Не используется |
feedback |
| Да | Не используется |
succeed | Boolean | Да | Стату запроса, значение true и false |
errors | Array of string | Да | Возвращатеся список ошибок, относящихся целиком к запросу |
validationErrors | Array of string | Да | Поле представлено в формате ключ-значение и содержит ошибки, которые отнести к конкретному полю запроса |
Пример ответа:
{
"data": {
"url": "string",
"title": "string",
"backgroundUrl": "string",
"avatarUrl": "string",
"logoUrl": "string",
"nameText": "string",
"backgroundColor": "string",
"linksColor": "string",
"buttonsColor": "string",
"applePayEnabled": true,
"googlePayEnabled": true,
"userAgreementText": "string",
"userAgreementUrl": "string",
"hideReCaptchaHint": true,
"excludeCharityBanner": true,
"paymentMessage": {
"additionalProp1": "string",
"additionalProp2": "string",
"additionalProp3": "string"
},
"successMessage": {
"additionalProp1": "string",
"additionalProp2": "string",
"additionalProp3": "string"
},
"failMessage": {
"additionalProp1": "string",
"additionalProp2": "string",
"additionalProp3": "string"
},
"amount": {
"amountPresetSettings": {
"enabled": true,
"amounts": [
0
]
},
"constraints": [
{
"type": "string",
"currency": "string",
"value": 0
}
]
},
"target": {
"startDate": "2021-08-24T10:06:46.874Z",
"finishDate": "2021-08-24T10:06:46.874Z",
"targetAmount": 0,
"currentAmount": 0
},
"rating": {
"enabled": true,
"components": [
{
"id": "string",
"title": "string",
"imageUrl": "string"
}
]
},
"availableFields": {
"comment": {
"title": "string",
"enabled": true,
"required": true
},
"email": {
"title": "string",
"enabled": true,
"required": true
},
"name": {
"title": "string",
"enabled": true,
"required": true
},
"phoneNumber": {
"title": "string",
"enabled": true,
"required": true
},
"payerCity": {
"title": "string",
"enabled": true,
"required": true
}
},
"afterPaymentActions": {
"emailSending": true
},
"payerFee": {
"enabled": true,
"initialState": "string",
"buttonPosition": "string"
},
"feedback": {
"enabled": true,
"rating": {
"enabled": true,
"components": [
{
"id": "string",
"title": "string",
"imageUrl": "string"
}
]
},
"availableFields": {
"comment": {
"title": "string",
"enabled": true,
"required": true
},
"email": {
"title": "string",
"enabled": true,
"required": true
},
"name": {
"title": "string",
"enabled": true,
"required": true
},
"phoneNumber": {
"title": "string",
"enabled": true,
"required": true
},
"payerCity": {
"title": "string",
"enabled": true,
"required": true
}
}
}
},
"succeed": true,
"statusCode": 0,
"errors": [
"string"
],
"validationErrors": {
"additionalProp1": [
"string"
],
"additionalProp2": [
"string"
],
"additionalProp3": [
"string"
]
}
}
Получение publicId
Описание: Позволяет начать процедуру оплаты чаевых
Адрес: https://api.cloudtips.ru/api/payment/publicid
Тип: POST
Запрос:
Наименование | Тип | Обязательность | Описание |
---|---|---|---|
layoutId | String | Да | Идентификатор платежной ссылки |
Пример запроса:
{
"layoutId": "string"
}
Ответ:
Наименование | Тип | Обязательность | Описание |
---|---|---|---|
publicId | String | Да | Уникальный идентификатор терминала |
succeed | Boolean | Да | Стату запроса, значение true и false |
errors | Array of string | Да | Возвращатеся список ошибок, относящихся целиком к запросу |
validationErrors | Array of string | Да | Поле представлено в формате ключ-значение и содержит ошибки, которые отнести к конкретному полю запроса |
Пример ответа:
{
"data": {
"publicId": "string"
},
"succeed": true,
"statusCode": 0,
"errors": [
"string"
],
"validationErrors": {
"additionalProp1": [
"string"
],
"additionalProp2": [
"string"
],
"additionalProp3": [
"string"
]
}
}
Создание криптограммы
Описание: Для создания криптограммы карты можно использовать SDK для Android и iOS в зависимости от устройства или использовать Скрипт checkout для web.
Авторизация платежа
Описание: Проведение платежа по карте
Если платящий согласен оплатить комиссию за получателя и передается параметр “feeFromPayer”: true, то сумма amount должна учитывать рассчитанную комиссию
Адрес: https://api.cloudtips.ru/api/payment/partner/auth
Тип: POST
Запрос:
Наименование | Тип | Обязательность | Описание |
---|---|---|---|
cardholderName | String | Нет | Имя держателя карты латиницей |
cardCryptogramPacket | String | Да | Криптограмма карты |
amount | decimal | Да | Сумма платежа Число с плавающей запятой, округление до 2 знаков после запятой |
feeFromPayer | Boolean | Да | Комиссия с платящего, значения true и false |
currency | String | Да | Валюта платежа, константа RUB |
name | String | Нет | Имя платящего |
comment | String | Нет | Комментарий платящего |
layoutId | String | Да | Уникальный идентификатор страницы оплаты получателя |
invoiceId | String | Нет | Внешний идентификатор партнера, например внутренний номер заказа |
payerEmail | String | Нет | email платящего |
receiverSubscriptionSettingId | String | Нет | Не используется |
payerPhoneNumber | String | Нет | Телефон платящего |
payerCity | String | Нет | Город платящего |
routeId | String | Нет | Не используется |
captchaVerificationToken | String | Нет | Не используется |
rating |
| Нет | Компоненты рейтинга |
score | Integer | Нет | Оценка, значение от 0 до 5 |
selectedComponents | Array of string | Нет | Выбранные компоненты полученные при запросе данных Страницы оплаты, передается список id выбранных компонентов |
ipSource | string | Да | Ip адрес плательщика |
Пример запроса:
{
"cardholderName": "string",
"cardCryptogramPacket": "string",
"amount": 0,
"feeFromPayer": true,
"currency": "string",
"name": "string",
"comment": "string",
"layoutId": "string",
"invoiceId": "string",
"payerEmail": "user@example.com",
"receiverSubscriptionSettingId": "string",
"payerPhoneNumber": "string",
"payerCity": "string",
"routeId": "string",
"captchaVerificationToken": "string",
"rating": {
"score": 0,
"selectedComponents": [
"string"
]
},
"ipSource" : "string"
}
Ответ:
Наименование | Тип | Обязательность | Описание |
---|---|---|---|
transactionId | String | Да | Уникальный идентификатор оплаты |
md | String | Да |
|
paReq | String | Да |
|
acsUrl | String | Да | URL банка для прохождения 3DS |
message | String | Да | Текстовый статус платежа |
statusCode | String | Да | Статус код платежа |
cardToken | String | Да | Токен карты платящего |
partnerRedirectUrl | String | Да | URL редиректа на страницу партнера |
cardIssuerBankCountry | String | Да | Страна банка эмитента карты |
cardLastFour | String | Да | Последние 4 цифры карты |
cardExpDate | String | Да | Дата окончания действия карты |
issuerCode | String | Да | Код эмитента |
succeed | Boolean | Да | Стату запроса, значение true и false |
errors | Array of string | Да | Возвращатеся список ошибок, относящихся целиком к запросу |
validationErrors | Array of string | Да | Поле представлено в формате ключ-значение и содержит ошибки, которые отнести к конкретному полю запроса |
Пример ответа:
{
"data": {
"transactionId": 0,
"md": "string",
"paReq": "string",
"acsUrl": "string",
"message": "string",
"statusCode": "string",
"cardToken": "string",
"partnerRedirectUrl": "string",
"cardIssuerBankCountry": "string",
"cardLastFour": "string",
"cardExpDate": "string",
"issuerCode": "string"
},
"succeed": true,
"statusCode": 0,
"errors": [
"string"
],
"validationErrors": {
"additionalProp1": [
"string"
],
"additionalProp2": [
"string"
],
"additionalProp3": [
"string"
]
}
}
Обработка 3-D Secure
Описание: Если при Авторизации платежа вернулся статус Success, то оплата прошла успешна и проходить 3DS не требуется.
Если при Авторизации платежа вернулся статус Need3DS, то необходимо перенаправить получателя на AcsUrl банка для прохождения 3ds.
Для проведения 3-D Secure аутентификации нужно отправить плательщика на адрес, указанный в параметре AcsUrl из метода Авторизация платежа с передачей следующих параметров:
MD — параметр TransactionId из ответа сервера;
PaReq — одноименный параметр из ответа сервера;
TermUrl — адрес на вашем сайте для возврата плательщика после аутентификации.
Для завершения оплаты выполните следующий метод Завершение оплаты.
Завершение оплаты
Описания: После возвращения платящего на ваш сайт необходимо завершить оплату.
Адрес: https://api.cloudtips.ru/api/payment/post3ds
Тип: POST
Запрос:
Наименование | Тип | Обязательность | Описание |
---|---|---|---|
paRes | String | Да |
|
md | String | Да |
|
Пример запроса:
{
"paRes": "string",
"md": "string"
}
Ответ:
Наименование | Тип | Обязательность | Описание |
---|---|---|---|
transactionId | String | Да | Уникальный идентификатор оплаты |
md | String | Да |
|
paReq | String | Да |
|
acsUrl | String | Да | URL банка для прохождения 3DS |
message | String | Да | Текстовый статус платежа |
statusCode | String | Да | Статус код платежа |
cardToken | String | Да | Токен карты платящего |
partnerRedirectUrl | String | Да | URL редиректа на страницу партнера |
cardIssuerBankCountry | String | Да | Страна банка эмитента карты |
cardLastFour | String | Да | Последние 4 цифры карты |
cardExpDate | String | Да | Дата окончания действия карты |
issuerCode | String | Да | Код эмитента |
succeed | Boolean | Да | Стату запроса, значение true и false |
errors | Array of string | Да | Возвращатеся список ошибок, относящихся целиком к запросу |
validationErrors | Array of string | Да | Поле представлено в формате ключ-значение и содержит ошибки, которые отнести к конкретному полю запроса |
Пример ответа:
{
"data": {
"transactionId": 0,
"md": "string",
"paReq": "string",
"acsUrl": "string",
"message": "string",
"statusCode": "string",
"cardToken": "string",
"partnerRedirectUrl": "string",
"cardIssuerBankCountry": "string",
"cardLastFour": "string",
"cardExpDate": "string",
"issuerCode": "string"
},
"succeed": true,
"statusCode": 0,
"errors": [
"string"
],
"validationErrors": {
"additionalProp1": [
"string"
],
"additionalProp2": [
"string"
],
"additionalProp3": [
"string"
]
}
}