java实现钉钉免登对接

public OrgDingtalkInfoVo dingLogin(String code){
        String accessToken = AccessTokenUtil.getAccessToken(appKey, appSecret);

       String userId = getUserId(code, accessToken);
       //String userId = getUser(code, accessToken);

        OapiV2UserGetResponse.UserGetResponse oapiV2UserGetResponseByUserId = getOapiV2UserGetResponseByUserId(userId, accessToken);

        String phone = oapiV2UserGetResponseByUserId.getMobile();

        if (StringUtils.isBlank(phone)){
            throw new IgnoredException(ErrorCode.SYS_ERROR,"手机号为空");
        }
        List<OrgUserDingtalkDto> orgUserDingtalkDtos = orgUserDingtalkDtoRpcAdapter.getByPhone(phone);
        AdminUserDto adminUserDto = adminUserDtoRpcAdapter.getByPhone(phone);

        if (CollectionUtils.isEmpty(orgUserDingtalkDtos) && Objects.isNull(adminUserDto)){
            throw new IgnoredException(ErrorCode.SYS_ERROR,"用户不存在机构");
        }

        List<OrgInfoVo> orgInfoVos = new ArrayList<>();

        for (OrgUserDingtalkDto orgUserDingtalkDto : orgUserDingtalkDtos) {
            OrgInfoVo orgInfoVo = new OrgInfoVo();
            OrgDto orgDto = orgDtoRpcAdapter.getById(orgUserDingtalkDto.getOrgId());
            BeanUtils.copyProperties(orgUserDingtalkDto,orgInfoVo);
            orgInfoVo.setOrgName(orgDto.getOrgName());
            orgInfoVos.add(orgInfoVo);
        }
        OrgDingtalkInfoVo orgDingtalkInfoVo = new OrgDingtalkInfoVo();

        orgDingtalkInfoVo.setOrgUserInfo(orgInfoVos);
        //判断是否是管理员

        if (adminUserDto!=null){
            orgDingtalkInfoVo.setIsAdmin(true);
            orgDingtalkInfoVo.setUserName(adminUserDto.getUserName());
        }else {
            orgDingtalkInfoVo.setIsAdmin(false);
            List<OrgUserDto> orgUserDtos = orgUserDtoRpcAdapter.getByPhone(phone);
            orgDingtalkInfoVo.setUserName(orgUserDtos.get(0).getName());
        }

        return orgDingtalkInfoVo;

    }

    private String getUserId(String authCode, String accessToken) {
        DingTalkClient client = new DefaultDingTalkClient(UrlConstant.GET_USER_INFO_URL);
        OapiV2UserGetuserinfoRequest req = new OapiV2UserGetuserinfoRequest();
        req.setCode(authCode);
        OapiV2UserGetuserinfoResponse oapiV2UserGetuserinfoResponse;
        try {
            oapiV2UserGetuserinfoResponse = client.execute(req, accessToken);
            if (oapiV2UserGetuserinfoResponse.isSuccess()) {
                OapiV2UserGetuserinfoResponse.UserGetByCodeResponse userGetByCodeResponse = oapiV2UserGetuserinfoResponse.getResult();
                return userGetByCodeResponse.getUserid();
            } else {
                throw new IgnoredException(ErrorCode.SYS_ERROR, oapiV2UserGetuserinfoResponse.getErrmsg());
            }

        } catch (ApiException e) {
            e.printStackTrace();
            throw new IgnoredException(ErrorCode.SYS_ERROR, e.getErrMsg());
        }
    }

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java中,要实现钉钉的扫码功能,通常会使用钉钉开放平台提供的API和SDK。钉钉提供了Java SDK供开发者集成,以便于处理用户扫描二维码登录、获取临时权限等功能。以下是一般的步骤: 1. 注册钉钉开发者账号并创建应用:首先,你需要在钉钉开放平台上注册(https://open.dingtalk.com/)并创建一个新的应用,获取App Key和App Secret。 2. 添加依赖:在你的项目中添加钉钉SDK的依赖,如果是Maven,可以在pom.xml中添加如下代码: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>dingtalk-sdk</artifactId> <version>版本号</version> </dependency> ``` 3. 初始化SDK:在应用启动时,用App Key和App Secret初始化SDK,如: ```java DingTalkClient.init("your_app_key", "your_app_secret"); ``` 4. 生成扫码二维码:调用SDK中的方法生成二维码,例如: ```java QRCode qrCode = new QRCode(); qrCode.setCodeType(QRCode.CODE_TYPE_TEMP); qrCode.setTitle("扫码登录"); qrCode.setExpiration(60); // 二维码有效时间(秒) String ticket = qrCode.getQRCodeTicket(); ``` 这将返回一个包含临时权限的二维码图片链接或二维码码串。 5. 用户扫码后,钉钉服务器会发送事件到你的回调地址,你可以通过监听这些事件来处理用户的登录请求。 6. 处理回调:在你的服务端,设置一个回调URL,当用户扫码后,钉钉会发送登录事件到这个地址,通过验证事件参数,验证用户身份。 相关问题: 1. 钉钉扫码的具体API调用是什么样子的? 2. 如何在Java中处理钉钉推送的扫码登录事件? 3. 如何验证钉钉服务器传递的扫码事件参数?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值