自建应用--企业微信实现扫码登陆、获取用户信息 springboot+react

企业微信实现扫码登陆、获取用户信息 springboot+react

配置企业微信环境

第一步:自建应用,请在“应用管理”–“创建应用”–“新建”,你就可以获得该应用的AgentId
企业微信官方文档地址
在这里插入图片描述
只需要关注AgentId即可,后期如获取到用户信息这些才应用到secret。

第二步:配置网页授权及JS-SDK、企业微信授权登录、企业可信IP

企业微信官方文档地址
在这里插入图片描述

配置的域名(线上)
如你的域名为 “https://baidd.com”,则你应当配置为“baidd.com”。因为,企业微信配置回调域名并不接受“baidd.com/api”或其他不规范的类型,且你要配置的域名请确保已经校验通过。

配置的域名(线下)
你可以使用内网穿透工具,获取相对应的域名即可。如蜻蜓映射、花生壳,根据自己喜好来。如"http://dpd.bnat.com"。那么你需要配置为“dpd.bnat.com”

第三步:配置可信域名需完成域名归属认证(Linux正式环境)
将下面的txt文件上传到你的服务器上,使用nginx进行配置即可。重启nginx进行访问。

第四步:企业可信(Linux正式环境)
这个地方必须完成第三步,才能进行IP地址配置(服务器的ip地址),才能获取到相应的用户信息。要不然报错

前端开发react

效果图

最终效果图
我开发的目的是为了获取userid,界面美化根据自己的需求来就可以了。
在这里插入图片描述

实现代码

1、企业微信 JS-SDK 提供了 npm 和 cdn 两种引入途径,详见引入企业微信JS—sdk

2.为什么拿不到回调?是因为你的redirect_uri配置的不对。该回调地址是指你项目接收他回调的页面地址。这里就根据你的实际情况配置http或者https,取决于你线上还是线下环境。一定不要忘记配置http或者https结合图和代码看
在这里插入图片描述

//这是我实现代码的片段。主要是实现企业微信二维码的展示
 const loginPanelRef = useRef(null);
 const wwLoginRef = useRef(null);
 useEffect(() => {
    // 异步创建Web登录组件实例
    const createWWLogin = async () => {
      // 初始化
      const wwLogin = ww.createWWLoginPanel({
        el: "#ww_login",
        params: {
          login_type: "CorpApp",
          appid: " 你的企业CorpId",
          //测试环境
          agentid: "你的应用agentId",
          redirect_uri: "http://2d123dpd.beesnat.com/performance/panel",
          state: "WWLogin",
          redirect_type: "callback",
          panel_size: "small",
        },
        onCheckWeComLogin({ isWeComLogin }) {
          console.log("3333", isWeComLogin);
        },
        onLoginSuccess(code) {
          //根据当前用户获取扫描用户的userId,与后端进行联动
          updateInfo(code, updame);
        },
        onLoginFail(err) {
          console.log("222222", err);
        },
      });
      // 存储Web登录组件实例引用
      wwLoginRef.current = wwLogin;
    };
    createWWLogin();
  }, []);

springboot后端实现

根据不同的风格,可以选择不同的,我这里使用的是Feign Client 实现。
剩下的就是根据你自己的实际需求进行调试。然后,对返回值依据需求取值

`
@FeignClient(name = "qyex", url = "https://qyapi.weixin.qq.com")
public interface QywxCodeFeignService {
    /**
     * 企业微信获取access_token
     */
    @RequestMapping(value = "/cgi-bin/gettoken", method = RequestMethod.GET)
    String getAccessToken(@RequestParam(name = "corpid") String corpid, @RequestParam(name = "corpsecret") String corpsecret);
    /**
     * 获取用户登录身份
     */
    @RequestMapping(value = "/cgi-bin/auth/getuserinfo", method = RequestMethod.GET)
    String getUserId(@RequestParam(name = "access_token") String access_token, @RequestParam(name = "code") String code);
    /**
     * 获取用户具体信息
     */
    @RequestMapping(value = "/cgi-bin/user/get", method = RequestMethod.GET)
    String getUserMessage(@RequestParam(name = "access_token") String access_token, @RequestParam(name = "userid") String userid);
  }

controller层进行相应的值进行取值

 String resultUser=QywxCodeFeignService.getAccessToken(APPID,APPSERCT);
 JsonObject jsonObjectUser = gson.fromJson(resultUser, JsonObject.class);
 String userId = jsonObjectUser.get("userid").getAsString();

1、在本文中并未对"本地windows内网穿透然后校验文件"进行说明,因为我暂时还没有找到解决办法,找到方法后,进行更新。
2、react也是我半路接触的,所以有些专业术语可能存在表述不清晰。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值