Я интегрирую службу API PayU в свое веб-приложение (.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. Сравните строки: expect_signature и incoming_signature:
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() также вернул строку, сгенерированную для хэша, не совпадающую)