开启左侧

java调用企微api详解

[复制链接]
在线会员 wuCPNC8 发表于 2022-12-30 15:10:23 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
增加依靠
  1. <!-- 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)
  1. 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.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.utils.HttpClientUtils;import org.apache.http.entity.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;publicclassHttpClientHelp{privatestatic Logger logger = LoggerFactory.getLogger(HttpClientUtils.class);// 日记记载privatestatic RequestConfig requestConfig = null;static{// 树立恳求战传输超时时间
  2.         requestConfig = RequestConfig.custom().setSocketTimeout(2000).setConnectTimeout(2000).build();}/**
  3.      * 收收get恳求东西类
  4.      * @param url  url
  5.      * @return  String  交心前去数据
  6.      */publicstatic String sendGet(String url){//因为httpclient是一个交心不克不及间接截至真例化,需用其完毕子类
  7.         CloseableHttpClient client = HttpClients.createDefault();//准备get恳求界说一个httpget完毕get恳求:
  8.         HttpGet httpget =newHttpGet(url);
  9.         HttpResponse response = null;try{//获得交心前去数据工具
  10.             response = client.execute(httpget);}catch(Exception e){
  11.             e.printStackTrace();}int status = response.getStatusLine().getStatusCode();
  12.         HttpEntity entity = response.getEntity();
  13.         String result = null;try{
  14.             result = EntityUtils.toString(entity);}catch(IOException e){
  15.             e.printStackTrace();}return result;}/**
  16.      * post恳求传输json参数
  17.      * @param url       url地点
  18.      * @param Param 参数
  19.      * @return
  20.      */publicstatic String sendPost(String url, String Param){// post恳求前去成果
  21.         CloseableHttpClient httpClient = HttpClients.createDefault();
  22.         String result = null;
  23.         HttpPost httpPost =newHttpPost(url);// 树立恳求战传输超时时间
  24.         httpPost.setConfig(requestConfig);
  25.         httpPost.setHeader("X-Requested-With","X");try{if(null != Param){//处置 华文治码成就
  26.                 StringEntity entity =newStringEntity(Param.toString(),"utf-8");
  27.                 entity.setContentEncoding("UTF-8");
  28.                 entity.setContentType("application/json");
  29.                 httpPost.setEntity(entity);}
  30.             CloseableHttpResponse response = httpClient.execute(httpPost);// 恳求收收胜利,并获得照应if(response.getStatusLine().getStatusCode()== HttpStatus.SC_OK ||
  31.                     response.getStatusLine().getStatusCode()== HttpStatus.SC_CREATED ||
  32.                         response.getStatusLine().getStatusCode()== HttpStatus.SC_ACCEPTED ||
  33.                              response.getStatusLine().getStatusCode()== HttpStatus.SC_NO_CONTENT){try{// 读与效劳器前去过去的json字符串数据
  34.                     result = EntityUtils.toString(response.getEntity(),"utf-8");// 把json字符串变换成json工具//jsonResult = JSONObject.parseObject(str);}catch(Exception e){
  35.                     logger.error("post恳求提接失利:"+ url, e);}}}catch(IOException e){
  36.             logger.error("post恳求提接失利:"+ url, e);}finally{
  37.             httpPost.releaseConnection();}return result;}/**
  38.      * post恳求传输String参数 比方:name=Jack&sex=1&type=2
  39.      * Content-type:application/x-www-form-urlencoded
  40.      *
  41.      * @param url      url地点
  42.      * @param strParam 参数
  43.      * @return
  44.      */publicstatic String httpPost(String url, String strParam){// post恳求前去成果
  45.         CloseableHttpClient httpClient = HttpClients.createDefault();
  46.         String result ="";
  47.         HttpPost httpPost =newHttpPost(url);
  48.         httpPost.setConfig(requestConfig);try{if(null != strParam){//处置 华文治码成就
  49.                 StringEntity entity =newStringEntity(strParam,"utf-8");
  50.                 entity.setContentEncoding("UTF-8");
  51.                 entity.setContentType("application/x-www-form-urlencoded");
  52.                 httpPost.setEntity(entity);}
  53.             CloseableHttpResponse response = httpClient.execute(httpPost);// 恳求收收胜利,并获得照应if(response.getStatusLine().getStatusCode()== HttpStatus.SC_OK){try{// 读与效劳器前去过去的json字符串数据
  54.                     result = EntityUtils.toString(response.getEntity(),"utf-8");}catch(Exception e){
  55.                     logger.error("post恳求提接失利:"+ url, e);}}}catch(IOException e){
  56.             logger.error("post恳求提接失利:"+ url, e);}finally{
  57.             httpPost.releaseConnection();}return result;}}
