114 lines
4.0 KiB
PHP
114 lines
4.0 KiB
PHP
<?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' = '']
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|