DingtalkService.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <?php
  2. namespace app\common\service;
  3. use app\common\constant\CommonConstant;
  4. use app\extend\Dingtalk\Sample;
  5. /**
  6. * 钉钉服务类
  7. */
  8. class DingtalkService
  9. {
  10. public static function get_obj()
  11. {
  12. require_once env('root_path') . '/vendor/dingapi/TopSdk.php';
  13. date_default_timezone_set('Asia/Shanghai');
  14. $c = new \DingTalkClient(\DingTalkConstant::$CALL_TYPE_OAPI, \DingTalkConstant::$METHOD_POST, \DingTalkConstant::$FORMAT_JSON);
  15. return $c;
  16. }
  17. /**
  18. * 获取部门列表
  19. *
  20. * @param string $dept_id 父部门ID
  21. * @return mixed
  22. */
  23. public static function department_listsub($dept_id)
  24. {
  25. $accessToken = Sample::accessToken()['accessToken'];
  26. $c = self::get_obj();
  27. $req = new \OapiV2DepartmentListsubRequest;
  28. $req->setDeptId($dept_id);
  29. $resp = $c->execute($req, $accessToken, "https://oapi.dingtalk.com/topapi/v2/department/listsub");
  30. if($resp->errcode == 0 && $resp->errmsg == 'ok'){
  31. $result = $resp->result;
  32. return $result;
  33. }
  34. except($resp->errcode.' '.$resp->errmsg);
  35. }
  36. /**
  37. * 获取部门详情
  38. *
  39. * @param string $dept_id 部门ID
  40. * @return mixed
  41. */
  42. public static function department_get($dept_id)
  43. {
  44. $accessToken = Sample::accessToken()['accessToken'];
  45. $c = self::get_obj();
  46. $req = new \OapiV2DepartmentListsubRequest;
  47. $req->setDeptId($dept_id);
  48. $resp = $c->execute($req, $accessToken, "https://oapi.dingtalk.com/topapi/v2/department/get");
  49. if($resp->errcode == 0 && $resp->errmsg == 'ok'){
  50. $result = $resp->result;
  51. return $result;
  52. }
  53. except($resp->errcode.' '.$resp->errmsg);
  54. }
  55. /**
  56. * 获取部门用户详情
  57. *
  58. * @param string $dept_id 部门ID
  59. * @return mixed
  60. */
  61. public static function user_list($dept_id)
  62. {
  63. $accessToken = Sample::accessToken()['accessToken'];
  64. $c = self::get_obj();
  65. $req = new \OapiV2UserListRequest;
  66. $req->setDeptId($dept_id);
  67. $req->setCursor("0");
  68. $req->setSize("100");
  69. $resp = $c->execute($req, $accessToken, "https://oapi.dingtalk.com/topapi/v2/user/list");
  70. if($resp->errcode == 0 && $resp->errmsg == 'ok'){
  71. $result = $resp->result;
  72. return $result;
  73. }
  74. except($resp->errcode.' '.$resp->errmsg);
  75. }
  76. /**
  77. * 查询用户详情
  78. *
  79. * @param string $userid 用户的userId
  80. * @return mixed
  81. */
  82. public static function user_get($userid)
  83. {
  84. $accessToken = Sample::accessToken()['accessToken'];
  85. $c = self::get_obj();
  86. $req = new \OapiV2UserGetRequest;
  87. $req->setUserid($userid);
  88. $resp = $c->execute($req, $accessToken, "https://oapi.dingtalk.com/topapi/v2/user/get");
  89. if($resp->errcode == 0 && $resp->errmsg == 'ok'){
  90. $result = $resp->result;
  91. return $result;
  92. }
  93. except($resp->errcode.' '.$resp->errmsg);
  94. }
  95. /**
  96. * 通过免登码获取用户信息
  97. *
  98. * @param string $code 免登授权码
  99. * @return mixed
  100. */
  101. public static function get_user_info($code)
  102. {
  103. $accessToken = Sample::accessToken()['accessToken'];
  104. $c = self::get_obj();
  105. $req = new \OapiV2UserGetuserinfoRequest;
  106. $req->setCode($code);
  107. $resp = $c->execute($req, $accessToken, "https://oapi.dingtalk.com/topapi/v2/user/getuserinfo");
  108. if($resp->errcode == 0 && $resp->errmsg == 'ok'){
  109. $result = $resp->result;
  110. return $result;
  111. }
  112. except($resp->errcode.' '.$resp->errmsg);
  113. }
  114. /**
  115. * 设置企业内部应用H5微应用鉴权
  116. * @param string $url 应用URL,例如:https://your-domain.com/path/to/your/app.html
  117. * @return mixed
  118. **/
  119. public static function generateAuthSignature($url) {
  120. // 获取jsapiTicket
  121. $jsapiTicket = Sample::jsapiTickets()['jsapiTicket'];
  122. // 生成鉴权签名
  123. $nonceStr = randCode(16); // 随机字符串,用于保证签名不可预测性,长度为16个字符的随机字符串
  124. $timeStamp = time(); // 时间戳,格式为13位数字,如:1602756290
  125. $stringA = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timeStamp&url=$url";
  126. $signature = sha1($stringA); // 签名值
  127. // agentId值
  128. // corpId值
  129. $config = config('app.dingtalk');
  130. $agentId = $config['agentId'];
  131. $corpId = $config['corpId'];
  132. return compact("agentId","corpId","nonceStr","timeStamp","signature","url");
  133. }
  134. /**
  135. * 更新员工和部门
  136. **/
  137. public static function renew(){
  138. $department_list = UserService::get_department_column();
  139. }
  140. }