企业微信自建应用开发(springboot框架)
最近要开发一个自建应用实现与公司系统的互通 开发过程也遇到了很多坑 最后终于实现了 我是用springboot框架写的 因为集成其他的工具十分方便 这里记录一下 。***
OAUTH2认证(至关重要用来获取当前操作人id的操作)作为应用与企业微信系统互通 可以通过回调网址获取到code 再根据code获取登陆人的企业微信id
获取access_token获取access_token是调用企业微信API接口的第一步,相当于创建了一个登录凭证,其它的业务API接口,都需要依赖于access_token来鉴权调用者身份。
因此开发者,在使用业务接口前,要明确access_token的颁发来源,使用正确的access_token。获取到最好去做一个缓存 设置有效期
官方文档获取access_token:地址.
import cn.hutool.http.HttpUtil;
import com.google.gson.Gson;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
@Component
public class TokenUtil {
//注入进来工具类RedisUtil做缓存
@Autowired
private RedisUtil redisUtil;
//获取access_token的接口地址(GET) 限200(次/天)
public final static String access_token_url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={corpId}&corpsecret={corpsecret}";
public String getAccessToken(String cropId,String secret){
//先从redis数据库取这个token的值 调动的如果没有的话再去获取token 再加入缓存里 设置有效期
String accessTokens="";
Object a=redisUtil.get("ACCESS_TOKEN");
if (a!=null&&!a.equals("")){
accessTokens=a.toString();
}
if (accessTokens==null||"".equals(accessTokens)){
//如果为空 再去获取 并设置有效期
String url=access_token_url.replace("{corpId}", cropId).replace("{corpsecret}", secret);
String resultAccessToken= HttpUtil.get(url);
Gson gson = new Gson();
Map map = new HashMap();
map = gson.fromJson(resultAccessToken, map.getClass());
//在这里重新赋值
accessTokens = map.get("access_token");
//
redisUtil.set("ACCESS_TOKEN",accessTokens,7200);
}
return accessTokens;
}
}
设置企业微信域名
关于网页授权的可信域名
REDIRECT_URL中的域名,需要先配置至应用的“可信域名”,否则跳转时会提示“redirect_uri参数错误”。
要求配置的可信域名,必须与访问链接的域名完全一致;若访问链接URL带了端口号,端口号也需要登记到可信域名中。举个例子:
在这里插入代码片package com.sedin.controller;
import cn.hutool.core.util.URLUtil;
import cn.hutool.http.HttpUtil;
import com.google.gson.Gson;
import com.sedin.config.WxCpProperties;
import com.sedin.utils.TokenUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping("Oauth")
public class Oantu2Controller {
//private static String oauthUrl="https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect";
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private TokenUtil tokenUtil;
@Autowired
private WxCpProperties properties;
@RequestMapping("/OauthLogin")
//url就是回调的地址 跳转的
public String oauthRedirect(@RequestParam(value = "url")String url){
//做urlEncode处理 转到带有code的回调页面
String urls="https://open.weixin.qq.com/connect/oauth2/authorize?appid="+properties.getCorpId()+"&redirect_uri="+"https%3A%2F%2Fdassdad.com%2Fweixin%2Fview%2Fgstb.html"+"&response_type=code&scope=snsapi_base&state=STAGE#wechat_redirect";
System.out.println("URL地址:"+urls);
return urls;
}
@RequestMapping("/getUserId")
public String getUserId(@RequestParam(value = "code")String code){
//
System.out.println("CODE值为"+code);
String accessToken=tokenUtil.getAccessToken(properties.getCorpId(),properties.getAppConfigs().get(0).getSecret());
//替换掉accessToken
String userIdurl="https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token="+accessToken+"&code="+code;
//发送get请求
String result = HttpUtil.get(userIdurl);
//、返回实例
// 是企业成员的话
// "errcode": 0,
// "errmsg": "ok",
// "UserId":"USERID",
// "DeviceId":"DEVICEID"
//}将返回的变成map
Gson gson=new Gson();
Map map=new HashMap<>();
map=gson.fromJson(result,map.getClass());
Object userId=map.get("UserId");
String resultid=userId.toString();
if (!"".equals(userId)&&userId!=null){
//如果不为空的话
this.logger.info("获取userId成功:"+userId);
return resultid;
}else {
this.logger.error("获取userId失败为空");
return null;
}
}
}
总结
上述就是企业微信自建应用开发重要的身份认证 拿到了用户的id就可以进行相应的功能设计和开发了 ,还有注意一下 ,回调域名要经过urlcode处理的才可以 每天进步一点 ,在开发前最后要仔细地阅读一下微信官方提供的api文档。上面是我自己的代码书写方式 大家也可以多用一些封装



