栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

企业微信自建应用开发(springboot框架)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

企业微信自建应用开发(springboot框架)


企业微信自建应用开发(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带了端口号,端口号也需要登记到可信域名中。举个例子:

OAUTH2认证及获取user_id代码实现
在这里插入代码片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文档。上面是我自己的代码书写方式 大家也可以多用一些封装

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/871217.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号