java调用企微api详解

阅读: 评论:0

java调用企微api详解

java调用企微api详解

添加依赖

<!-- json解析器 --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.41</version></dependency><!--日志框架 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.10</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.10</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><!-- httpclient --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.5</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpcore</artifactId><version>4.4.9</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency>

编写HttpClient工具类(POST/GET)

package com.dehui.utils;import com.alibaba.fastjson.JSONObject;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.fig.RequestConfig;
import org.apache.hods.CloseableHttpResponse;
import org.apache.hods.HttpGet;
import org.apache.hods.HttpPost;
import org.apache.http.client.utils.HttpClientUtils;
import org.ity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.IOException;public class HttpClientHelp {private static Logger logger = Logger(HttpClientUtils.class); // 日志记录private static RequestConfig requestConfig = null;static {// 设置请求和传输超时时间requestConfig = RequestConfig.custom().setSocketTimeout(2000).setConnectTimeout(2000).build();}/*** 发送get请求工具类* @param url  url* @return  String  接口返回数据*/public static String sendGet(String url) {//因为httpclient是一个接口不能直接进行实例化,需用其实现子类CloseableHttpClient client = ateDefault();//准备get请求定义一个httpget实现get请求:HttpGet httpget = new HttpGet(url);HttpResponse response = null;try {//获取接口返回数据对象response = ute(httpget);} catch (Exception e) {e.printStackTrace();}int status = StatusLine().getStatusCode();HttpEntity entity = Entity();String result = null;try {result = String(entity);} catch (IOException e) {e.printStackTrace();}return result;}/*** post请求传输json参数* @param url       url地址* @param Param 参数* @return*/public static String sendPost(String url, String Param) {// post请求返回结果CloseableHttpClient httpClient = ateDefault();String result = null;HttpPost httpPost = new HttpPost(url);// 设置请求和传输超时时间httpPost.setConfig(requestConfig);httpPost.setHeader("X-Requested-With","X");try {if (null != Param) {// 解决中文乱码问题StringEntity entity = new String(), "utf-8");entity.setContentEncoding("UTF-8");entity.setContentType("application/json");httpPost.setEntity(entity);}CloseableHttpResponse response = ute(httpPost);// 请求发送成功,并得到响应if (StatusLine().getStatusCode() == HttpStatus.SC_OK ||StatusLine().getStatusCode() == HttpStatus.SC_CREATED ||StatusLine().getStatusCode() == HttpStatus.SC_ACCEPTED ||StatusLine().getStatusCode() == HttpStatus.SC_NO_CONTENT) {try {// 读取服务器返回过来的json字符串数据result = Entity(), "utf-8");// 把json字符串转换成json对象//jsonResult = JSONObject.parseObject(str);} catch (Exception e) {("post请求提交失败:" + url, e);}}} catch (IOException e) {("post请求提交失败:" + url, e);} finally {leaseConnection();}return result;}/*** post请求传输String参数 例如:name=Jack&sex=1&type=2* Content-type:application/x-www-form-urlencoded** @param url      url地址* @param strParam 参数* @return*/public static String httpPost(String url, String strParam) {// post请求返回结果CloseableHttpClient httpClient = ateDefault();String result = "";HttpPost httpPost = new HttpPost(url);httpPost.setConfig(requestConfig);try {if (null != strParam) {// 解决中文乱码问题StringEntity entity = new StringEntity(strParam, "utf-8");entity.setContentEncoding("UTF-8");entity.setContentType("application/x-www-form-urlencoded");httpPost.setEntity(entity);}CloseableHttpResponse response = ute(httpPost);// 请求发送成功,并得到响应if (StatusLine().getStatusCode() == HttpStatus.SC_OK) {try {// 读取服务器返回过来的json字符串数据result = Entity(), "utf-8");} catch (Exception e) {("post请求提交失败:" + url, e);}}} catch (IOException e) {("post请求提交失败:" + url, e);} finally {leaseConnection();}return result;}
}

编写调用企微API方法类

