开发企业微信打卡API笔记
获取企业微信打开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+"×tamp="+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笔记的更多相关文章
- 微信公众号开发笔记2(nodejs)
本篇主要记录调用微信各种api和功能实现 一.始于access_token 无论调用微信的什么api,都需要一个查询参数,就是我们每隔1小时或者2小时获取的access_token,笔记1中已经保证了 ...
- nodejs 开发企业微信第三方应用入门教程
最近公司要开发企业微信端的 Worktile,以前做的是企业微信内部应用,所以只适用于私有部署客户,而对于公有云客户就无法使用,所有就准备开发企业微信的第三方应用,本文主要介绍在调研阶段遇到的山珍海味 ...
- Python实现微信刷卡支付(条码支付)MicroPay
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7686765.html 一:资料阅读 场景介绍:https://pay.weixin.qq.com/wiki/d ...
- 微信小程序练习笔记(更新中。。。)
微信小程序练习笔记 微信小程序的练习笔记,用来整理思路的,文档持续更新中... 案例一:实现行的删除和增加操作 test.js // 当我们在特定方法中创建对象或者定义变量给与初始值的时候,它是局部 ...
- 微信公众号开发笔记(C#)
这篇文章还不错,使用 .net , 对微信用户的想公众号发送的文字进行回复.比较简单,自己可以修改更复杂的回复. 微信公众号开发笔记(C#) 原文地址 需求分析 根据用户在微信上发送至价值中国公众号 ...
- Android微信支付SDK开发笔记
一.准备工作 1.开发平台及SDK下载 微信开放平台 https://open.weixin.qq.com 下载SDK 微信支付Demo下载 http://pay.weixin.qq.com/wiki ...
- ID卡学习笔记
前言: 我也来篇关于当时学习ID卡的笔记.前段时间小区装门禁.一个钮扣型的ID卡就要30块.非常黑心.因为其ID卡的成本也就是1块钱以下.因此我也加入到这方面的研究.用来模拟ID卡的T5557卡成本2 ...
- 集成shareSDK的微信、QQ API导致cocoaPods找不到类symbol问题的解决方法
因为shareSDK的微信和QQ API都只支持32位的,而cocoaPods默认要支持64位的,所以如果在工程中导入这两个API会出问题. 解决方法我就不转载啦,原文在这里: http://blog ...
- 微信小程序开发笔记
前言: 因为前段时间一直在做关于微信小程序方面的项目,作为一名后端的攻城狮而言做一些简单的前端页面数据操作和管理还是比较容易快上手的,当然前提是要理解微信小程序的基本语法和请求原理.该篇博客主要记录的 ...
随机推荐
- Mask rcn nanchor部分理解
Anchors Mask 生成锚框本质与SSD一样中心点个数等于特征层像素数框体生成围绕中心点Bbox的坐标是要归一化到0~1之间的,都是相对于输入图片的大小.基本生成方式:H乘np.sqrt(anc ...
- 登录获取session
- PTA编程总结2—币值转换
7-1 币值转换 (20 分) 输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式.如23108元,转换后变成"贰万叁仟壹百零捌"元.为了简 ...
- Python中的反转字符串问题
按单词反转字符串是一道很常见的面试题.在Python中实现起来非常简单. def reverse_string_by_word(s): lst = s.split() # split by blank ...
- mybatis第一次搭建出错
### Error building SqlSession. ### The error may exist in com/test/pojo/UserMapper.xml ### Cause: or ...
- 关于查询ios的app更新的历史版本记录
https://www.qimai.cn 推荐七麦数据 可以查询app的各种版本更新内容 由于历史久远忘记了自己app第一次上架的时间 通过这个可以查询
- aop(execution()表达式)
execution(* com.tp.soft.service..*.*(..)) 整个表达式可以分为五个部分: 1.execution(): 表达式主体. 2.第一个*号:表示返回类型,*号表示所有 ...
- Prim算法、Kruskal算法和最小生成树 | Minimum Spanning Tree
graph to tree非常有趣! 距离的度量会极大地影响后续的分析,欧式距离会放大差异,相关性会缩小差异,导致某些细胞群分不开. 先直观看一下,第一个是Prim,第二个是Kruskal.但是肯定都 ...
- HTML CSS 特殊字符表
HTML有许多特殊的字符,您对此有多少了解?平时在WEB制作中,您又有用到多少?或者说你在平时使用之时,是否也会碰到,有许多特殊字符要如何打印出来?比如说“笑脸”,比如说“版权号”.要是你用时忘记了这 ...
- Inquirer.js
一个使用界面进行交互的命令行集合 4.0以上的版本只支持node 6以上的,node4请使用3.x 目标和理念(hilosophy) 努力去做一个容易的 嵌入式的(embeddable) 和优美的命令 ...