获取企业微信打开API上面的数据

根据企业ID和打卡模块的secret获取access_token

打卡传参body为json格式的字符传

创建打卡对象把参数写入,useridlist为list格式。转json

返回数据

企业微信调用代码

package com.westvalley.rrl.wechat.service;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.jfinal.kit.LogKit;
import com.westvalley.ctrl.apprrl.fixedassets.Cache.CacheManager;
import com.westvalley.ctrl.apprrl.fixedassets.bean.Cache;
import com.westvalley.http.HttpXmlClientProxy;
import com.westvalley.rrl.fixedassets.utils.EncryptUtils;
import com.westvalley.rrl.wechat.bean.WechatUser;
import com.westvalley.rrl.wechat.bean.WechatWork;
import com.westvalley.rrl.wechat.prop.WechatProp;
import com.westvalley.rrl.wechat.utils.DateUtils; public class WechatService {
private WechatProp wechatProp = WechatProp.me();
private String corpid;
private String secret; /**
* 打卡
* @return
*/
public String getWorkDate(){
corpid = getWXstr("corpid");
secret = getWXstr("punchCardSecret");
String accessTokenVal = isCache("WORKACCESSTOKEN"); //查询打卡记录
//List<Record> users = Db.find("select id from hrmresource where status=0");
List<String> useridlist = getAddressBook();
LogKit.error("users---->"+useridlist);
String starttime = DateUtils.getSECBeginTimes(new Date());
String endtime = DateUtils.getSECEndTimes(new Date());
WechatWork wechatWork = new WechatWork();
wechatWork.setOpencheckindatatype("3");
wechatWork.setStarttime(starttime);
wechatWork.setEndtime(endtime);
wechatWork.setUseridlist(useridlist);
String body = JSON.toJSONString(wechatWork);
LogKit.error("users-body--->"+body);
String work = HttpXmlClientProxy.httpPost("https://qyapi.weixin.qq.com/cgi-bin/checkin/getcheckindata?access_token="+accessTokenVal+"", body);
LogKit.error("work------------->"+work);
return work;
} /**
* 通讯录
* @return
*/
public List<String> getAddressBook(){
corpid = getWXstr("corpid");
secret = getWXstr("addressBookSecret");
String accessTokenVal = isCache("ADDRESSBOOK");
String body = HttpXmlClientProxy.httpGet("https://qyapi.weixin.qq.com/cgi-bin/user/simplelist?access_token="+accessTokenVal+"&department_id=1&fetch_child=1");
String userlist = JSON.parseObject(body).getString("userlist");
@SuppressWarnings("unchecked")
List<WechatUser> wechatUsers = JSONObject.parseArray((userlist), WechatUser.class);
List<String> lists = new ArrayList<String>();
for(int i=0 ; i < wechatUsers.size() ; i++){
lists.add(wechatUsers.get(i).getUserid());
}
return lists;
} /**
* 获取配置的参数
* @param key
* @return
*/
public String getWXstr(String key){
return wechatProp.getPropValue(key);
} /**
* AccessToken进行判断获取
* @param secretKey
* @return
*/
public String isCache(String secretKey){
Cache cacheAccessToken = CacheManager.getCacheInfo(secretKey);
LogKit.error("获取企业微信打卡的cacheAccessToken------------>"+JSON.toJSONString(cacheAccessToken));
String accessTokenVal = "";
if(cacheAccessToken == null){
accessTokenVal = getAccessToken();
CacheManager.putCacheInfo(secretKey, accessTokenVal, 1000*60*60*2, false);
}else{
if(cacheAccessToken.getValue() == null){
accessTokenVal = getAccessToken();
CacheManager.putCacheInfo(secretKey, accessTokenVal, 1000*60*60*2, false);
}else{
accessTokenVal = cacheAccessToken.getValue().toString();
}
}
return accessTokenVal;
} /**
* 获取企业微信的AccessToken
* @return
*/
public String getAccessToken(){
String body = HttpXmlClientProxy.httpGet("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid="+corpid+"&corpsecret="+secret);
return JSON.parseObject(body).getString("access_token");
} /**
* 获取企业微信的jsapiTicket
* @param accessToken
* @return
*/
public String getJsapiTicket(String accessToken){
String body = HttpXmlClientProxy.httpGet("https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token="+accessToken);
return JSON.parseObject(body).getString("ticket");
} /**
* 签名加密
* @param jsapiTicket
* @return
*/
public String signature(String jsapiTicket,String nowUrl){
try {
String noncestr = UUID.randomUUID().toString().replace("-", "").substring(0, 16);
String timestamp=String.valueOf(new Date().getTime() / 1000);
nowUrl = URLDecoder.decode(nowUrl, "UTF-8");
String appendStr = "jsapi_ticket="+jsapiTicket+"&noncestr="+noncestr+"&timestamp="+timestamp+"&url="+nowUrl;
String signature = EncryptUtils.SHA1(appendStr);
Map<String,Object> map = new HashMap<String,Object>();
map.put("noncestr",noncestr);
map.put("timestamp",timestamp);
map.put("signature",signature);
map.put("appid", corpid);
String shaSignature = JSON.toJSONString(map);
LogKit.error("获取企业微信的Signature"+shaSignature);
return shaSignature;
} catch (UnsupportedEncodingException e) {
return e.getMessage();
}
}
}

