You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
information-system/application/third_party/dingding_auth/controllers/index.php

111 lines
4.1 KiB
PHP

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class Index extends CI_Controller {
public function __construct() {
parent::__construct();
}
//获取钉钉用户授权信息
public function auth($agentId) {
$data = array();
//$agentId 应用ID如果没有传进来跳到错误页面
if (empty($agentId)) {
echo 'agentId不能为空';
return false;
}
//生成签名
$url = $this->curPageURL();
$nonceStr = 'abcdefg&cits@123#';
$timeStamp = time();
$corpId = 'ding48bce8fd3957c96b';
$secret = '4I_TlkOUtWQ60tUYX_447WXM5mNX41q_Q03xtZJgvBOzMPzGbNKZZz_Bsv-0B9I1';
//缓存accessToken。accessToken有效期为两小时需要在失效前请求新的accessToken注意以下代码没有在失效前刷新缓存的accessToken
$cookie_accessToken = 'Token_' . $agentId;
$accessToken = isset($_COOKIE[$cookie_accessToken]) ? $_COOKIE[$cookie_accessToken] : false;
if (empty($accessToken)) {
$response = GET_HTTP("https://oapi.dingtalk.com/gettoken?corpid=$corpId&corpsecret=$secret");
if (empty($response)) {
log_message('error', "accessToken gethttp");
return false;
}
$accessToken = json_decode($response)->access_token;
setcookie($cookie_accessToken, $accessToken, time() + 7140, '/');
}
$cookie_jsapi_ticket = 'Ticket_' . $agentId;
$jsapi_ticket = isset($_COOKIE[$cookie_jsapi_ticket]) ? $_COOKIE[$cookie_jsapi_ticket] : false;
if (empty($jsapi_ticket)) {
$response = GET_HTTP("https://oapi.dingtalk.com/get_jsapi_ticket?type=jsapi&access_token=$accessToken");
if (empty($response)) {
log_message('error', "jsapi_ticket gethttp");
return false;
}
$jsapi_ticket = json_decode($response)->ticket;
setcookie($cookie_jsapi_ticket, $jsapi_ticket, time() + 7140, '/');
}
$signature = sha1('jsapi_ticket=' . $jsapi_ticket . '&noncestr=' . $nonceStr . '&timestamp=' . $timeStamp . '&url=' . $url);
$config = array(
'url' => $url,
'nonceStr' => $nonceStr,
'agentId' => $agentId,
'timeStamp' => $timeStamp,
'corpId' => $corpId,
'signature' => $signature,
'accessToken' => $accessToken,
);
$data['auth_config'] = json_encode($config);
$this->load->view('welcome', $data);
//print_r($data);
}
public function curPageURL() {
$pageURL = 'http';
if (array_key_exists('HTTPS', $_SERVER) && $_SERVER["HTTPS"] == "on") {
$pageURL .= "s";
}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
}
return $pageURL;
}
//$agentId 应用ID用来判断应该跳转到哪里去
//$user_code 用户code需要再次请求接口来获取用户详细信息
public function authOnSuccess($agentId,$accessToken, $user_code) {
$response =GET_HTTP("https://oapi.dingtalk.com/user/getuserinfo?access_token=$accessToken&code=$user_code");
if (empty($response)) {
log_message('error', "getuserinfo gethttp");
return false;
}
$userid = json_decode($response)->userid;
$response =GET_HTTP("https://oapi.dingtalk.com/user/get?access_token=$accessToken&userid=$userid");
if (empty($response)) {
log_message('error', "user gethttp");
return false;
}
$response= json_decode($response);
if(!empty($response) && $response->errcode==0){
$username= $response->name;
redirect("http://doc.mycht.cn/index.php?user/loginSubmit&name=$username&password=9Q7gJ3239aK_8LA");
}else{
print_r($response);
}
}
}