我正在将PayU API服务集成到我的Web(.NET MVC Core 2.1)应用程序中。 客户付款后,PayU将通知确认作为POST请求发送到我的api方法。
Example的PayU确认通知。
在听到的通知中放置了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()也返回生成为哈希值的字符串不匹配)
答案 0 :(得分:0)
是的,您生成的JSON可能不同于发送的JSON(空格字符)。我对ASP.NET Core并不是很熟悉,但是在旧的ASP.NET中,您可以使用以下命令读取请求内容:
var json = new System.IO.StreamReader(Request.InputStream).ReadToEnd();