package com.dehui.utils;import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
ParseException;
import java.util.Formatter;/*** * 1.获取accessToken* 2.获取jsapi中的ticket* 3.生成jsapiz中的鉴权sign* 4.根据传入的临时code获取用户的基本信息,入userinfo* 5.(ISV版本)根据userid获取详细用户信息* * @author lnexin**/
public class AuthHelper {// 企微api相关static String TOKEN_URL = "";static String TICKET_URL = "";static String USER_INFO_URL = "";static String USER_ALL_URL = "";static String MESSAGE_URL = "";// 调整到1小时50分钟public static final long cacheTime = 1000 * 60 * 55 * 2;private static String ACCESS_TOKEN = null;private static String JSAPI_TICKET = null;private static long LAST_TIME = 0;/*** * @param corpId* @param corpSecert* @return 与企微服务器请求生成的accessToken*/public static String getAccessToken(String corpId, String corpSecert) {long curTime = System.currentTimeMillis();long differ = curTime - LAST_TIME;if (ACCESS_TOKEN != null && differ < cacheTime)return ACCESS_TOKEN;ACCESS_TOKEN = requestAccessToken(corpId, corpSecert);LAST_TIME = curTime;return ACCESS_TOKEN;}/**** @param accessToken* @return 一个用于js鉴权的ticket*/public static String getJsapiTicket(String accessToken) {long curTime = System.currentTimeMillis();long differ = curTime - LAST_TIME;if (JSAPI_TICKET != null && differ < cacheTime) {return JSAPI_TICKET;}JSAPI_TICKET = requestJsapiTicket(accessToken);return JSAPI_TICKET;}/*** 根据传入的相关参数生成sign* * @param ticket* @param nonceStr* @param timeStamp* @param url* @return*/public static String sign(String ticket, String nonceStr, long timeStamp, String url) {StringBuffer plain = new StringBuffer();plain.append("jsapi_ticket=").append(ticket);plain.append("&noncestr=").append(nonceStr);plain.append("&timestamp=").append(String.valueOf(timeStamp));plain.append("&url=").append(url);MessageDigest sha;try {sha = Instance("SHA-1");set();sha.String().getBytes("UTF-8"));return bytesToHex(sha.digest());} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();}return null;}private static String requestAccessToken(String corpId, String corpSecert) {StringBuffer url = new StringBuffer(TOKEN_URL);url.append("?corpid=").append(corpId);url.append("&corpsecret=").append(corpSecert);String result = null;try {result = HttpClientHelp.String());} catch (Exception e) {result = sult("-1","请求accessTokenc出错!corpid:" + corpId + ",corpsecert:" + corpSecert + "异常信息:" + e,"");}return result;}private static String requestJsapiTicket(String accessToken) {StringBuffer url = new StringBuffer(TICKET_URL);url.append("?access_token=").append(accessToken);String result = null;try {result = HttpClientHelp.String());} catch (Exception e) {result = sult("-1", "请求JsapiTicket出错!accessToken:" + accessToken + "异常信息:" + e,"");}return result;}private static String bytesToHex(byte[] hash) {Formatter formatter = new Formatter();for (byte b : hash) {formatter.format("%02x", b);}String result = String();formatter.close();return result;}/*** 获取用户信息* * @param code*            用户相应的临时code* @param accessToken*            根据相应corpid和corpsecret生成的access_token* @return 用户ID等相关信息*/public static String getUserInfo(String code, String accessToken) {StringBuffer url = new StringBuffer(USER_INFO_URL);url.append("?access_token=").append(accessToken);url.append("&code=").append(code);String result = null;try {result = HttpClientHelp.String());} catch (Exception e) {result = sult("-1", "请求User信息出错!code:" + code + "异常信息:" + e,"");}return result;}/*** 获取用户详细信息* @param userid 在某个corpid下的唯一用户userid* @param accessToken 据相应corpid和corpsecret生成的access_token* @return*/public static String getUser(String userid, String accessToken) {StringBuffer url = new StringBuffer(USER_ALL_URL);url.append("?access_token=").append(accessToken);url.append("&userid=").append(userid);String result = null;try {result = HttpClientHelp.String());} catch (Exception e) {result = sult("-1", "请求User信息出错!userid:" + userid + "异常信息:","" );}return result;}/*** @param accessToken* @param param 封装参数* @return  企微发送消息* @throws ParseException*/public static String  sendMessage(String accessToken,String param){StringBuffer url = new StringBuffer(MESSAGE_URL);url.append("?access_token=").append(accessToken);String result = null;try {result = HttpClientHelp.String(),param);} catch (Exception e) {result = sult("-1", "发送消息出错!param:" + param + "异常信息:","" );}return result;}
}

编写测试类测试

package st;import com.alibaba.fastjson.JSONObject;
import com.dehui.utils.AuthHelper;SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;/*** @Author: hjz* @Date: 2020/5/29 13:03* @Description:*/
public class TestDemo {public static void main(String[] args) {String corpId  ="用自己的";String corpSecert ="用自己的";//下边的参数也用自己企微对应的//企微官方API地址://测试获取AccessTokenString result = AccessToken(corpId, corpSecert);System.out.println("result: "+result);JSONObject jsStr = JSONObject.parseObject(result);String accessToken = String("access_token");//测试发送企微消息String FileName = "新建文件夹.txt";//封装参数JSONObject template = new JSONObject();Map<String, String> map = new HashMap<String,String>();Date currentTime = new Date();//改变输出格式(自己想要的格式)SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");//得到字符串时间String time = formatter.format(currentTime);map.put("title","文件共享提醒");map.put("description","<div class="gray">"+time+"</div> <div class="highlight">XXX分享给你一个文件</div> <div class="gray">"+FileName+"</div>");map.put("url","www.baidu");map.put("btntxt","详情");template.put("touser", "HeJianZhuang");template.put("msgtype","textcard");template.put("agentid","1000002");template.put("textcard",map);String sendResult = AuthHelper.sendMessage(accessToken, String());System.out.println("sendResult:"+sendResult);}
}

*如观看小伙伴有什么问题随时提问 *

本文发布于:2024-01-28 12:33:26,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17064164097446.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:详解   java   api
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23