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); } });});
<?phpnamespace 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']; }}
