|
@@ -8,89 +8,6 @@ class DrbService extends Service
|
|
|
{
|
|
|
const RedisKey = 'DRBACCESSTOKENKEY';
|
|
|
|
|
|
- public function getAccessToken1($data)
|
|
|
- {
|
|
|
- $code = $data['code'] ?? ''; // URL上的授权码
|
|
|
- if (! $code) return [false, '授权码不能为空'];
|
|
|
-
|
|
|
- // Step 1: 获取 access_token(建议缓存到 redis,2小时有效)
|
|
|
- $appKey = config('dingtalk.app_key');
|
|
|
- $appSecret = config('dingtalk.app_secret');
|
|
|
- // 请求体必须是 JSON
|
|
|
- $postData = [
|
|
|
- "appKey" => $appKey,
|
|
|
- "appSecret" => $appSecret
|
|
|
- ];
|
|
|
- $tokenResp = $this->curlOpen('https://api.dingtalk.com/v1.0/oauth2/accessToken',[
|
|
|
- 'post' => true,
|
|
|
- 'request' => 'post',
|
|
|
- 'isupfile' => false,
|
|
|
- 'header' => ['Content-Type: application/json'],
|
|
|
- 'post' => json_encode($postData)
|
|
|
- ]);
|
|
|
- $tokenResp = json_decode($tokenResp,true);
|
|
|
-
|
|
|
- if (empty($tokenResp['accessToken'])) return [false, '获取 access_token 失败'];
|
|
|
- $accessToken = $tokenResp['accessToken'];
|
|
|
-
|
|
|
- // Step2: 用 code 获取用户信息
|
|
|
- $userInfoResp = $this->curlOpen('https://oapi.dingtalk.com/topapi/v2/user/getuserinfo', [
|
|
|
- 'post' => true,
|
|
|
- 'request' => 'post',
|
|
|
- 'isupfile' => false,
|
|
|
- 'header' => ["x-acs-dingtalk-access-token: {$accessToken}", "Content-Type: application/json"],
|
|
|
- 'post' => json_encode(['code' => $code])
|
|
|
- ]);
|
|
|
- $userInfoResp = json_decode($userInfoResp, true);dd($userInfoResp);
|
|
|
- $userId = $userInfoResp['result']['userId'] ?? null;
|
|
|
- if (!$userId) return ['error' => '获取用户信息失败或 code 已过期'];
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- // 获取用户信息
|
|
|
- $userInfoUrl = "https://oapi.dingtalk.com/topapi/v2/user/getuserinfo?access_token={$accessToken}";
|
|
|
- $postData = [
|
|
|
- 'code' => $code
|
|
|
- ];
|
|
|
- $tokenResp = $this->curlOpen($userInfoUrl,[
|
|
|
- 'post' => true,
|
|
|
- 'request' => 'post',
|
|
|
- 'isupfile' => false,
|
|
|
- 'header' => ['Content-Type: application/json'],
|
|
|
- 'post' => json_encode($postData)
|
|
|
- ]);
|
|
|
- $tokenResp = json_decode($tokenResp,true);
|
|
|
- dd($tokenResp,$userInfoUrl,$postData);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- // Step 2: 用 code 换取用户信息
|
|
|
- $url = "https://oapi.dingtalk.com/user/getuserinfo?access_token={$accessToken}&code={$code}";
|
|
|
- $tokenResp = $this->curlOpen($url);
|
|
|
- dd($tokenResp,$url);
|
|
|
-
|
|
|
- if (isset($userResp['errcode']) && $userResp['errcode'] != 0) {
|
|
|
- return response()->json(['error' => '获取用户失败', 'detail' => $userResp], 500);
|
|
|
- }
|
|
|
-
|
|
|
- // userResp 里有 userid
|
|
|
- $dingUserId = $userResp['userid'];
|
|
|
-
|
|
|
- // Step 3: 你自己系统里维护映射关系 (假设表 user_bindings 记录了 dingtalk_userid ↔ u8_username)
|
|
|
- $u8User = \DB::table('user_bindings')->where('dingtalk_userid', $dingUserId)->first();
|
|
|
-
|
|
|
- if (!$u8User) {
|
|
|
- return response()->json(['error' => '该钉钉账号未绑定 U8 用户'], 403);
|
|
|
- }
|
|
|
-
|
|
|
- // Step 4: 返回登录成功信息
|
|
|
- return response()->json([
|
|
|
- 'dingUserId' => $dingUserId,
|
|
|
- 'u8User' => $u8User->u8_username,
|
|
|
- 'message' => '登录成功'
|
|
|
- ]);
|
|
|
- }
|
|
|
-
|
|
|
public function getAccessToken()
|
|
|
{
|
|
|
$token = Redis::get(self::RedisKey);
|