Я интегрирую сервис 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 () также возвращал строку, сгенерированную в хэш, не совпадает)