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); }
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); }
/// <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); }
/// <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); }
/// <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); }
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); }