123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- <?php
- namespace app\common\service;
- use GuzzleHttp\Exception\GuzzleException;
- use think\Cache;
- use think\Log;
- use think\Env;
- class WorkWeChatService
- {
- const DOMAIN_URL = 'https://qyapi.weixin.qq.com/cgi-bin/';
- const CACHE_WORK_WECHAT_ACCESS_TOKEN_KEY = 'cache_work_wechat_access_token';
- public static function getToken($refresh = false)
- {
- $corp_id = Env::get('work_wechat.corp_id');
- $secret = Env::get('work_wechat.secret');
- $url = self::DOMAIN_URL . "gettoken?corpid=$corp_id&corpsecret=$secret";
- $data = [
- ];
- if (!$refresh && ($access_token = Cache::get(self::CACHE_WORK_WECHAT_ACCESS_TOKEN_KEY))) {
- return $access_token;
- }
- $res = ToolService::httpRequest('get', $url, $data, [], true);
- Log::info(__METHOD__ . '-res:' . json_encode($res, JSON_UNESCAPED_UNICODE));
- if ($res['errcode'] == 0 && !empty($res['access_token'])) {
- $access_token = $res['access_token'];
- Cache::set(self::CACHE_WORK_WECHAT_ACCESS_TOKEN_KEY, $access_token, max(1, (int)$res['expires_in'] - 300));
- }
- return $access_token ?? '';
- }
- public static function groupChatList()
- {
- $wx_access_token = self::getToken();
- $url = self::DOMAIN_URL . "externalcontact/groupchat/list?access_token=$wx_access_token";
- $data = [
- 'status_filter' => 0,
- 'owner_filter' => [
- 'userid_list' => ['ChenShaoShan']
- ],
- 'cursor' => '',
- 'limit' => 1000,
- ];
- $res = ToolService::httpRequest('post', $url, $data, [], true);
- Log::info(__METHOD__ . '-res:' . json_encode($res, JSON_UNESCAPED_UNICODE));
- if ($res['errcode'] == 0 && !empty($res['group_chat_list'])) {
- $group_chat_list = $res['group_chat_list'];
- }
- return $group_chat_list ?? [];
- }
- public static function groupChatInfo($chat_id)
- {
- $wx_access_token = self::getToken();
- $url = self::DOMAIN_URL . "externalcontact/groupchat/get?access_token=$wx_access_token";
- $data = [
- 'chat_id' => $chat_id,
- 'need_name' => 1,
- ];
- $res = ToolService::httpRequest('post', $url, $data, [], true);
- Log::info(__METHOD__ . '-res:' . json_encode($res, JSON_UNESCAPED_UNICODE));
- if ($res['errcode'] == 0 && !empty($res['group_chat'])) {
- $group_chat = $res['group_chat'];
- }
- return $group_chat ?? []; //['name'=>'群名']
- }
- /**
- * @param array $chat_id_list
- * @param int $scene
- * @param string $state
- * @return mixed|string
- * @throws GuzzleException
- */
- public static function groupChatAddJoinWay(array $chat_id_list, int $scene = 2, string $state = '')
- {
- $wx_access_token = self::getToken();
- $url = self::DOMAIN_URL . "externalcontact/groupchat/add_join_way?access_token=$wx_access_token";
- $data = [
- 'scene' => $scene,
- 'remark' => 'ercode_join',
- 'auto_create_room' => 0,
- 'chat_id_list' => $chat_id_list,
- 'state' => $state,
- ];
- $res = ToolService::httpRequest('post', $url, $data, [], true);
- Log::info(__METHOD__ . '-res:' . json_encode($res, JSON_UNESCAPED_UNICODE));
- if ($res['errcode'] == 0 && !empty($res['config_id'])) {
- $config_id = $res['config_id'];
- }
- return $config_id ?? '';
- }
- public static function groupChatGetJoinWay($config_id)
- {
- $wx_access_token = self::getToken();
- $url = self::DOMAIN_URL . "externalcontact/groupchat/get_join_way?access_token=$wx_access_token";
- $data = [
- 'config_id' => $config_id,
- ];
- $res = ToolService::httpRequest('post', $url, $data, [], true);
- Log::info(__METHOD__ . '-res:' . json_encode($res, JSON_UNESCAPED_UNICODE));
- if ($res['errcode'] == 0 && !empty($res['join_way'])) {
- $join_way = $res['join_way'];
- }
- return $join_way ?? []; //['qr_code' = '群二维码url', 'scene' = '']
- }
- }
|