复造代码
编辑挪用企微API办法类
  1. package com.dehui.utils;import java.io.UnsupportedEncodingException;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.text.ParseException;import java.util.Formatter;/**
  2. *
  3. * 1.获得accessToken
  4. * 2.获得jsapi中的ticket
  5. * 3.天生jsapiz中的鉴权sign
  6. * 4.按照传进的临时code获得用户的根本疑息,进userinfo
  7. * 5.(ISV版原)按照userid获得具体用户疑息
  8. *
  9. * @author lnexin
  10. *
  11. */publicclassAuthHelper{// 企微api相干static String TOKEN_URL ="https://qyapi.weixin.qq.com/cgi-bin/gettoken";static String TICKET_URL ="https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket";static String USER_INFO_URL ="https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo";static String USER_ALL_URL ="https://qyapi.weixin.qq.com/cgi-bin/user/get";static String MESSAGE_URL ="https://qyapi.weixin.qq.com/cgi-bin/message/send";// 调解到1小时50分钟publicstaticfinallong cacheTime =1000*60*55*2;privatestatic String ACCESS_TOKEN = null;privatestatic String JSAPI_TICKET = null;privatestaticlong LAST_TIME =0;/**
  12.          *
  13.          * @param corpId
  14.          * @param corpSecert
  15.          * @return 取企微效劳器恳求天生的accessToken
  16.          */publicstatic String getAccessToken(String corpId, String corpSecert){long curTime = System.currentTimeMillis();long differ = curTime - LAST_TIME;if(ACCESS_TOKEN != null && differ < cacheTime)return ACCESS_TOKEN;
  17.                 ACCESS_TOKEN =requestAccessToken(corpId, corpSecert);
  18.                 LAST_TIME = curTime;return ACCESS_TOKEN;}/**
  19.          *
  20.          * @param accessToken
  21.          * @return 一个用于js鉴权的ticket
  22.          */publicstatic String getJsapiTicket(String accessToken){long curTime = System.currentTimeMillis();long differ = curTime - LAST_TIME;if(JSAPI_TICKET != null && differ < cacheTime){return JSAPI_TICKET;}
  23.                 JSAPI_TICKET =requestJsapiTicket(accessToken);return JSAPI_TICKET;}/**
  24.          *依据 传进的相干参数天生sign
  25.          *
  26.          * @param ticket
  27.          * @param nonceStr
  28.          * @param timeStamp
  29.          * @param url
  30.          * @return
  31.          */publicstatic String sign(String ticket, String nonceStr,long timeStamp, String url){
  32.                 StringBuffer plain =newStringBuffer();
  33.                 plain.append("jsapi_ticket=").append(ticket);
  34.                 plain.append("&noncestr=").append(nonceStr);
  35.                 plain.append("&timestamp=").append(String.valueOf(timeStamp));
  36.                 plain.append("&url=").append(url);
  37.                 MessageDigest sha;try{
  38.                         sha = MessageDigest.getInstance("SHA-1");
  39.                         sha.reset();
  40.                         sha.update(plain.toString().getBytes("UTF-8"));returnbytesToHex(sha.digest());}catch(NoSuchAlgorithmException e){
  41.                         e.printStackTrace();}catch(UnsupportedEncodingException e){
  42.                         e.printStackTrace();}return null;}privatestatic String requestAccessToken(String corpId, String corpSecert){
  43.                 StringBuffer url =newStringBuffer(TOKEN_URL);
  44.                 url.append("?corpid=").append(corpId);
  45.                 url.append("&corpsecret=").append(corpSecert);
  46.                 String result = null;try{
  47.                         result = HttpClientHelp.sendGet(url.toString());}catch(Exception e){
  48.                         result = ReturnUtil.result("-1","恳求accessTokenc堕落!corpid:"+ corpId +",corpsecert:"+ corpSecert +"非常疑息:"+ e,"");}return result;}privatestatic String requestJsapiTicket(String accessToken){
  49.                 StringBuffer url =newStringBuffer(TICKET_URL);
  50.                 url.append("?access_token=").append(accessToken);
  51.                 String result = null;try{
  52.                         result = HttpClientHelp.sendGet(url.toString());}catch(Exception e){
  53.                         result = ReturnUtil.result("-1","恳求JsapiTicket堕落!accessToken:"+ accessToken +"非常疑息:"+ e,"");}return result;}privatestatic String bytesToHex(byte[] hash){
  54.                 Formatter formatter =newFormatter();for(byte b : hash){
  55.                         formatter.format("%02x", b);}
  56.                 String result = formatter.toString();
  57.                 formatter.close();return result;}/**
  58.          * 获得用户疑息
  59.          *
  60.          * @param code
  61.          *            用户响应的临时code
  62.          * @param accessToken
  63.          *            按照响应corpid战corpsecret天生的access_token
  64.          * @return 用户ID等相干疑息
  65.          */publicstatic String getUserInfo(String code, String accessToken){
  66.                 StringBuffer url =newStringBuffer(USER_INFO_URL);
  67.                 url.append("?access_token=").append(accessToken);
  68.                 url.append("&code=").append(code);
  69.                 String result = null;try{
  70.                         result = HttpClientHelp.sendGet(url.toString());}catch(Exception e){
  71.                         result = ReturnUtil.result("-1","恳求User疑息堕落!code:"+ code +"非常疑息:"+ e,"");}return result;}/**
  72.          * 获得用户具体疑息
  73.          * @param userid 正在某个corpid下的唯一用户userid
  74.          * @param accessToken 据响应corpid战corpsecret天生的access_token
  75.          * @return
  76.          */publicstatic String getUser(String userid, String accessToken){
  77.                 StringBuffer url =newStringBuffer(USER_ALL_URL);
  78.                 url.append("?access_token=").append(accessToken);
  79.                 url.append("&userid=").append(userid);
  80.                 String result = null;try{
  81.                         result = HttpClientHelp.sendGet(url.toString());}catch(Exception e){
  82.                         result = ReturnUtil.result("-1","恳求User疑息堕落!userid:"+ userid +"非常疑息:","");}return result;}/**
  83.          * @param accessToken
  84.          * @param param 启拆参数
  85.          * @return  企微收收消息
  86.          * @throws ParseException
  87.          */publicstatic String  sendMessage(String accessToken,String param){
  88.                 StringBuffer url =newStringBuffer(MESSAGE_URL);
  89.                 url.append("?access_token=").append(accessToken);
  90.                 String result = null;try{
  91.                         result = HttpClientHelp.sendPost(url.toString(),param);}catch(Exception e){
  92.                         result = ReturnUtil.result("-1","收收消息堕落!param:"+ param +"非常疑息:","");}return result;}}
