Проверка подписи уведомления PayU POST - PullRequest
0 голосов
/ 21 января 2019

Я интегрирую сервис PayU API в свое веб-приложение (.NET MVC Core 2.1). После того, как клиент оплатил заказ, PayU отправляет подтверждение уведомления в виде запроса POST моему методу API.

Пример уведомления о подтверждении PayU.

В извещении о прослушивании размещена подпись MD5.

OpenPayu-Signature:
                sender=checkout;
                signature=c33a38d89fb60f873c039fcec3a14743;
                algorithm=MD5;
                content=DOCUMENT
string incoming_signature = c33a38d89fb60f873c039fcec3a14743;

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

Здесь - инструкция для проверки подписи уведомления.

1.Свойте в теле входящего уведомления значение second_key (второй ключ доступен на странице моей учетной записи в payu):

string concatenated = JSONnotification + second_key;

2.Выберите ожидаемое значение подписи, применив функцию хеширования (например, md5) в полученной цепочке символов:

string expected_signature = md5(concatenated)

3.Сравнить строки: ожидаемая_подпись и входящая_подпись:

bool signature_is_correct = (expected_signature == incoming_signature);

Проблема в том, что контрольные суммы не совпадают.

Я обработал это уведомление в методе моего контроллера:

[HttpPost]
[AllowAnonymous]
[Route("notify")]
public IActionResult TransactionConfirm([FromBody] dynamic content)

content переменная, проанализированная как object

и я получаю доступ к строке JsonBody как content.ToString() способ.

Возможно, что хэши не совпадают, потому что метод content.ToString () может возвращать не ту же строку, что и в теле запроса?

Есть ли способы обработки json в качестве аргумента в методе .Net Core? (Я уже пытался поместить JObject, но метод ToString () также возвращал строку, сгенерированную в хэш, не совпадает)

...