获取企业微信打开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. 使用session和cookie实现用户登录:一个登录页面,一个servlet,一个登录成功页面

    文件目录 1.登录页面 <%@ page language="java" contentType="text/html; charset=utf-8" p ...

  2. 使用Semaphore同步,经典银行账户问题

    1.新建Account类,使用Semaphore同步增加和减少金额方法. package com.xkzhangsan.semaphorepack.bank; import java.util.con ...

  3. poj3984迷宫问题(DFS广搜)

    迷宫问题 Time Limit: 1000MSMemory Limit: 65536K Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, ...

  4. @Override报错的处理

    有时候我们从SVN导的项目,jre和jar包都没问题,但是就会出如下图的错误: xi 点击红叉,显示错误信息如下: 点击工具里面的window-->preferences-->java-- ...

  5. 2018年-2019年第二学期第三周C#学习个人总结

    在第三周,我们又开始了C#的进一步学习,学习的范围是从4.8static关键字到4.11对象初始化器.在4.8static关键字我学到了静态字段,静态属性,静态方法,静态类,静态构造方法单例模式,嵌套 ...

  6. ip xfrm命令是做什么的?

    答: 设置xfrm.xfrm(transform configuration)是一个IP框架,用来转换数据包的格式,也就是使用算法来加密数据包,该框架用作IPsec协议的一部分 ip xfrm sta ...

  7. Spark机器学习基础二

    无监督学习 0.K-means from __future__ import print_function from pyspark.ml.clustering import KMeans #from ...

  8. MySql中not in的优化

    最近项目上用select查询时使用到了not in来排除用不到的主键id一开始使用的sql如下: select s.SORT_ID, s.SORT_NAME, s.SORT_STATUS, s.SOR ...

  9. 解决win10 蓝牙设备只能配对无法连接 ,并且删除设备无效的问题

    系统环境: win10家庭版 dell本 问题描述:蓝牙设备(比如蓝牙键盘,蓝牙音箱)出现无法连接的情况,打算删除已配对的设备,再重新配对连接.但删除设备后重启蓝牙,那些原本被删除的设备又自动配对上, ...

  10. cron表达式总结

    cron表达式用于配置cronTrigger的实例,在定时任务中会用到cron表达式.cron表达式实际上是由七个子表达式组成.这些表达式之间用空格分隔. 可通过工具校验:http://cron.qq ...