引入js
<script src="https://g.alicdn.com/dingding/dingtalk-jsapi/3.0.25/dingtalk.open.js"></script>
<script src="https://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
获取当前登录用户
<button id="getUser">获取用户</button>
$('#getUser').on('click',function (){
dd.ready(function () {
dd.runtime.permission.requestAuthCode({
corpId: 'ding5ada5365adf12663', // 企业ID
onSuccess: function (result) {
var authCode = result.code; // 获取到授权码
// 将授权码发送到服务端进行验证和获取用户信息等操作
// 服务端可以通过钉钉开放平台的接口来获取用户信息,类似于之前提到的授权登录流程
// 创建一个新的<div>元素来显示authCode的值
var authCodeElement = document.createElement('div');
authCodeElement.textContent = 'Auth Code: ' + authCode;
// 将新的<div>元素添加到<body>中
document.body.appendChild(authCodeElement);
$.ajax({
url: '/ding_ding/getUserInfo',
method: 'GET',
data: {
code: authCode
},
success: function(response) {
// 处理成功响应
$("body").append('<p>getUserInfo:').append(JSON.stringify(response)).append('</p>');
},
error: function(xhr, status, error) {
// 处理错误
}
});
},
onFail: function (err) {
// 处理授权失败的情况
$("body").append('<p>requestAuthCode.onFail:').append(JSON.stringify(err)).append('</p>');
}
});
});
});
选择照片并上传
注意钉钉有些接口需要鉴权,具体需要鉴权的参考文档:
https://open.dingtalk.com/document/orgapp/jsapi-overview
<button id="choose">选择照片</button>
$('#choose').on('click', function() {
// 点击事件处理逻辑
$("body").append('<p>choose:').append("点击了选择照片按钮").append('</p>');
$.ajax({
url: '/ding_ding/auth',
type: 'GET',
success: function(response) {
if (response) {
response =response.data
$("body").append('<p>config:').append(JSON.stringify({
agentId: response.agentId,
corpId: response.corpId,
timeStamp: response.timestamp,
nonceStr: response.nonceStr,
signature: response.signature,
type:0,
jsApiList: [
// 在这里添加你需要使用的钉钉 JSAPI
'biz.util.chooseImage'
]
})).append('</p>');
// 鉴权参数获取成功
// 调用钉钉 JSAPI的config方法
dd.config({
agentId: response.agentId,
corpId: response.corpId,
timeStamp: response.timestamp,
nonceStr: response.nonceStr,
signature: response.signature,
type:0,
jsApiList: [
// 在这里添加你需要使用的钉钉 JSAPI
'biz.util.chooseImage'
]
})
dd.ready(function () {
dd.biz.util.chooseImage({
count:1,
secret:false,
sourceType:['album'],
position:'back',
onSuccess: (res) => {
$("body").append('<p>onSuccess:').append(JSON.stringify(res)).append('</p>');
$("body").append('<p>onSuccess:').append( res.files[0].path).append('</p>');
dd.biz.util.uploadFile({
url: '/upload_image',
filePath: res.files[0].path,
fileName: 'file',
onSuccess: (res) => {
$("body").append('<p>uploadFile.onSuccess:').append(JSON.stringify(res)).append('</p>');
},
onFail:(err) =>{
$("body").append('<p>uploadFile.onFail:').append(JSON.stringify(err)).append('</p>');
}
})
},
onFail:(err) =>{
console.log(JSON.stringify(err))
$("body").append('<p>chooseImage.onFail:').append(JSON.stringify(err)).append('</p>');
}
})
});
dd.error(function(error) {
// 钉钉 JSAPI 加载失败
// 可以在这里处理失败情况
$("body").append('<p>dd.onFail:').append(JSON.stringify(error)).append('</p>');
});
} else {
// 鉴权参数获取失败
console.error(response.error);
}
},
error: function(xhr, status, error) {
// 处理错误情况
console.error(error);
}
});
});
后端代码
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
class DingDingAuthController extends Controller
{
public function getUserInfo(Request $request)
{
// 获取access_token
$token = $this->getAccessToken();
//
$response = resolve('guzzle')->request('POST', 'https://oapi.dingtalk.com/topapi/v2/user/getuserinfo', [
'query' => [
'access_token' => $token,
],
'form_params' => [
'code' => $request['code'],
]
]);
$dingDingUser = json_decode($response->getBody()->getContents(), true);
return $dingDingUser;
}
// AUTH
public function auth(Request $request)
{
$corpId = DingDingAuthController::CORPID; //
$agentId = DingDingAuthController::AGENTID; //
$url = 'https://abc.com/getDingDingUser.html'; // 当前页面的完整 URL
$timestamp = time(); // 当前时间戳
$nonceStr = Str::random(16); // 生成随机字符串
$signature = $this->generateSignature($nonceStr, $timestamp, $url);
return successResponseArray(
[
'corpId' => $corpId,
'agentId' => $agentId,
'timestamp' => $timestamp,
'nonceStr' => $nonceStr,
'signature' => $signature,
]
);
}
private function generateSignature($nonceStr, $timestamp, $url)
{
$ticket = $this->getJsapiTicket();
$string = "jsapi_ticket={$ticket}&noncestr={$nonceStr}×tamp={$timestamp}&url={$url}";
return sha1($string);
}
private function getJsapiTicket()
{
$accessToken = $this->getAccessToken();
$response = resolve('guzzle')->request('GET', 'https://oapi.dingtalk.com/get_jsapi_ticket', [
'query' => [
'access_token' => $accessToken,
'type' => 'jsapi',
],
]);
$response = json_decode($response->getBody()->getContents(), true);
return $response['ticket'];
}
private function getAccessToken()
{
// 获取access_token
$response = resolve('guzzle')->request('GET', 'https://oapi.dingtalk.com/gettoken', [
'query' => [
'appkey' => DingDingAuthController::APPKEY,
'appsecret' => DingDingAuthController::APPSECRET,
]
]);
$accessToken = json_decode($response->getBody()->getContents(), true);
return $accessToken['access_token'];
}
}
本文暂时没有评论,来添加一个吧(●'◡'●)