config->base.php
<?phpreturn [
'DIR_ROOT' => dirname(__FILE__) . '/',
'OAPI_HOST' => 'https://oapi.dingtalk.com',
'CORPID' => 'ding5c49********dc0d35c2f4657eb6378f',
'SECRET' => 'pm7eJPbO8X********SkIt8IVcX7EKkHXZ5_28nqKe_we1j-aowauPDLkGl7dlTT',
'AGENTID' => '16*****28',
'ENCODING_AES_KEY' => '1*****6',
'TOKEN' => 'VazMJWWiPbq********qtVBaKW3lvm5c7tB9aODCrI8',];
controller->Index.php
<?php
namespace app\pc\controller;
use think\facade\Config;
use think\Controller;
use think\facade\Request;
use think\facade\Session;
class Index extends Controller {
public function index() {
$config = Config::pull('base');
$corpid = $config['CORPID'];
$corpsecret = $config['SECRET'];
$urltoken = "https://oapi.dingtalk.com/gettoken?corpid=" . $corpid . "&corpsecret=" . $corpsecret;
$access_token_arr = json_decode(curl_http_request($urltoken), true);
$access_token = $access_token_arr["access_token"];
$urlticket = "https://oapi.dingtalk.com/get_jsapi_ticket?access_token=" . $access_token;
$ticket_arr = json_decode(curl_http_request($urlticket), true);
$ticket = $ticket_arr["ticket"];
$nonceStr = $config['ENCODING_AES_KEY'];
$timeStamp = time();
$agentId = $config['AGENTID'];
$href = get_current_page_url();
$url = urldecode($href);
//$corpAccessToken = $access_token;
$signature = sign($ticket, $nonceStr, $timeStamp, $url);
$this->assign(['access_token' => $access_token, 'corpid' => $corpid, 'agentId' => $agentId, 'timeStamp' => $timeStamp, 'nonceStr' => $nonceStr, 'signature' => $signature]);
return $this->fetch();
}
public function login() {
$urluserid = "https://oapi.dingtalk.com/user/getuserinfo?access_token=" . Request::param('acctoken') . "&code=" . Request::param('username');
$userid_arr = json_decode(curl_http_request($urluserid), true);
$userid = $userid_arr["userid"];
$urluserinfo = "https://oapi.dingtalk.com/user/get?access_token=" . Request::param('acctoken') . "&userid=" . $userid;
$userinfo = json_decode(curl_http_request($urluserinfo), true);
Session::set('user_name', $userinfo['name']);
Session::set('user_mobile', $userinfo['mobile']);
}
}
view->index->index.html
<!DOCTYPE html>
<html>
<head>
<title>我的工资条</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
{load href="/static/css/bootstrap.css" /}
{load href="/static/js/jquery.min.js" /}
{load href="/static/js/bootstrap.min.js" /}
{load href="/static/js/index.js" /}
</head>
<body>
<div class="container">
<div class="col-sm-12 text-center">用户信息验证中,请稍后……</div>
<form action="{:url('login')}" id="ddform" method="post">
<input type="hidden" value="" id="username" name="username" />
<input type="hidden" value="{$access_token}" id="acctoken" name="acctoken" />
</form>
</div>
</body>
<script type="text/javascript">
DingTalkPC.config({
agentId: '{$agentId}', // 必填,微应用ID
corpId: '{$corpid}', //必填,企业ID
timeStamp: '{$timeStamp}', // 必填,生成签名的时间戳
nonceStr: '{$nonceStr}', // 必填,生成签名的随机串
signature: '{$signature}', // 必填,签名
jsApiList: ['device.notification.alert', 'device.notification.confirm'] // 必填,需要使用的jsapi列表
});
DingTalkPC.ready(function () {
DingTalkPC.runtime.permission.requestAuthCode({
corpId: '{$corpid}',
onSuccess: function (result) {
alert(1);
$("#username").val(result.code);
$("#ddform").submit();
},
onFail: function (err) {
alert(2);
document.write('验证失败!' + err);
}
});
});
</script>
</html>
需要引入的文件:http://g.alicdn.com/dingding/dingtalk-pc-api/2.3.1/index.js