当前位置:   article > 正文

钉钉企业内部H5微应用或小程序之钉消息推送_java 钉钉消息推送 点击可打开h5

java 钉钉消息推送 点击可打开h5

钉钉简单的推送钉消息

一、钉钉准备工作

首先进入钉钉开放平台 你得有企业内部微应用或者小程序 没有创建的话去看我另一篇文章有说明

钉钉开放平台创建企业内部H5微应用或者小程序-CSDN博客

看不懂话也可以参考官方文档:创建应用 - 钉钉开放平台

二、开发的准备工作

1.pom的导入

  1. <!-- 钉钉SDK -->
  2. <dependency>
  3. <groupId>com.aliyun</groupId>
  4. <artifactId>dingtalk</artifactId>
  5. <version>1.2.15</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>com.aliyun</groupId>
  9. <artifactId>alibaba-dingtalk-service-sdk</artifactId>
  10. <version>2.0.0</version>
  11. </dependency>

2.配置文件(yml配置文件)

  1. #钉钉信息
  2. dingtalk:
  3. corpid: dingxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  4. appkey: dingxxxxxxxxxxxxxxxx
  5. appsecret: 89QA-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxx
  6. agentid: 2xxxxxxxxx

这里的配置信息是你的应用信息(在钉钉后台-应用管理)

三、代码实现

添加工具类 获取钉钉AccessToken

  1. /**
  2. * 钉钉工具类
  3. * @date 2023-07-07 9:30
  4. */
  5. @Slf4j
  6. @Component
  7. public class DingTalkUtil {
  8. @Value("${dingtalk.appKey}")
  9. private String appKey;
  10. @Value("${dingtalk.appSecret}")
  11. private String appSecret;
  12. /**
  13. * 获取钉钉AccessToken
  14. *
  15. * @return
  16. */
  17. public String getAccessToken() {
  18. try {
  19. DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
  20. OapiGettokenRequest req = new OapiGettokenRequest();
  21. req.setAppkey(appKey);
  22. req.setAppsecret(appSecret);
  23. req.setHttpMethod("GET");
  24. OapiGettokenResponse rsp = client.execute(req);
  25. if (rsp.getErrcode() == 0) {
  26. return rsp.getAccessToken();
  27. } else {
  28. throw new JeecgBootException("获取dingtalk授权失败!");
  29. }
  30. } catch (ApiException e) {
  31. e.printStackTrace();
  32. }
  33. return null;
  34. }
  35. }

调用钉钉接口之前都是需要用到access_token校验的,接着调用用户电话获得钉钉的userId(某个人在企业里的唯一ID)

  1. /**
  2. * 获取钉钉的用户的userid
  3. *
  4. * @param phone 用户电话
  5. * @return 钉钉用户内部userId
  6. */
  7. public String getDingTalkUserId(String phone) throws Exception {
  8. String accessToken = this.getAccessToken();
  9. if (accessToken == null) {
  10. throw new Exception("获取到access_token失败!");
  11. }
  12. try {
  13. DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/getbymobile");
  14. OapiV2UserGetbymobileRequest req = new OapiV2UserGetbymobileRequest();
  15. req.setMobile(phone);
  16. OapiV2UserGetbymobileResponse rsp = client.execute(req, accessToken);
  17. String userId = rsp.getResult().getUserid();
  18. return userId;
  19. } catch (ApiException e) {
  20. log.error("请求获取钉钉用户的userid失败:{}", e.getErrMsg());
  21. }
  22. return null;
  23. }

