PayU POST通知签名验证

时间:2019-01-21 12:29:13

标签: c# .net json asp.net-core payu

我正在将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()也返回生成为哈希值的字符串不匹配)

1 个答案:

答案 0 :(得分:0)

是的,您生成的JSON可能不同于发送的JSON(空格字符)。我对ASP.NET Core并不是很熟悉,但是在旧的ASP.NET中,您可以使用以下命令读取请求内容:

var json = new System.IO.StreamReader(Request.InputStream).ReadToEnd();