首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PayU后通知签名验证

PayU后通知签名验证
EN

Stack Overflow用户
提问于 2019-01-21 12:29:12
回答 1查看 585关注 0票数 0

我正在我的web应用程序中集成PayU API服务(.NET MVC Core2.1)应用程序。客户付款后,PayU将通知确认作为POST请求发送给我的api方法。

示例 of PayU确认通知。

在收到的通知中放置MD5签名。

代码语言:javascript
复制
OpenPayu-Signature:
                sender=checkout;
                signature=c33a38d89fb60f873c039fcec3a14743;
                algorithm=MD5;
                content=DOCUMENT
代码语言:javascript
复制
string incoming_signature = c33a38d89fb60f873c039fcec3a14743;

我应该做些什么来验证这个通知:

这里是用来验证通知签名的指令。

1.将传入通知的正文与second_key值相结合(第二个密钥可在payu的“我的帐户”页面中获得):

代码语言:javascript
复制
string concatenated = JSONnotification + second_key;

2.通过在接收到的字符链中应用散列函数(例如md5),选择预期的签名值:

代码语言:javascript
复制
string expected_signature = md5(concatenated)

3.比较字符串: expected_signature和incoming_signature:

代码语言:javascript
复制
bool signature_is_correct = (expected_signature == incoming_signature);

问题是校验和不匹配。

我用我的控制器方法来处理这个通知:

代码语言:javascript
复制
[HttpPost]
[AllowAnonymous]
[Route("notify")]
public IActionResult TransactionConfirm([FromBody] dynamic content)

content变量被解析为object

并以content.ToString()方法访问content.ToString()字符串。

是否可以不匹配散列,因为方法content.ToString()可以返回与请求正文中不同的字符串?

在.Net核心方法中,有任何方法将json作为参数处理吗?(我已经尝试放置JObject,但是ToString()方法也返回了生成到散列的字符串不匹配)

EN

回答 1

Stack Overflow用户

发布于 2019-11-18 13:02:32

要计算匹配的散列,您需要按原样读取传入的请求,而不需要反序列化它。所以是的,您生成的JSON可能与已发送的JSON不同(空格字符)。

我不太熟悉ASP.NET核心,但是在旧的ASP.NET中,您可以使用以下方法读取请求内容:

代码语言:javascript
复制
var json = new System.IO.StreamReader(Request.InputStream).ReadToEnd();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54290010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档