我正在我的web应用程序中集成PayU API服务(.NET MVC Core2.1)应用程序。客户付款后,PayU将通知确认作为POST请求发送给我的api方法。
示例 of PayU确认通知。
在收到的通知中放置MD5签名。
OpenPayu-Signature:
sender=checkout;
signature=c33a38d89fb60f873c039fcec3a14743;
algorithm=MD5;
content=DOCUMENTstring incoming_signature = c33a38d89fb60f873c039fcec3a14743;我应该做些什么来验证这个通知:
这里是用来验证通知签名的指令。
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()方法访问content.ToString()字符串。
是否可以不匹配散列,因为方法content.ToString()可以返回与请求正文中不同的字符串?
在.Net核心方法中,有任何方法将json作为参数处理吗?(我已经尝试放置JObject,但是ToString()方法也返回了生成到散列的字符串不匹配)
发布于 2019-11-18 13:02:32
要计算匹配的散列,您需要按原样读取传入的请求,而不需要反序列化它。所以是的,您生成的JSON可能与已发送的JSON不同(空格字符)。
我不太熟悉ASP.NET核心,但是在旧的ASP.NET中,您可以使用以下方法读取请求内容:
var json = new System.IO.StreamReader(Request.InputStream).ReadToEnd();https://stackoverflow.com/questions/54290010
复制相似问题