Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >求助-钉钉开发异步消息失败

求助-钉钉开发异步消息失败

作者头像
shirayner
发布于 2018-08-10 02:48:55
发布于 2018-08-10 02:48:55
86110
代码可运行
举报
文章被收录于专栏:Java成神之路Java成神之路
运行总次数:0
代码可运行

源码:

1.AsyncMessage.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.ray.dingtalk.model.message.asyncsend;

/**@desc  : 
 * 
 * 参考文档地址:https://open-doc.dingtalk.com/docs/
 * doc.htm?spm=a219a.7629140.0.0.hZSBgV&treeId=385&
 * articleId=28915&docType=2
 * 
 * @author: shirayner
 * @date  : 2017年10月13日 下午1:53:40
 */
public class AsyncMessage {
    //1.公共参数
    //必须 ,API接口名称
    private String method;
    //必须 ,钉钉提供的授权Token
    private String session;
    //必须,时间戳,格式为yyyy-MM-dd HH:mm:ss,时区为GMT+8,例如:2015-01-01 12:00:00。
    //淘宝API服务端允许客户端请求最大时间误差为10分钟。
    private String timestamp;
    //必须,API协议版本,可选值:2.0。
    private String v;
    
    //2.请求参数
    
    private String msgtype;
    //必须,微应用的id
    private Number agent_id;
    //必须,与msgtype对应的消息体,参见文档
    private String msgcontent;
    
    //否
    private String []     userid_list;
    //否
    private Boolean to_all_user;
    
    
    
    
    
    
    
    
    
    public String getMethod() {
        return method;
    }
    public void setMethod(String method) {
        this.method = method;
    }
    public String getSession() {
        return session;
    }
    public void setSession(String session) {
        this.session = session;
    }
    public String getTimestamp() {
        return timestamp;
    }
    public void setTimestamp(String timestamp) {
        this.timestamp = timestamp;
    }
    public String getV() {
        return v;
    }
    public void setV(String v) {
        this.v = v;
    }
    public String getMsgtype() {
        return msgtype;
    }
    public void setMsgtype(String msgtype) {
        this.msgtype = msgtype;
    }
    public Number getAgent_id() {
        return agent_id;
    }
    public void setAgent_id(Number agent_id) {
        this.agent_id = agent_id;
    }
    public String getMsgcontent() {
        return msgcontent;
    }
    public String[] getUserid_list() {
        return userid_list;
    }
    public void setUserid_list(String[] userid_list) {
        this.userid_list = userid_list;
    }
    public Boolean getTo_all_user() {
        return to_all_user;
    }
    public void setTo_all_user(Boolean to_all_user) {
        this.to_all_user = to_all_user;
    }
    public void setMsgcontent(String msgcontent) {
        this.msgcontent = msgcontent;
    }


    
}

2.AsyncSendMessageService.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.ray.dingtalk.service.message.asyncsend;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.ray.dingtalk.model.message.asyncsend.AsyncMessage;
import com.ray.dingtalk.util.HttpHelper;

/**@desc  : 主动发送异步消息
 * 
 * @author: shirayner
 * @date  : 2017年10月13日 下午1:39:46
 */
public class AsyncSendMessageService {
    private static final String SEND_ASYNCSENDMESSAGE_URL="https://eco.taobao.com/router/rest";

    
    
