This commit is contained in:
2025-03-22 15:22:19 +08:00
parent b45dd79741
commit 2e24cf6d45
6 changed files with 217 additions and 4 deletions

View File

@@ -0,0 +1,24 @@
<?php
/*
* description
* authorwh
* email
* createTime{2025/3/22} {14:10}
*/
namespace app\admin\controller;
use app\admin\logic\GewechatLogic;
use app\common\controller\Backend;
class Wechat extends Backend
{
//查询微信好友列表
function getFriendList()
{
$res = (new GewechatLogic())->getFriendDetailList();
dump($res);die;
}
}

View File

@@ -0,0 +1,74 @@
<?php
/*
* description
* authorwh
* email
* createTime{2025/3/22} {14:06}
*/
namespace app\admin\logic;
class BaseLogic
{
static function curl_post_json(string $url, array $postdata, $header=[]) {
$tokenArr = (new TokenLogic())->getToken();
$postdata['appId'] = $tokenArr['appId'];
$domain = config('gewechat.base_url');
$timeout = 4;
$connect_timeout = 1;
$set_time_limit = 5;
if($timeout + $connect_timeout < $set_time_limit) throw new \Exception('脚本超时值必须大于等于连接超时与请求处理超时之和');
set_time_limit($set_time_limit);
$header = array_merge($header, array(
'X-GEWE-TOKEN:' .$tokenArr['token'],
'Content-Type: application/json',
'Accept: application/json'
));
//初始化
$curl = curl_init();
//设置抓取的url
curl_setopt($curl, CURLOPT_URL, $domain.$url);
//设置头文件的信息作为数据流输出
curl_setopt($curl, CURLOPT_HEADER, 0);
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// 超时设置
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
//发起连接前等待的时间如果设置为0则无限等待。
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $connect_timeout);
// 超时设置,以毫秒为单位
// curl_setopt($curl, CURLOPT_TIMEOUT_MS, 500);
// 设置请求头
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE );
//设置post方式提交
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($postdata,JSON_UNESCAPED_UNICODE));
//执行命令
$data = curl_exec($curl);
// 显示错误信息
if (curl_error($curl)) {
throw new \Exception('cURL error: ' . curl_error($curl));
//返回错误码
//return ['code'=>curl_errno($curl), 'msg'=>curl_error($curl)];
} else {
//关闭句柄
curl_close($curl);
// 返回的内容
$res = json_decode($data, true);
if($res['ret'] != 200){
throw new \Exception($res['msg']);
}
return $res;
}
}
}

View File

@@ -0,0 +1,81 @@
<?php
/*
* description
* authorwh
* email
* createTime{2025/3/22} {14:11}
*/
namespace app\admin\logic;
use wanghua\general_utility_tools_php\http\Curl;
use wanghua\general_utility_tools_php\tool\Tools;
class GewechatLogic extends BaseLogic
{
/**
* desc查询微信好友列表[不带昵称]
* authorwh
* @return array 返回的是好友的微信id需要昵称就要调好友查询接口
*
* array(3) {
["ret"] => int(200)
["msg"] => string(12) "操作成功"
["data"] => array(3) {
["friends"] => array(11) {
[0] => string(8) "fmessage"
[1] => string(9) "medianote"
[2] => string(11) "floatbottle"
[3] => string(8) "qmessage"
[4] => string(6) "qqmail"
[5] => string(6) "weixin"
[6] => string(19) "wxid_lqhlkt5nq80n12"
[7] => string(19) "wxid_xazzsfs57xt321"
[8] => string(8) "antas001"
[9] => string(19) "wxid_28a3dob3olc522"
[10] => string(19) "wxid_b7m1xkqu2s7l22"
}
["chatrooms"] => array(3) {
[0] => string(19) "7037032174@chatroom"
[1] => string(20) "52468523601@chatroom"
[2] => string(20) "52984126208@chatroom"
}
["ghs"] => array(1) {
[0] => string(15) "gh_3dfda90e39d6"
}
}
}
*
*
* @throws \Exception
*/
function getFriendWxIdsList()
{
$url = '/contacts/fetchContactsList';
$post_data = [];
Tools::log_to_write_txt(['查询微信好友列表[不带昵称],入参:$post_data'=>$post_data]);
$res = self::curl_post_json($url, $post_data);
Tools::log_to_write_txt(['查询微信好友列表[不带昵称],出参:$res'=>$res]);
return $res;
}
/**
* desc查询微信好友列表[带昵称]
* authorwh
* @return array 返回的是好友的微信id需要昵称就要调好友查询接口
* @throws \Exception
*/
function getFriendDetailList()
{
$wxids_arr = $this->getFriendWxIdsList();
$wxids = $wxids_arr['data']['friends'];
$url = '/contacts/getDetailInfo';
$post_data = ['wxids'=>$wxids];
Tools::log_to_write_txt(['查询微信好友列表[带昵称],入参:$post_data'=>$post_data]);
$res = self::curl_post_json($url, $post_data);
Tools::log_to_write_txt(['查询微信好友列表[带昵称],出参:$res'=>$res]);
return $res;
}
}

View File

@@ -0,0 +1,35 @@
<?php
/*
* description
* authorwh
* email
* createTime{2025/3/22} {14:04}
*/
namespace app\admin\logic;
class TokenLogic extends BaseLogic
{
/**
* desc
*
* array(3) {
["code"] => int(200)
["msg"] => string(7) "cURL ok"
["data"] => string(84) "{"gewe-token":"8bd053cb84f24770ae4df11441500427","appId":"wx_N3vKyMW8nl41epbcu891k"}"
}
* authorwh
* @return string
* @throws \Exception
*/
static function getToken()
{
$url = 'https://wechat-api-test.excn.vip/vip_groups/auth_info';
$res = \wanghua\general_utility_tools_php\http\Curl::curl_post($url, []);
$res_data = json_decode($res['data'], true);
return [
'token' => $res_data['gewe-token'],
'appId' => $res_data['appId'],
];
}
}

View File

@@ -507,7 +507,3 @@ EOT;
return $icon;
}
}
// 微信接口域名
function wxApiDomain(){
return 'https://gewechat-api-test.excn.vip';
}

View File

@@ -337,4 +337,7 @@ return [
//API接口地址
'api_url' => 'https://api.fastadmin.net',
],
'gewechat'=>[
'base_url'=>'https://wechat-api-test.excn.vip/v2/api'
]
];