【问题标题】:PayU POST notification signature validationPayU POST 通知签名验证
【发布时间】: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


    【解决方案1】:

    要计算匹配的哈希,您需要按原样读取传入的请求,而不是对其进行反序列化。所以是的,您生成的 JSON 可能与发送的 JSON 不同(空白字符)。

    我对 ASP.NET Core 不是很熟悉,但是在旧的 ASP.NET 中,您可以使用以下命令读取请求内容:

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

    【讨论】:

      猜你喜欢
      • 2017-01-06
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      • 2020-01-19
      • 1970-01-01
      • 2017-07-24
      • 1970-01-01
      • 2012-07-23
      相关资源
      最近更新 更多