    public void sendMessage(String accessToken) throws Exception{
        //1.封装请求参数
        String method="dingtalk.corp.message.corpconversation.asyncsend";
        String session =accessToken;
        String timestamp= String.valueOf( System.currentTimeMillis() / 1000 );
        String v="2.0";

        String msgtype ="text";
        Number agent_id=128838526;
        String msgcontent="发送异步消息测试";
        Boolean to_all_user=true;
        
        AsyncMessage cca=new AsyncMessage();
        cca.setMethod(method);
        cca.setSession(session);
        cca.setTimestamp(timestamp);
        cca.setV(v);
        
        cca.setMsgtype(msgtype);
        cca.setAgent_id(agent_id);
        cca.setMsgcontent(msgcontent);
        cca.setTo_all_user(to_all_user);
        
        //1.准备POST请求参数
        Object data=JSON.toJSON(cca);      //将javaBean 转为 json
        System.out.println(data);

        //2.获取请求url
        String url=SEND_ASYNCSENDMESSAGE_URL;

        //3.发起POST请求,获取返回结果
        JSONObject jsonObject=HttpHelper.httpPost(url, data);
        System.out.println("jsonObject:"+jsonObject.toString());

        //4.解析结果,获取
        if (null != jsonObject) {  

            //5.错误消息处理
            if (0 != jsonObject.getInteger("errcode")) {  
                int errCode = jsonObject.getInteger("errcode");
                String errMsg = jsonObject.getString("errmsg");
                throw new Exception("error code:"+errCode+", error message:"+errMsg); 
            }  
        }           
        
    }
    
    
    
}

3.AsyncSendMessageServiceTest.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.ray.dingtalk.test;

import org.junit.Test;

import com.ray.dingtalk.auth.AuthHelper;
import com.ray.dingtalk.config.Env;
import com.ray.dingtalk.service.message.asyncsend.AsyncSendMessageService;

/**@desc  : 
 * 
 * @author: shirayner
 * @date  : 2017年10月13日 下午2:36:27
 */
public class AsyncSendMessageServiceTest {

    @Test
    public void testSendNotice() throws Exception {
        String accessToken=AuthHelper.getAccessToken(Env.CORP_ID, Env.CORP_SECRET);
        
        AsyncSendMessageService asm=new AsyncSendMessageService();
        asm.sendMessage(accessToken);
    }
    
    
    
}

4.HttpHelper.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.ray.dingtalk.util;

import java.io.File;
import java.io.IOException;
import java.net.URI;
import org.apache.commons.io.FileUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.client.RedirectLocations;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;


/**
 * HTTP请求封装,建议直接使用sdk的API
 */
public class HttpHelper {

