open-dingtalk / DingTalk-Callback-Crypto

钉钉回调加解密类库和对应demo
62 stars 199 forks source link

事件与回调-HTTP请求结果校验返回字段值失败 #21

Closed somnusnrlq closed 2 years ago

somnusnrlq commented 2 years ago

edf5d8af5bf40f9eb9965b29b3e0391a_lALPDetfY0lnjinNAzDNA-E_993_816

测试日志都能输出。。保存就是失败

补充:使用返回的getEncryptedMap数据进行测试返回的是success

补充2:既然是success那么考虑返回格式问题 测试发现 返回successMap:{"msg_signature":"8207a0ae016d1847f7f1d05a62b9b8a84b13dd43","encrypt":"BCtCbxMLXZNAlTNoMraFDhFWJ8l78y/L8/kGvAytjMqUdIiYmdz13Uk04+FviogTgo8P9rXaLl66pkj3uCziHg==","timeStamp":"749","nonce":"5418emcCHwlW5khH"} 格式是正确的 采用了不同方式返回对象 都是不行!!!

somnusnrlq commented 2 years ago

{"msg_signature":"21ba01d1f90739003e944da2ab481379d7ef69d9","timeStamp":"1655859838971","nonce":"yVOHqguT","encrypt":"qCjUIDE0YwT6hNQDCo2R1qefU3ZR6IQ2/435dyYcr557SqgRJo53e84nzTDoKYL07tWYZ68ScAO4cObzDuK5Gg=="} 官方说自带代码生成得不对 我直接把 timeStamp nonce 两个原值传递过去的 保存还是报错HTTP请求结果校验返回字段值失败

somnusnrlq commented 2 years ago

问题解决了
总结来说这里我遇到两个坑 1.调用C#版的getEncryptedMap(String plaintext) demo报错 原因是里面自己生成的timeStamp没有正确转化13位的时间戳导致 2.是我的项目是netCore3.1 我在startup启动文件中做了返回对象的统一小写转化 3.工单一直回复timeStamp、nonce两个都是接收的原值传递进去(这个是不对的,只传递timeStamp)

下面将DingTalkEncryptor.cs中修改代码如下,

` /**

方法二: 外层直接传递接收到的timeStamp 调用重载方法即可 denc.getEncryptedMap("success", long.Parse(timeStamp));