WorkWeChatService.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <?php
  2. namespace app\common\service;
  3. use GuzzleHttp\Exception\GuzzleException;
  4. use think\Cache;
  5. use think\Log;
  6. use think\Env;
  7. class WorkWeChatService
  8. {
  9. const DOMAIN_URL = 'https://qyapi.weixin.qq.com/cgi-bin/';
  10. const CACHE_WORK_WECHAT_ACCESS_TOKEN_KEY = 'cache_work_wechat_access_token';
  11. public static function getToken($refresh = false)
  12. {
  13. $corp_id = Env::get('work_wechat.corp_id');
  14. $secret = Env::get('work_wechat.secret');
  15. $url = self::DOMAIN_URL . "gettoken?corpid=$corp_id&corpsecret=$secret";
  16. $data = [
  17. ];
  18. if (!$refresh && ($access_token = Cache::get(self::CACHE_WORK_WECHAT_ACCESS_TOKEN_KEY))) {
  19. return $access_token;
  20. }
  21. $res = ToolService::httpRequest('get', $url, $data, [], true);
  22. Log::info(__METHOD__ . '-res:' . json_encode($res, JSON_UNESCAPED_UNICODE));
  23. if ($res['errcode'] == 0 && !empty($res['access_token'])) {
  24. $access_token = $res['access_token'];
  25. Cache::set(self::CACHE_WORK_WECHAT_ACCESS_TOKEN_KEY, $access_token, max(1, (int)$res['expires_in'] - 300));
  26. }
  27. return $access_token ?? '';
  28. }
  29. public static function groupChatList()
  30. {
  31. $wx_access_token = self::getToken();
  32. $url = self::DOMAIN_URL . "externalcontact/groupchat/list?access_token=$wx_access_token";
  33. $data = [
  34. 'status_filter' => 0,
  35. 'owner_filter' => [
  36. 'userid_list' => ['ChenShaoShan']
  37. ],
  38. 'cursor' => '',
  39. 'limit' => 1000,
  40. ];
  41. $res = ToolService::httpRequest('post', $url, $data, [], true);
  42. Log::info(__METHOD__ . '-res:' . json_encode($res, JSON_UNESCAPED_UNICODE));
  43. if ($res['errcode'] == 0 && !empty($res['group_chat_list'])) {
  44. $group_chat_list = $res['group_chat_list'];
  45. }
  46. return $group_chat_list ?? [];
  47. }
  48. public static function groupChatInfo($chat_id)
  49. {
  50. $wx_access_token = self::getToken();
  51. $url = self::DOMAIN_URL . "externalcontact/groupchat/get?access_token=$wx_access_token";
  52. $data = [
  53. 'chat_id' => $chat_id,
  54. 'need_name' => 1,
  55. ];
  56. $res = ToolService::httpRequest('post', $url, $data, [], true);
  57. Log::info(__METHOD__ . '-res:' . json_encode($res, JSON_UNESCAPED_UNICODE));
  58. if ($res['errcode'] == 0 && !empty($res['group_chat'])) {
  59. $group_chat = $res['group_chat'];
  60. }
  61. return $group_chat ?? []; //['name'=>'群名']
  62. }
  63. /**
  64. * @param array $chat_id_list
  65. * @param int $scene
  66. * @param string $state
  67. * @return mixed|string
  68. * @throws GuzzleException
  69. */
  70. public static function groupChatAddJoinWay(array $chat_id_list, int $scene = 2, string $state = '')
  71. {
  72. $wx_access_token = self::getToken();
  73. $url = self::DOMAIN_URL . "externalcontact/groupchat/add_join_way?access_token=$wx_access_token";
  74. $data = [
  75. 'scene' => $scene,
  76. 'remark' => 'ercode_join',
  77. 'auto_create_room' => 0,
  78. 'chat_id_list' => $chat_id_list,
  79. 'state' => $state,
  80. ];
  81. $res = ToolService::httpRequest('post', $url, $data, [], true);
  82. Log::info(__METHOD__ . '-res:' . json_encode($res, JSON_UNESCAPED_UNICODE));
  83. if ($res['errcode'] == 0 && !empty($res['config_id'])) {
  84. $config_id = $res['config_id'];
  85. }
  86. return $config_id ?? '';
  87. }
  88. public static function groupChatGetJoinWay($config_id)
  89. {
  90. $wx_access_token = self::getToken();
  91. $url = self::DOMAIN_URL . "externalcontact/groupchat/get_join_way?access_token=$wx_access_token";
  92. $data = [
  93. 'config_id' => $config_id,
  94. ];
  95. $res = ToolService::httpRequest('post', $url, $data, [], true);
  96. Log::info(__METHOD__ . '-res:' . json_encode($res, JSON_UNESCAPED_UNICODE));
  97. if ($res['errcode'] == 0 && !empty($res['join_way'])) {
  98. $join_way = $res['join_way'];
  99. }
  100. return $join_way ?? []; //['qr_code' = '群二维码url', 'scene' = '']
  101. }
  102. }