主要的交互流程如下:1.点击钉钉中的创建的应用-->2.应用根据获取用户的code与token3.根据code与token再获取该用户的信息->根据用户信息调用云星空的接口返回拼接登入URL;
钉钉创建应用如下图
注意点:H5微应用、权限需要全部开通、应用首页地址填写自己开发的地址;
2. 获取code与token
2.1获取code(怎样获取code可以查询钉钉标准文档,以下是我对code的一些理解及我是怎样获取code的)
code是每个用户在点击此应用的时候唯一的一个code,有效时间为5分钟。
获取该code的目标是要和token一起获取该用户的基本信息,如用户名,用户ID等;
获取code代码需要写在上面地址栏目的开发地址我的网址页面是http:127.0.0.1:7219/htmlpage.html
代码如下:
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://g.alicdn.com/dingding/dingtalk-jsapi/2.11.1/dingtalk.open.js"></script>
<title>调用接口示例</title>
</head>
<script>
function getAuthCode() {
dd.ready(function () {
dd.runtime.permission.requestAuthCode({
corpId: 'dingac0db83956b84874ffe93478753d9884', // 企业的CorpId
onSuccess: function (info) {
var code = info.code; // 获取到的授权码
console.log("授权码:" + code);
document.getElementById('result').innerHTML = code;
SendUserCODE(code);
// 将授权码发送给WebAPI接口
//sendAuthCodeToWebAPI(code);
},
onFail: function (err) {
console.log('requestAuthCode failed:', err);
alert("错误调用!" + err);
}
});
});
}
</script>
以上代买会返回一个用户code
2.2获取token
string corpId = "dingac0*******"; // 钉钉创建的企业的CorpId
string appKey = "******"; // 钉钉创建的企业应用的AppKey
string appSecret = "1-*****-a2adfG"; // 钉钉创建企业应用的AppSecret
string accessTokenUrl = $"https://oapi.dingtalk.com/gettoken?appkey={appKey}&appsecret={appSecret}";
// 请求钉钉获取AccessToken
HttpResponseMessage response = await client.GetAsync(accessTokenUrl);
response.EnsureSuccessStatusCode();
string accessTokenResponse = await response.Content.ReadAsStringAsync();
AccessTokenResponse accessTokenObj = JsonConvert.DeserializeObject<AccessTokenResponse>(accessTokenResponse);
string accessToken = accessTokenObj.access_token;// 在实际应用中从 accessTokenResponse 中解析获取 AccessToken
2.3 根据code与token获取用户名
IDingTalkClient client1 = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/getuserinfo");
OapiV2UserGetuserinfoRequest req = new OapiV2UserGetuserinfoRequest();
req.Code = code;
OapiV2UserGetuserinfoResponse rsp = client1.Execute(req, accessToken);
JObject data = JObject.Parse(rsp.Body);
string UserNmae = (string)data["result"]["name"];
Console.WriteLine(rsp.Body);
string KindeeUrl = CallKingdeeUrl(UserNmae);
推荐阅读