发送消息工具类(可给单个或多个人发送)

  1. package org.jeecg.modules.aigoes.util;
  2. import com.alibaba.fastjson.JSONObject;
  3. import lombok.extern.slf4j.Slf4j;
  4. import org.jeecg.common.util.TokenUtils;
  5. import org.jeecg.modules.message.util.DingTalkUtil;
  6. import org.jeecg.modules.system.entity.SysTenant;
  7. import org.jeecg.modules.system.service.ISysTenantService;
  8. import org.springframework.beans.factory.annotation.Value;
  9. import org.springframework.stereotype.Component;
  10. import javax.annotation.Resource;
  11. import java.io.*;
  12. import java.net.HttpURLConnection;
  13. import java.net.URL;
  14. import java.util.List;
  15. import java.util.stream.Collectors;
  16. /**
  17. * rwy
  18. * @date 2023-07-07 9:30
  19. */
  20. @Slf4j
  21. @Component
  22. public class MessageUtils {
  23. @Resource
  24. private DingTalkUtil dingTalkUtil;
  25. // 钉钉发送消息给指定用户列表
  26. public void sendMessageNew(List<String> userIdList, String picUrl, String messageUrlDing, String text, String title) throws Exception {
  27. String accessToken = dingTalkUtil.getAccessToken();
  28. String messageUrl = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=" + accessToken;
  29. JSONObject jsonObject = new JSONObject();
  30. //钉钉后台应用的agent_id
  31. jsonObject.put("agent_id", sysTenant.getAgentId());
  32. //推送的userId
  33. jsonObject.put("userid_list",userIdList.stream().collect(Collectors.joining(",")));
  34. jsonObject.put("to_all_user", false);
  35. JSONObject msgObj = new JSONObject();
  36. //消息类型
  37. msgObj.put("msgtype", "action_card");
  38. JSONObject textObj = new JSONObject();
  39. //标题
  40. textObj.put("title", title);
  41. //内容
  42. textObj.put("markdown", text);
  43. //按钮名称
  44. textObj.put("single_title", picUrl);
  45. //跳转地址 填小程序莫页面地址或微应用的
  46. textObj.put("single_url", messageUrlDing);
  47. msgObj.put("action_card",textObj);
  48. jsonObject.put("msg", msgObj);
  49. String jsonBody = jsonObject.toJSONString();
  50. System.out.println(jsonBody);
  51. //发送POST请求
  52. JSONObject response = httpPost(messageUrl, jsonBody, "UTF-8");
  53. System.out.println(response);
  54. }
  55. public JSONObject httpPost(String url, String requestData, String charset) throws IOException {
  56. URL apiUrl = new URL(url);
  57. HttpURLConnection connection = (HttpURLConnection) apiUrl.openConnection();
  58. connection.setRequestMethod("POST");
  59. connection.setDoOutput(true);
  60. // 设置请求头部
  61. connection.setRequestProperty("Content-Type", "application/json;charset=" + charset);
  62. // 发送请求数据
  63. try (OutputStream outputStream = connection.getOutputStream()) {
  64. outputStream.write(requestData.getBytes(charset));
  65. outputStream.flush();
  66. }
  67. // 获取响应结果
  68. try (InputStream inputStream = connection.getInputStream();
  69. BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, charset))) {
  70. StringBuilder response = new StringBuilder();
  71. String line;
  72. while ((line = reader.readLine()) != null) {
  73. response.append(line);
  74. }
  75. return JSONObject.parseObject(response.toString());
  76. }
  77. }
  78. }

这里需要注意的是你选择的消息通知类型 - 钉钉开放平台,我这里选择是卡片消息 因为卡片消息支持整体跳转ActionCard样式和独立跳转ActionCard样式以及可以展示图片和添加多个按钮 样式和可玩性比较高。

测试发送钉消息

注意事项:小程序链接和微应用微应用唯一区别在这跳转地址 要跳转小程序前面是需要加 eapp:// 列如以下是这样的 eapp://pagesA/pages/Home/h-psy/ 而微应用不用加

  1. /**
  2. * 发送钉消息
  3. * @return
  4. * @throws Exception
  5. */
  6. @GetMapping("/cs2")
  7. public Result<?> cs() throws Exception {
  8. String headteacherId = "661xxxxxxxxxxxxxxx";
  9. messageUtils.sendMessageNew(Collections.singletonList(headteacherId),
  10. "点击查看详情","pagesA/pages/Home/h-psy/mood",
  11. "### <font color=#04CFFF>测试天气消息</font> \n **天气还不错。**",
  12. "天气报告");
  13. return Result.OK();
  14. }

四、调试API Explorer

 钉钉专门的API调用工具可以自己试试API Explorer 

1.根据自己应用的appKey和appSecret来获取accessToken。

2. 工作通知-异步发送工作通知

填入内容 然后往下拉找到我们要发的消息类型我这里是卡片消息(这里你也可以选别的消息类型)填入必填的参数再点发起调用 也是能够成功发送的。

最后希望能帮助到你们。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/905704
推荐阅读
相关标签
  

闽ICP备14008679号