OAuth2简介
OAuth2的设计背景,在于允许用户在不告知第三方自己的帐号密码情况下,通过授权方式,让第三方服务可以获取自己的资源信息。
1.注册企业
2.新建第三方应用
1.应用-自建-创建应用,示例:
3.网页授权链接
官方API地址:点击跳转
1.获取Code,需要准备企业ID(appid),企业应用ID(agentid),回调地址(指手机端企业微信的应用默认地址,企业微信接口会把Code返回给这个地址)
1.1.官方示例截图:
1.2.应用ID位置截图(应用ID在最近新建的应用里面,点击打开就能看见)
1.3.企业ID截图
代码示例:
注意
1. 回调的网址必须放在公网上,不然企业微信访问不了。(这里建议使用**花生壳**内网穿透)
2. 必须发布在IIS站点下面,这里是不好调试的
2.获取身份验证的suite_access_token
官方API地址:点击跳转
2.1.官方示例截图:
2.2应用secret位置截图:
代码示例:
/// <summary>
/// 获取token
/// </summary>
/// <param name="appid">企业ID,也叫corpid,可以找微信号中可以找到</param>
/// <param name="secret">应用的凭证密钥</param>
/// <returns></returns>
public string GetObtainToke()
{
try
{
string appid = "ww1769a401136be1bb";
var secret = "mZwzx6k7EuvIfyrtgEjPEzLOG69ZHkiDlRftH7vgRps";
string url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?";
StringBuilder str = new StringBuilder();
str.Append(url);
str.Append("corpid=" + appid + "&corpsecret=" + secret + "");
string Tokes = HttpUtils.DoGet(str.ToString(), null).ToString();
dynamic jsondata = JToken.Parse(Tokes) as dynamic;
Log.CreateLogManager().Error("获取access_token状态为:" + jsondata["errcode"]);
if (jsondata["errcode"] == 0)
{
return jsondata["access_token"];
}
else
{
return "";
}
}
catch (Exception ex)
{
Log.CreateLogManager().Error("获取access_token出现异常:" + ex);
return "";
}
}
3.获取用户信息
官网API地址:点击即跳转
官网截图:
代码示例:
/// <summary>
/// 企业微信登录方法(获取用户名)
/// </summary>
/// <param name="code"></param>
/// <param name="state"></param>
/// <returns></returns>
public Object GetUserLoginBs(string code,string state)
{
DateTime dr = DateTime.Now;
object encryptTicket = new { };
try
{
if (code != null)
{
string Token = GetObtainToke();
if (Token != "")
{
string UserUrl = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?";
StringBuilder UserStr = new StringBuilder();
UserStr.Append(UserUrl);
UserStr.Append("access_token=" + Token + "&code=" + code + "");
string JsonValue = HttpUtils.DoGet(UserStr.ToString(), null).ToString();
dynamic ResultValue = JToken.Parse(JsonValue) as dynamic;
Log.CreateLogManager().Error("获取企业微信用户状态为:" + ResultValue["errcode"]);
Log.CreateLogManager().Error("获取企业微信用户UserId为:" + ResultValue["UserId"]);
if (ResultValue["errcode"] == 0)
{
string User = ResultValue["UserId"];
string StaffUrl = "https://qyapi.weixin.qq.com/cgi-bin/user/get?";
StringBuilder StaffStr = new StringBuilder();
StaffStr.Append(StaffUrl);
StaffStr.Append("access_token=" + Token + "&userid=" + User + "");
string StaffResult = HttpUtils.DoGet(StaffStr.ToString(), null).ToString();
Root jsonStaff = Newtonsoft.Json.JsonConvert.DeserializeObject<Root>(StaffResult);
if (jsonStaff.errcode == 0)
{
}
else
{
encryptTicket = new { Success = false, Msg = "员工号获取失败" };
}
}
else
{
encryptTicket = new { Success = false, Msg = "UserID获取失败" };
}
}
else
{
encryptTicket = new { Success = false, Msg = "access_token获取失败" };
}
}
}
catch (Exception ex)
{
encryptTicket = new { Success = false, Msg = "出现异常" };
Log.CreateLogManager().Error("异常:" + ex);
}
return encryptTicket;
}