刘小明
2024-09-18 09fcc9929a430d812f57c1ea06e5562b403c9d8c
dingding发送群消息demo
4个文件已修改
1个文件已添加
115 ■■■■■ 已修改文件
pms-parent/pms-global/pom.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/util/DingDingUtils.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pms-parent/pms-global/src/main/resources/application-global.yml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pms-parent/pms-web-base/src/test/java/com/dy/pmsBase/PmsWebBaseApplicationTests.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pms-parent/pom.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pms-parent/pms-global/pom.xml
@@ -21,5 +21,10 @@
            <artifactId>pms-common</artifactId>
            <version>1.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>alibaba-dingtalk-service-sdk</artifactId>
            <version>2.0.0</version>
        </dependency>
    </dependencies>
</project>
pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/util/DingDingUtils.java
New file
@@ -0,0 +1,84 @@
package com.dy.pmsGlobal.util;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiRobotSendRequest;
import com.dingtalk.api.response.OapiRobotSendResponse;
import com.taobao.api.ApiException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
@Slf4j
@Component
public class DingDingUtils {
    @Value("${dingtalk.robot.access-token}")
    private String custom_robot_token;
//    public static final String USER_ID= "<you need @ group user's userId>";
    @Value("${dingtalk.at-all}")
    private boolean at_all;
    @Value("${dingtalk.robot.secret}")
    private String secret;
    @Value("${dingtalk.robot.url}")
    private String url;
    public OapiRobotSendResponse send(String msg) {
        try {
            Long timestamp = System.currentTimeMillis();
            String sign = sign(timestamp, secret);
            System.out.println(sign);
            //sign字段和timestamp字段必须拼接到请求URL上,否则会出现 310000 的错误信息
            DingTalkClient client = new DefaultDingTalkClient(url+"?sign="+sign+"&timestamp="+timestamp);
            OapiRobotSendRequest req = new OapiRobotSendRequest();
            /**
             * 发送文本消息
             */
            //定义文本内容
            OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
            text.setContent(msg);
            //定义 @ 对象
            OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
            if(at_all) {
                at.setIsAtAll(true);
            }
            //设置消息类型
            req.setMsgtype("text");
            req.setText(text);
            req.setAt(at);
            OapiRobotSendResponse rsp = client.execute(req, custom_robot_token);
            log.error("钉钉响应:"+rsp);
            return rsp;
        } catch (ApiException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        } catch (InvalidKeyException e) {
            throw new RuntimeException(e);
        }
        return null;
    }
    private String sign(Long timestamp, String secret) throws NoSuchAlgorithmException, UnsupportedEncodingException, InvalidKeyException {
        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");
        return sign;
    }
}
pms-parent/pms-global/src/main/resources/application-global.yml
@@ -43,7 +43,12 @@
        cache-enabled: true  #打开全局缓存开关(二级环境),默认值是true
        #default-enum-type-handler: com.dy.common.mybatis.envm.EnumCodeTypeHandler
dingtalk:
    robot:
        url: https://oapi.dingtalk.com/robot/send
        access-token: 5004482dce6b24d0e1e655b8e4376a6418cfcebce17ff792d0e68cbb63d6eb5b
        secret: SEC985ad412f35ece68bb239cad88b6fba59b19461dd8d067e80fafa1270d6ab465
    at-all: true
#不进行userToken过滤的URL,@ConfigurationProperties要求tokennofilter中所有字母都小写
tokennofilter:
    urls:
pms-parent/pms-web-base/src/test/java/com/dy/pmsBase/PmsWebBaseApplicationTests.java
@@ -1,13 +1,22 @@
package com.dy.pmsBase;
import com.dingtalk.api.response.OapiRobotSendResponse;
import com.dy.pmsGlobal.util.DingDingUtils;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class PmsWebBaseApplicationTests {
    private DingDingUtils dingDingUtils;
    @Autowired
    public void setDingDingUtils(DingDingUtils dingDingUtils) {
        this.dingDingUtils = dingDingUtils;
    }
    @Test
    void contextLoads() {
        OapiRobotSendResponse rsp = dingDingUtils.send("各位,这是一条测试消息");
        System.out.println(rsp.getErrcode());
    }
}
pms-parent/pom.xml
@@ -235,6 +235,14 @@
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--钉钉消息推送-->
            <dependency>
                <groupId>com.aliyun</groupId>
                <artifactId>alibaba-dingtalk-service-sdk</artifactId>
                <version>2.0.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- vo po转换 -->
            <dependency>
                <groupId>org.mapstruct</groupId>