获取企业微信打开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. appium+python3+pycharm踩得坑

    错误: selenium.common.exceptions.WebDriverException: Message: A new session could not be created. (Ori ...

  2. Vue-Router路由 Vue-CLI脚手架和模块化开发 之 路由常用配置与路由嵌套

    vue-router路由常用配置 1.mode:配置路由模式,默认为hash,由于URL很丑,可以修改为history,但是需要服务端的支持: 以上一篇的博文为实例: 初始时url的显示: 使用mod ...

  3. php项目命名规范

    命名规范 ThinkPHP5遵循PSR-2命名规范和PSR-4自动加载规范,并且注意如下规范: 目录和文件 目录使用小写+下划线: 类库.函数文件统一以.php为后缀: 类的文件名均以命名空间定义,并 ...

  4. 查看selenium API

    pydoc是Python自带的模块,主要用于从python模块中自动生成文档,这些文档可以基于文本呈现的.也可以生成WEB 页面的,还可以在服务器上以浏览器的方式呈现! 一.pydoc 1.到底什么是 ...

  5. loj#2020 「AHOI / HNOI2017」礼物 ntt

    loj#2020 「AHOI / HNOI2017」礼物 链接 bzoj没\(letex\),差评 loj luogu 思路 最小化\(\sum\limits_1^n(a_i-b_i)^2\) 设改变 ...

  6. 分治(超级easy 不要看)

    P1226快速幂 #include<bits/stdc++.h> using namespace std; #define int long long ; int f(int b,int ...

  7. 基于配置文件的Spring注入

    基于配置文件的Spring注入 1.依赖注入的概述 依赖注入指的是通过Spring配置文件的方式创建对象时,直接通过配置的方式将数据注入到该对象的标量类型属性,并从Spring容器中获取指定对象注入到 ...

  8. julia 安装

    https://julialang.org/downloads/ 下载安装程序,拖拽完成安装

  9. shell 的多进程

    例子 #!/bin/bash temp_fifo_file=$$.info #以当前进程号,为临时管道取名 mkfifo $temp_fifo_file #创建临时管道 exec <>$t ...

  10. 【VS工具】vs2017中的一些小功能

    一.json转为类 1.打开一个json文件,复制 2.打开一个.cs文件,将json粘贴为类 3.got it 二.C#交互窗口 1.视图->其他窗口->C#交互窗口  2.打开了一个窗 ...