复造代码
编辑尝试类尝试
  1. package com.dehui.test;import com.alibaba.fastjson.JSONObject;import com.dehui.utils.AuthHelper;import java.text.SimpleDateFormat;import java.util.Date;import java.util.HashMap;import java.util.Map;/**
  2. * @Author: hjz
  3. * @Date: 2020/5/29 13:03
  4. * @Description:
  5. */publicclassTestDemo{publicstaticvoidmain(String[] args){
  6.             String corpId  ="用自己的";
  7.             String corpSecert ="用自己的";//下边的参数也用自己企微对于应的//企微民间API地点:https://work.weixin.qq.com/api/doc/90001/90143/91201//尝试获得AccessToken
  8.         String result = AuthHelper.getAccessToken(corpId, corpSecert);
  9.         System.out.println("result: "+result);
  10.         JSONObject jsStr = JSONObject.parseObject(result);
  11.         String accessToken = jsStr.getString("access_token");//尝试收收企微消息
  12.         String FileName ="新修文献夹.txt";//启拆参数
  13.         JSONObject template =newJSONObject();
  14.         Map<String, String> map =newHashMap<String,String>();
  15.         Date currentTime =newDate();//改动输出格局(自己念要的格局)
  16.         SimpleDateFormat formatter =newSimpleDateFormat("yyyy-MM-dd");//获得字符串时间
  17.         String time = formatter.format(currentTime);
  18.         map.put("title","文献同享提醒");
  19.         map.put("description","<div class="gray">"+time+"</div> <div class="highlight">XXX分享给您一个文献</div> <div class="gray">"+FileName+"</div>");
  20.         map.put("url","www.百度.com");
  21.         map.put("btntxt","概略");
  22.         template.put("touser","HeJianZhuang");
  23.         template.put("msgtype","textcard");
  24.         template.put("agentid","1000002");
  25.         template.put("textcard",map);
  26.         String sendResult = AuthHelper.sendMessage(accessToken, template.toString());
  27.         System.out.println("sendResult:"+sendResult);}}
复造代码
*如寓目小同伴有甚么成就随时提问 *
您需要登录后才可以回帖 登录 | 立即注册 qq_login

本版积分规则

发布主题
阅读排行更多+
用专业创造成效
400-778-7781
周一至周五 9:00-18:00
意见反馈:server@mailiao.group
紧急联系:181-67184787
ftqrcode

扫一扫关注我们

Powered by 职贝云数A新零售门户 X3.5© 2004-2025 职贝云数 Inc.( 蜀ICP备2024104722号 )