【发布时间】:2019-01-21 12:29:12
【问题描述】:
我正在我的 Web (.NET MVC Core 2.1) 应用程序中集成 PayU API 服务。 客户支付订单后,PayU 将通知确认作为 POST 请求发送到我的 api 方法。
ExamplePayU 确认通知。
在听证通知中放置 MD5 签名。
OpenPayu-Signature:
sender=checkout;
signature=c33a38d89fb60f873c039fcec3a14743;
algorithm=MD5;
content=DOCUMENT
string incoming_signature = c33a38d89fb60f873c039fcec3a14743;
我应该做些什么来验证该通知:
Here是验证通知签名的指令。
1.将传入通知的正文与 second_key 的值结合起来(第二个密钥在我的 payu 帐户页面中可用):
string concatenated = JSONnotification + second_key;
2.通过在接收到的字符链中应用散列函数(例如md5)来选择预期的签名值:
string expected_signature = md5(concatenated)
3.比较字符串:expected_signature和incoming_signature:
bool signature_is_correct = (expected_signature == incoming_signature);
问题是校验和不匹配。
我在我的控制器方法中处理此通知:
[HttpPost]
[AllowAnonymous]
[Route("notify")]
public IActionResult TransactionConfirm([FromBody] dynamic content)
content 变量解析为object
我以 content.ToString() 访问 JsonBody 字符串
方法。
是否有可能因为方法 content.ToString() 可以返回与请求正文中不同的字符串而导致哈希不匹配?
有什么方法可以将 json 作为 .Net Core 方法中的参数处理? (我已经尝试放置JObject,但是ToString()方法也返回了生成到hash不匹配的字符串)
【问题讨论】:
标签: c# .net json asp.net-core payu