protected override AuthUser GetUserInfo(AuthToken authToken)
        {
            var client = new DefaultDingTalkClient(source.UserInfo());
            OapiSnsGetuserinfoBycodeRequest req = new OapiSnsGetuserinfoBycodeRequest();

            req.TmpAuthCode = authToken.AccessCode;
            OapiSnsGetuserinfoBycodeResponse response = client.Execute(req, config.ClientId, config.ClientSecret);

            if (response.IsError)
            {
                throw new Exception(response.Errmsg);
            }
            var userObj = response.UserInfo;

            authToken.OpenId  = userObj.Openid;
            authToken.UnionId = userObj.Unionid;

            var authUser = new AuthUser();

            authUser.Uuid     = userObj.Unionid;
            authUser.Username = userObj.Nick;
            authUser.Nickname = userObj.Nick;
            authUser.Gender   = AuthUserGender.Unknown;

            authUser.Token           = authToken;
            authUser.Source          = source.GetName();
            authUser.OriginalUser    = response;
            authUser.OriginalUserStr = JsonConvert.SerializeObject(response);
            return(authUser);
        }
Example #2
0
        public string DingLogin(string code, string state)
        {
            //state 是前端传入的,钉钉并不会修改,比如有多种登录方式的时候,一个登录方法判断登录方式可以进行不同的处理。

            OapiSnsGetuserinfoBycodeResponse response = new OapiSnsGetuserinfoBycodeResponse();

            try
            {
                string qrAppId     = AppConfigurtaionHelper.Configuration["DingDing:QrAppId"];
                string qrAppSecret = AppConfigurtaionHelper.Configuration["DingDing:QrAppSecret"];
                if (string.IsNullOrWhiteSpace(qrAppId) || string.IsNullOrWhiteSpace(qrAppSecret))
                {
                    throw new Exception("请先配置钉钉扫码登录信息!");
                }

                DefaultDingTalkClient           client = new DefaultDingTalkClient("https://oapi.dingtalk.com/sns/getuserinfo_bycode");
                OapiSnsGetuserinfoBycodeRequest req    = new OapiSnsGetuserinfoBycodeRequest();
                req.TmpAuthCode = code;
                response        = client.Execute(req, qrAppId, qrAppSecret);

                //获取到response后就可以进行自己的登录业务处理了

                //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
                //此处省略一万行代码
            }
            catch (Exception e)
            {
                response.Errmsg = e.Message;
            }

            return(response.Body);
        }
Example #3
0
 /// <summary>
 /// 根据授权Code及appId获取用户信息
 /// </summary>
 /// <param name="accessToken"></param>
 /// <param name="userId"></param>
 /// <returns></returns>
 public static UserDetailInfo GetUserDetail(string code, string appId, string appSecret)
 {
     try
     {
         DefaultDingTalkClient           client = new DefaultDingTalkClient("https://oapi.dingtalk.com/sns/getuserinfo_bycode");
         OapiSnsGetuserinfoBycodeRequest req    = new OapiSnsGetuserinfoBycodeRequest();
         req.TmpAuthCode = code;
         OapiSnsGetuserinfoBycodeResponse response = client.Execute(req, appId, appSecret);
         if (response != null)
         {
             UserDetailInfo userinfo = new UserDetailInfo();
             if (response.Errcode == 0)
             {
                 userinfo         = new UserDetailInfo();
                 userinfo.UserId  = response.UserInfo.Nick;
                 userinfo.OpenId  = response.UserInfo.Openid;
                 userinfo.Unionid = response.UserInfo.Unionid;
                 return(userinfo);
             }
             else
             {
                 throw new Exception(response.Errmsg);
             }
         }
     }
     catch (Exception ex)
     {
         throw new Exception(ex.Message);
     }
     return(null);
 }
Example #4
0
        /// <summary>
        /// 根据code获取客户信息
        /// </summary>
        /// <returns></returns>
        public static OapiSnsGetuserinfoBycodeResponse GetDingUserInfoByCode()
        {
            string          accessToken          = GetDingToken();
            IDingTalkClient client               = new DefaultDingTalkClient(dingUrl + "/sns/getuserinfo_bycode");
            OapiSnsGetuserinfoBycodeRequest  req = new OapiSnsGetuserinfoBycodeRequest();
            OapiSnsGetuserinfoBycodeResponse rsp = client.Execute(req, accessToken);

            return(rsp);
        }
Example #5
0
        /// <summary>
        /// 服务端通过临时授权码获取授权用户的个人信息
        /// </summary>
        /// <param name="tmpAuthCode">用户授权的临时授权码code,只能使用一次;在前面步骤中跳转到redirect_uri时会追加code参数</param>
        /// <param name="appId"></param>
        /// <param name="secret"></param>
        /// <returns></returns>
        public OapiSnsGetuserinfoBycodeResponse GetUserInfoByCode(string tmpAuthCode, string appId, string secret)
        {
            DefaultDingTalkClient           client = new DefaultDingTalkClient("https://oapi.dingtalk.com/sns/getuserinfo_bycode");
            OapiSnsGetuserinfoBycodeRequest req    = new OapiSnsGetuserinfoBycodeRequest();

            req.TmpAuthCode = tmpAuthCode;
            OapiSnsGetuserinfoBycodeResponse response = client.Execute(req, appId, secret);

            return(response);
        }
Example #6
0
        public string DingLogin(string code, string state)
        {
            //state 是前端传入的,钉钉并不会修改,比如有多种登录方式的时候,一个登录方法判断登录方式可以进行不同的处理。

            OapiSnsGetuserinfoBycodeResponse response = new OapiSnsGetuserinfoBycodeResponse();

            try
            {
                string qrAppId     = AppConfigurtaionHelper.Configuration["DingDing:QrAppId"];
                string qrAppSecret = AppConfigurtaionHelper.Configuration["DingDing:QrAppSecret"];
                if (string.IsNullOrWhiteSpace(qrAppId) || string.IsNullOrWhiteSpace(qrAppSecret))
                {
                    throw new Exception("请先配置钉钉扫码登录信息!");
                }

                DefaultDingTalkClient           client = new DefaultDingTalkClient("https://oapi.dingtalk.com/sns/getuserinfo_bycode");
                OapiSnsGetuserinfoBycodeRequest req    = new OapiSnsGetuserinfoBycodeRequest();
                req.TmpAuthCode = code;
                response        = client.Execute(req, qrAppId, qrAppSecret);
                string name    = response.UserInfo.Nick;
                string openId  = response.UserInfo.Openid;
                string unionid = response.UserInfo.Unionid;
                //获取到response后就可以进行自己的登录业务处理了

                //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
                //此处省略一万行代码

                //TODO: 此处处理登录逻辑,先判断openid,和姓名在数据库中的匹配,成功后等同于用户名密码登录成功;同时要记录登录成功的ip地址
                if (saveInfo(name, openId, unionid))
                {
                    return("信息注册成功!");
                }
                else
                {
                    return("信息注册失败!");
                }
            }
            catch (Exception e)
            {
                response.Errmsg = e.Message;
            }

            return(response.Body);
        }