Files
code-bang/backend/application/common/service/WorkWeChatService.php
T

114 lines
4.0 KiB
PHP
Raw Normal View History

2026-09-17 16:25:31 +08:00
<?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' = '']
}
}