Обработка платежей с измененной пользователем суммой
В некоторых платежных методах пользователь может самостоятельно вводить или менять сумму платежа так, что она будет отличаться от суммы, которая была указана в запросе изначально. При определенных обстоятельствах провайдер может успешно провести подобный платеж, и тогда в итоговом оповещении будет указана именно та сумма, которую фактически оплатил пользователь. Чтобы избежать возможных финансовых потерь, необходимо уметь принимать и обрабатывать подобные оповещения.
Данная статья содержит информацию о возможных сценариях обработки таких платежей, примеры запроса и оповещения и рекомендации по дальнейшим действиям.
Варианты обработки платежа после того, как пользователь изменил сумму
Если пользователь при оплате преднамеренно или случайно указал сумму, отличную от исходной, возможны три сценария дальнейшего развития событий:
- провайдер отклоняет платеж;
- провайдер успешно проводит платеж, но платежная платформа при обработке оставляет платеж в промежуточном статусе, пока конфликт не будет разрешен вручную техническими специалистами Benker;
- провайдер успешно проводит платеж, платежная платформа обрабатывает его и отправляет вам итоговое оповещение о проведении этого платежа, но уже с новой суммой.
В последнем сценарии важно понимать, что именно сумма указанная в итоговом оповещении и является фактической суммой, которую вы получите от пользователя. Дальнейшее разрешение ситуации осуществляется на вашей стороне.
Информацию о том, какой из этих сценариев актуален для вас, уточняйте у курирующего менеджера Benker.
Запрос и оповещение об оплате с измененной суммой
Допустим, что вы инициировали платеж с суммой 100,00 USD таким запросом:
{
"general": {
"project_id": 200,
"payment_id": "payment_456",
"signature": "PJkV8ej\/UG0Di8hTng6JvC7vQsaC6tajQVVfBaNIipTv+AWo...=="
},
"payment": {
"amount": 10000, // Исходная сумма платежа
"currency": "USD"
},
"customer": {
"id": "customer123",
"ip_address": "248.14.67.234",
"first_name": "John",
"last_name": "Doe",
"email": "johndoe@example.com"
}
}
Если пользователь укажет при оплате сумму 90,00 USD и платеж будет успешно обработан на стороне провайдера и платежной платформы, платформа отправит в веб-сервис оповещение, пример которого приведен ниже. В оповещении будет указана именно та сумма, которую оплатил пользователь (в примере она выделена полужирным начертанием), несмотря на то, что она отличается от суммы в запросе.
{
"project_id": 200,
"payment": {
"id": "payment_456",
"type": "purchase",
"status": "success",
"date": "2020-09-18T10:45:07+0000",
"method": "card",
"sum": {
"amount": 9000, // Новая сумма платежа
"currency": "USD"
},
"description": ""
},
"customer": {
"id": "customer123"
},
"operation": {
"id": 6176263066107,
"type": "sale",
"status": "success",
"date": "2020-09-18T10:45:07+0000",
"created_date": "2020-09-18T10:44:41+0000",
"request_id": "10a618359f918192beb120d98...886c8fa6d397dd-00006177",
"sum_initial": {
"amount": 9000, // Новая сумма платежа
"currency": "USD"
},
"sum_converted": {
"amount": 9000, // Новая сумма платежа
"currency": "USD"
},
"code": "0",
"message": "Success",
"provider": {
"id": 2455,
"payment_id": "JP3295254739",
"auth_code": ""
}
},
"signature": "4q3yqcJ3HJ+AhC6KXIseF...tcjmCgJHmtyz510MsNgFVZTh11lCqg=="
}
Что делать, если сумма платежа отличается от суммы в исходном запросе
Описанные сценарии влекут за собой риск финансовых потерь. Например, вы можете не заметить, что пользователь заплатил меньше, чем нужно, и предоставить ему услуги и товары или пополнить его счет на большую сумму.
Чтобы избежать возможных потерь:
- всегда проверяйте соответствие сумм в исходном запросе и в финальном оповещении, поступающем от платежной платформы;
- реализуйте в своей системе корректную обработку оповещений с измененной суммой;
- убедитесь, что ваша система верно интерпретирует данные. Например, что пользователю зачисляется именно та сумма, которую он фактически оплатил.
Дополнительные материалы
- Обработка платежей с измененной пользователем суммой — раздел с информацией об обработке платежей, выполненных через Payment Page.