wx

开发企业微信打卡API笔记的更多相关文章

  1. 微信公众号开发笔记2(nodejs)

    本篇主要记录调用微信各种api和功能实现 一.始于access_token 无论调用微信的什么api,都需要一个查询参数,就是我们每隔1小时或者2小时获取的access_token,笔记1中已经保证了 ...

  2. nodejs 开发企业微信第三方应用入门教程

    最近公司要开发企业微信端的 Worktile,以前做的是企业微信内部应用,所以只适用于私有部署客户,而对于公有云客户就无法使用,所有就准备开发企业微信的第三方应用,本文主要介绍在调研阶段遇到的山珍海味 ...

  3. Python实现微信刷卡支付(条码支付)MicroPay

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7686765.html 一:资料阅读 场景介绍:https://pay.weixin.qq.com/wiki/d ...

  4. 微信小程序练习笔记(更新中。。。)

    微信小程序练习笔记 微信小程序的练习笔记,用来整理思路的,文档持续更新中... 案例一:实现行的删除和增加操作  test.js // 当我们在特定方法中创建对象或者定义变量给与初始值的时候,它是局部 ...

  5. 微信公众号开发笔记(C#)

    这篇文章还不错,使用  .net , 对微信用户的想公众号发送的文字进行回复.比较简单,自己可以修改更复杂的回复. 微信公众号开发笔记(C#) 原文地址 需求分析 根据用户在微信上发送至价值中国公众号 ...

  6. Android微信支付SDK开发笔记

    一.准备工作 1.开发平台及SDK下载 微信开放平台 https://open.weixin.qq.com 下载SDK 微信支付Demo下载 http://pay.weixin.qq.com/wiki ...

  7. ID卡学习笔记

    前言: 我也来篇关于当时学习ID卡的笔记.前段时间小区装门禁.一个钮扣型的ID卡就要30块.非常黑心.因为其ID卡的成本也就是1块钱以下.因此我也加入到这方面的研究.用来模拟ID卡的T5557卡成本2 ...

  8. 集成shareSDK的微信、QQ API导致cocoaPods找不到类symbol问题的解决方法

    因为shareSDK的微信和QQ API都只支持32位的,而cocoaPods默认要支持64位的,所以如果在工程中导入这两个API会出问题. 解决方法我就不转载啦,原文在这里: http://blog ...

  9. 微信小程序开发笔记

    前言: 因为前段时间一直在做关于微信小程序方面的项目,作为一名后端的攻城狮而言做一些简单的前端页面数据操作和管理还是比较容易快上手的,当然前提是要理解微信小程序的基本语法和请求原理.该篇博客主要记录的 ...

随机推荐

  1. for 循环,如果判断那里用到了一个函数,每次循环一次都会调用一次函数,如图

    但用高级for,可以不用每次都调用方法

  2. linux 启动流程

    启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬 ...

  3. 与TIME_WAIT相关的几个内核参数

    问题 公司用浏览器访问线上服务一会失败一会成功,通过ssh连接服务器排查时发现ssh也是这样: 检查 抓包后发现建立连接的请求已经到了服务器,但它没有响应: 纠结了好久,后来在腾讯云技术支持及查了相关 ...

  4. 自制操作系统Antz(12)——承上启下

    我已经规范了系统代码风格,类似于按照linux分包,把各部分功能区分开了 Antz系统更新地址 Linux内核源码分析地址 Github项目地址 在之前的工作中,AntzOS已经从单调的界面,变得逐渐 ...

  5. MySQL触发器在建立时,报语法错的问题

    delimiter $$ create trigger trg_delete_on_users before DELETE on users for each row begin delete fro ...

  6. 工作中常用的 Linux 命令

    awk 示例: env变量值如下,需要获得pkg_url的链接值: {"name": "michael", "sex": "mal ...

  7. git忽略对已入库文件的修改

    项目开发过程中,会遇到本地配置文件每个开发人员不同的情况,但如果遇到类似数据库配置这种最终需要加入 git 版本控制的配置,则会陷入两难境地.要么不跟踪,要么有人提交后其他人同步下来必须手动修改,非常 ...

  8. postgresql之json操作

    --string 转 json select '{"Items":[{"Id":1,"InitStartDate":"2018-0 ...

  9. Python链接Oracle数据库

    说明:以下所需安装的所有软件版本必须跟系统一致,即系统是64位,软件就得是64位,否则会出现各种链接报错的情况. 现以64位系统,python 3.6.5  64位为例: (一)安装cx_Oracle ...

  10. Java基本语法(一)

    1,Java中命名规则与规范 命名规则是我们必须遵守的约定: 1,Java中需要命名的地方(我们称之为标识符),可以26个英文字母(不区分大小写),0-9的数字,_和$等组成,不能包含特殊字符(#), ...