这两天在调用钉钉注册通讯录事件回调接口(
[font=&]https://oapi.dingtalk.com/call_back/register_call_back?access_token=ACCESS_TOKEN)的时候遇到错误:返回文本非success
查阅了网上的文档,很多人遇到此问题,有个别人解决了,但是没有说的很明白怎么解决的,最后自己摸索,终于调通了!所以记录下来,为大家节约时间!
我使用的是.NET WebAPI 实现的回调,下面直接贴代码( 重点看 下面 写 注意的地方)
//注意:返回类型是 dynamic ,而不是string
public dynamic Post([FromBody]ContactEncryptRequest contactEncrypt, [FromUri] ContactRequest contact)
{
string token = "112121212121211";//自定义随机串
string aes_key = "b1234567890123456789012345678901234567890ac";//自定义随机串43位
string suiteKey = "ding**********************";//CorpID
var dingTalkCrypt = new DingTalkCrypt(token, aes_key, suiteKey);
string plainText = "";
dingTalkCrypt.DecryptMsg(contact.Signature, contact.Timestamp, contact.Nonce, contactEncrypt.Encrypt, ref plainText);
var plain = JsonConvert.DeserializeObject<dynamic>(plainText);
if (plain.EventType == "check_url")
{
//------------加密数据返回-----------------------
string signature = "";
string encrypt = "";
try
{
dingTalkCrypt = new DingTalkCrypt(token, aes_key, suiteKey);
//注意:此处的 Timestamp和 Nonce是从回调接收到的
dingTalkCrypt.EncryptMsg("success", contact.Timestamp, contact.Nonce, ref encrypt, ref signature);
}
catch (Exception ex)
{
LoggingFactory.GetLogger().Error("加密返回数据:" + ex.Message);
}
//注意:此处的 Timestamp和 Nonce也是从回调接收到的
Hashtable jsonMap = new Hashtable
{
{"msg_signature", signature},
{"timeStamp", contact.Timestamp },
{"nonce", contact.Nonce },
{"encrypt", encrypt}
};
//特别注意:不要转换为json string 类型返回,直接 返回Json对象
//string result = JsonConvert.SerializeObject(jsonMap);
return jsonMap;
}
else
{
return null;
}
}
上面的代码测试通过的,如有疑问,请回复!!!或者 QQ 812410472
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。