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

2021-06-11 18:32:24 浏览数 (1)

起因

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

调查

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

[图片上传中...(截屏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中就好了

0 人点赞