    /**
     * @desc :1.发起GET请求
     *  
     * @param url
     * @return JSONObject
     * @throws Exception 
     */
    public static JSONObject httpGet(String url) throws Exception {
        //1.创建httpClient 
        CloseableHttpClient httpClient = HttpClients.createDefault();
        //2.生成一个请求
        HttpGet httpGet = new HttpGet(url);
        //3.配置请求的属性
        RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(2000).setConnectTimeout(2000).build();
        httpGet.setConfig(requestConfig);

        //4.发起请求,获取响应信息
        CloseableHttpResponse response = null;
        try {
            response = httpClient.execute(httpGet, new BasicHttpContext());

            //如果返回结果的code不等于200,说明出错了  
            if (response.getStatusLine().getStatusCode() != 200) {

                System.out.println("request url failed, http code=" + response.getStatusLine().getStatusCode()
                        + ", url=" + url);
                return null;
            }
            //5.解析请求结果
            HttpEntity entity = response.getEntity();      //reponse返回的数据在entity中 
            if (entity != null) {
                String resultStr = EntityUtils.toString(entity, "utf-8");  //将数据转化为string格式  

                JSONObject result = JSON.parseObject(resultStr);    //将String转换为 JSONObject
                if (result.getInteger("errcode") == 0) {
                    return result;
                } else {
                    System.out.println("request url=" + url + ",return value=");
                    System.out.println(resultStr);
                    int errCode = result.getInteger("errcode");
                    String errMsg = result.getString("errmsg");
                    throw new Exception("error code:"+errCode+", error message:"+errMsg); 
                }
            }
        } catch (IOException e) {
            System.out.println("request url=" + url + ", exception, msg=" + e.getMessage());
            e.printStackTrace();
        } finally {
            if (response != null) try {
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return null;
    }


    /** 2.发起POST请求
     * @desc :
     *  
     * @param url
     * @param data
     * @return
     * @throws Exception JSONObject
     */
    public static JSONObject httpPost(String url, Object data) throws Exception {
        HttpPost httpPost = new HttpPost(url);
        CloseableHttpResponse response = null;
        CloseableHttpClient httpClient = HttpClients.createDefault();
        RequestConfig requestConfig = RequestConfig.custom().
                setSocketTimeout(2000).setConnectTimeout(2000).build();
        httpPost.setConfig(requestConfig);
        httpPost.addHeader("Content-Type", "application/json");

        try {
            StringEntity requestEntity = new StringEntity(JSON.toJSONString(data), "utf-8");
            httpPost.setEntity(requestEntity);

            response = httpClient.execute(httpPost, new BasicHttpContext());

            if (response.getStatusLine().getStatusCode() != 200) {

                System.out.println("request url failed, http code=" + response.getStatusLine().getStatusCode()
                        + ", url=" + url);
                return null;
            }
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                String resultStr = EntityUtils.toString(entity, "utf-8");

                JSONObject result = JSON.parseObject(resultStr);
                if (result.getInteger("errcode") == 0) {
                    //result.remove("errcode");
                    //result.remove("errmsg");
                    return result;
                } else {
                    System.out.println("request url=" + url + ",return value=");
                    System.out.println(resultStr);
                    int errCode = result.getInteger("errcode");
                    String errMsg = result.getString("errmsg");
                    throw new Exception("error code:"+errCode+", error message:"+errMsg); 
                }
            }
        } catch (IOException e) {
            System.out.println("request url=" + url + ", exception, msg=" + e.getMessage());
            e.printStackTrace();
        } finally {
            if (response != null) try {
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return null;
    }


    public static JSONObject uploadMedia(String url, File file) throws Exception {
        HttpPost httpPost = new HttpPost(url);
        CloseableHttpResponse response = null;
        CloseableHttpClient httpClient = HttpClients.createDefault();
        RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(2000).setConnectTimeout(2000).build();
        httpPost.setConfig(requestConfig);

        HttpEntity requestEntity = MultipartEntityBuilder.create().addPart("media",
                new FileBody(file, ContentType.APPLICATION_OCTET_STREAM, file.getName())).build();
        httpPost.setEntity(requestEntity);

        try {
            response = httpClient.execute(httpPost, new BasicHttpContext());

            if (response.getStatusLine().getStatusCode() != 200) {

                System.out.println("request url failed, http code=" + response.getStatusLine().getStatusCode()
                        + ", url=" + url);
                return null;
            }
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                String resultStr = EntityUtils.toString(entity, "utf-8");

                JSONObject result = JSON.parseObject(resultStr);
                if (result.getInteger("errcode") == 0) {
                    // 成功
                    result.remove("errcode");
                    result.remove("errmsg");
                    return result;
                } else {
                    System.out.println("request url=" + url + ",return value=");
                    System.out.println(resultStr);
                    int errCode = result.getInteger("errcode");
                    String errMsg = result.getString("errmsg");
                    throw new Exception("error code:"+errCode+", error message:"+errMsg); 
                }
            }
        } catch (IOException e) {
            System.out.println("request url=" + url + ", exception, msg=" + e.getMessage());
            e.printStackTrace();
        } finally {
            if (response != null) try {
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return null;
    }


    public static JSONObject downloadMedia(String url, String fileDir) throws Exception  {
        HttpGet httpGet = new HttpGet(url);
        CloseableHttpResponse response = null;
        CloseableHttpClient httpClient = HttpClients.createDefault();
        RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(2000).setConnectTimeout(2000).build();
        httpGet.setConfig(requestConfig);

        try {
            HttpContext localContext = new BasicHttpContext();

            response = httpClient.execute(httpGet, localContext);

            RedirectLocations locations = (RedirectLocations) localContext.getAttribute(HttpClientContext.REDIRECT_LOCATIONS);
            if (locations != null) {
                URI downloadUrl = locations.getAll().get(0);
                String filename = downloadUrl.toURL().getFile();
                System.out.println("downloadUrl=" + downloadUrl);
                File downloadFile = new File(fileDir + File.separator + filename);
                FileUtils.writeByteArrayToFile(downloadFile, EntityUtils.toByteArray(response.getEntity()));
                JSONObject obj = new JSONObject();
                obj.put("downloadFilePath", downloadFile.getAbsolutePath());
                obj.put("httpcode", response.getStatusLine().getStatusCode());



                return obj;
            } else {
                if (response.getStatusLine().getStatusCode() != 200) {

                    System.out.println("request url failed, http code=" + response.getStatusLine().getStatusCode()
                            + ", url=" + url);
                    return null;
                }
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    String resultStr = EntityUtils.toString(entity, "utf-8");

                    JSONObject result = JSON.parseObject(resultStr);
                    if (result.getInteger("errcode") == 0) {
                        // 成功
                        result.remove("errcode");
                        result.remove("errmsg");
                        return result;
                    } else {
                        System.out.println("request url=" + url + ",return value=");
                        System.out.println(resultStr);
                        int errCode = result.getInteger("errcode");
                        String errMsg = result.getString("errmsg");
                        throw new Exception("error code:"+errCode+", error message:"+errMsg); 
                    }
                }
            }
        } catch (IOException e) {
            System.out.println("request url=" + url + ", exception, msg=" + e.getMessage());
            e.printStackTrace();
        } finally {
            if (response != null) try {
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return null;
    }



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

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

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

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

评论
登录后参与评论
1 条评论
热度
最新
您好,请问您具体是什么问题,能否留下您的钉钉号,我加一下
您好,请问您具体是什么问题,能否留下您的钉钉号,我加一下
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
Java钉钉开发_02_免登授权(身份验证)
将所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式 (即 key1=value1&key2=value2…)拼接成字符串string1
shirayner
2018/08/10
3.5K0
Java钉钉开发_02_免登授权(身份验证)
日常开发必备神器 HttpUtil 分享(超详细)
最近在工作中需要在后台调用各种上传、下载、以及第三方服务接口,经过研究决定使用 HttpClient,自己封装了一个 HttpClient 工具类,简单轻松的实现get、post、put、delete 以及上传、下载请求,在此分享给大家。
Java极客技术
2022/12/04
3.3K1
极光推送_总结_01_Java实现极光推送
一、代码实现 1.配置类—Env.java package com.ray.jpush.config; /**@desc : 极光推送接入配置 * * @author: shirayner * @date : 2017年9月27日 下午4:57:36 */ public class Env { /** * 1.极光推送后台APPKEY,MASTER_SECRET */ public static final String APP_KEY = "354f
shirayner
2018/08/10
1.1K0
Java钉钉开发_03_通讯录管理之 人员管理 和 部门管理
一、本节要点 1.通讯录权限 ISV(应用服务商)默认无管理通讯录的权限,企业应用默认有所有通讯录权限。 2.数据传输格式—JSON 请参见: Java_数据交换_fastJSON_01_用法入门 二、代码实现 1.HTTP请求工具类—HttpHelper package com.ray.dingtalk.qy.util; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import jav
shirayner
2018/08/10
2.1K0
Java微信公众平台开发_03_消息管理之被动回复消息
上一节,我们启用服务器配置的时候,填写了一个服务器地址(url),如下图,这个url就是回调url,是开发者用来接收微信消息和事件的接口URL 。也就是说,用户在微信公众号中发送的消息会被推送到这个回调url,而我们可以接收用户的消息,并进行回复。
shirayner
2018/08/10
5.5K0
Java微信公众平台开发_03_消息管理之被动回复消息
HttpClient使用不当,服务挂了,是时候系统学习一下了
事件一:联调微信支付接口,用到HttpClient,花时间整理了一番。如果有一篇文章,读一读就可以掌握HttpClient 80%的内容,再有可以直接用的Demo,下次再遇到是不是就可以非常容易集成了?这篇便是这篇文章的目标之一。
程序新视界
2021/12/20
1.8K0
JavaUtil_06_HttpUtil_使用httpclient实现
一、简介 使用 appache 的 httpclient 来实现的 二、源码 package com.ray.weixin.gz.util; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import org.apache.http.Consts; import org.apache.http.Header; import org.
shirayner
2018/08/10
9460
秒懂HTTPS接口(接口测试篇)
在秒懂HTTPS接口(实现篇)中我们通过Java实现了一个简单的HTTPS项目示例,下面我们来测试下我们上面这个HTTPS接口(Java版)
高楼Zee
2019/07/17
3.4K0
秒懂HTTPS接口(接口测试篇)
聊聊nacos的RaftProxy
nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftProxy.java
code4it
2019/10/04
5260
聊聊nacos的RaftProxy
HttpClient技术
HttpClient 一、介绍 简介 坐标 二、应用 发送get请求不带参数 发送get请求带参数 发送post请求不带参数 发送post请求带参数 发送post请求带json类型参数 三、HTTPClient工具类的使用 工具类代码 一、介绍 简介 HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、 功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。 HTTP 协议可能是现在 Inter
时间静止不是简史
2020/07/25
1.8K0
Java微信公众平台开发_06_素材管理
一、本节要点 1.官方文档的media  这个media可以理解为文件,即我们需要以POST方式提交一个文件 2.媒体文件有效期 媒体文件在微信后台保存时间为3天,即3天后media_id失效。 二、
shirayner
2018/08/10
1.9K0
Java微信公众平台开发_06_素材管理
java爬虫带你爬天爬地爬人生,爬新浪
HttpClient是Apache Jakarta Common下的子项目,可以用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本。它的主要功能有:
Java知音
2018/09/26
9680
java爬虫带你爬天爬地爬人生,爬新浪
java爬虫带你爬天爬地爬人生,爬新浪
HttpClient是Apache Jakarta Common下的子项目,可以用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本。它的主要功能有:
好好学java
2018/10/18
1.1K0
Java网络爬虫技术《一》 HttpClient
HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。所以要想爬取网络资源,就要使用Http协议访问网页。
呆呆
2021/10/08
5100
HttpClient 基础知识
HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。HttpClient已经应用在很多的项目中,比如Apache Jakarta上很著名的另外两个开源项目Cactus和HTMLUnit都使用了HttpClient。
Remember_Ray
2020/09/15
6290
【Java爬虫】001-HttpClient学习笔记
HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。
訾博ZiBo
2025/01/06
1030
Java微信公众平台开发_02_启用服务器配置
                     见:【  Java微信公众平台开发_01_本地服务器映射外网  】
shirayner
2018/08/10
8.5K0
Java微信公众平台开发_02_启用服务器配置
Salesforce作为REST Service供java访问
有的时候我们需要在其他平台上获取sfdc端的数据,比如做android项目需要访问sfdc数据,那样就需要Salesforce作为Service,java端通过http获取并对数据进行相关操作。步骤如下:
故久
2019/09/29
7250
Salesforce作为REST Service供java访问
HTTP 请求工具类
坐标 <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.1</version> <classifier>jdk15</classifier> </dependency> 工具类 package com.baomidou.springboot.uti
高大北
2022/06/14
9930
HttpClient-Header、Cookie
内容格式设定为Json格式("content-type", "application/json")、自定义Header("Self-Header", "MySelfHeader")。
wangmcn
2022/07/25
6910
HttpClient-Header、Cookie
相关推荐
Java钉钉开发_02_免登授权(身份验证)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档