前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java 钉钉 "errcode":310000,"errmsg":"sign not match

java 钉钉 "errcode":310000,"errmsg":"sign not match

作者头像
赵哥窟
发布2021-06-11 18:32:24
3.8K0
发布2021-06-11 18:32:24
举报
文章被收录于专栏:日常技术分享
起因

事情是这样的,老大不知道从什么地方找了一个钉钉发送消息的代码,什么说明都没有,让把代码调试通!

调查

首先钉钉开发平台查资料。

[图片上传中...(截屏2021-06-09 10.17.28.png-553604-1623205062677-0)]

截屏2021-06-09 10.17.28.png

这些都是消息,一个一个看太麻烦,找了的代码的关键字 看到一个webhook 百度搜索webhook 然后就看到群机器人资料

截屏2021-06-09 10.19.10.png

应该就是这个,然后在开始看钉钉群机器人相关的资料。

操作步骤

按照官方文档第一步 1.新建一个群 2.群管理选择智能群助手

截屏2021-06-09 10.22.32.png

3.添加机器人

截屏2021-06-09 10.23.16.png

4.添加成功后复制出机器人的Webhook地址

截屏2021-06-09 10.25.28.png

到此调用Api接口就可以。但是为什么会报"errcode":310000,"errmsg":"sign not match这个错误了?

原因是我选择了自定义机器人。但是没有阅读自定义机器的文档,所以报签名不匹配的错误

代码语言:javascript
复制
// 签名不匹配
{
  "errcode":310000,
  "errmsg":"sign not match"
}

回过头来在看下自定义机器人的文档

截屏2021-06-09 10.44.14.png

我新建机器人的时候选择的 加签

截屏2021-06-09 10.45.14.png

也提供了加签算法

代码语言:javascript
复制
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
import java.net.URLEncoder;

public class Test {
    public static void main(String[] args) throws Exception {
        Long timestamp = System.currentTimeMillis();
        String secret = "this is secret";

        String stringToSign = timestamp + "\n" + secret;
        Mac mac = Mac.getInstance("HmacSHA256");
        mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
        byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
        String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)),"UTF-8");
        System.out.println(sign);
    }

}

截屏2021-06-09 10.45.59.png

最后拼接到url中就好了

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 起因
  • 调查
  • 操作步骤
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档