Обработка платежей с измененной пользователем суммой

В некоторых платежных методах пользователь может самостоятельно вводить или менять сумму платежа так, что она будет отличаться от суммы, которая была указана в запросе изначально. При определенных обстоятельствах провайдер может успешно провести подобный платеж, и тогда в итоговом оповещении будет указана именно та сумма, которую фактически оплатил пользователь. Чтобы избежать возможных финансовых потерь, необходимо уметь принимать и обрабатывать подобные оповещения.

Данная статья содержит информацию о возможных сценариях обработки таких платежей, примеры запроса и оповещения и рекомендации по дальнейшим действиям.

Информацию о том, могут ли пользователи изменять сумму платежа при использовании того ли иного платежного метода, смотрите на странице с описанием этого метода в разделе Платежные методы.

Варианты обработки платежа после того, как пользователь изменил сумму

Если пользователь при оплате преднамеренно или случайно указал сумму, отличную от исходной, возможны три сценария дальнейшего развития событий:

  • провайдер отклоняет платеж;
  • провайдер успешно проводит платеж, но платежная платформа при обработке оставляет платеж в промежуточном статусе, пока конфликт не будет разрешен вручную техническими специалистами Rocketpay;
  • провайдер успешно проводит платеж, платежная платформа обрабатывает его и отправляет вам итоговое оповещение о проведении этого платежа, но уже с новой суммой.

В последнем сценарии важно понимать, что именно сумма указанная в итоговом оповещении и является фактической суммой, которую вы получите от пользователя. Дальнейшее разрешение ситуации осуществляется на вашей стороне.

Информацию о том, какой из этих сценариев актуален для вас, уточняйте у курирующего менеджера Rocketpay.

Запрос и оповещение об оплате с измененной суммой

Допустим, что вы инициировали платеж с суммой 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=="
    }

Что делать, если сумма платежа отличается от суммы в исходном запросе

Описанные сценарии влекут за собой риск финансовых потерь. Например, вы можете не заметить, что пользователь заплатил меньше, чем нужно, и предоставить ему услуги и товары или пополнить его счет на большую сумму.

Чтобы избежать возможных потерь:

  • всегда проверяйте соответствие сумм в исходном запросе и в финальном оповещении, поступающем от платежной платформы;
  • реализуйте в своей системе корректную обработку оповещений с измененной суммой;
  • убедитесь, что ваша система верно интерпретирует данные. Например, что пользователю зачисляется именно та сумма, которую он фактически оплатил.

Дополнительные материалы