feat: 优化 Rocketgo 类,重构验证码获取和登录逻辑,增加分页获取账号列表功能
This commit is contained in:
parent
f4b1d6946f
commit
8e7b2b3245
|
@ -6,7 +6,7 @@ use GuzzleHttp\Client;
|
||||||
use support\Log;
|
use support\Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 第三方 小火箭api
|
* 第三方 前端 小火箭api
|
||||||
* 网址
|
* 网址
|
||||||
* https://dx1.rocketgo.vip/setting/account/account
|
* https://dx1.rocketgo.vip/setting/account/account
|
||||||
*/
|
*/
|
||||||
|
@ -16,16 +16,19 @@ class Rocketgo
|
||||||
* TOKEN
|
* TOKEN
|
||||||
*/
|
*/
|
||||||
protected static $token = "eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjFlMTRlZWQ3LTEyODUtNGFjNi1hMzFhLTFlNWQ5OTEzMTJhYSJ9.BJgOhw1VKX1i9VfYKLIzF1zXUZMi4idO9Sb-p6p_rMKJanmt4is9slky7SqvSEXqhJ6USMGs2wqMY3tYJrH-hw";
|
protected static $token = "eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjFlMTRlZWQ3LTEyODUtNGFjNi1hMzFhLTFlNWQ5OTEzMTJhYSJ9.BJgOhw1VKX1i9VfYKLIzF1zXUZMi4idO9Sb-p6p_rMKJanmt4is9slky7SqvSEXqhJ6USMGs2wqMY3tYJrH-hw";
|
||||||
protected static $baseurl = "https://dx1.rocketgo.vip";
|
|
||||||
//单例复用http客户端
|
protected static $baseurl = "https://dx1.rocketgo.vip"; // URL前缀
|
||||||
public static $client = null;
|
|
||||||
|
// 单例复用 http 客户端
|
||||||
|
protected static $client = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取 Guzzle 客户端
|
* 获取 Guzzle 客户端
|
||||||
* 用于复用 客户端常驻内存
|
* 用于复用 客户端常驻内存
|
||||||
*
|
*
|
||||||
* @return object
|
* @return object
|
||||||
*/
|
*/
|
||||||
public static function get_client()
|
protected static function get_client()
|
||||||
{
|
{
|
||||||
if (self::$client == null) {
|
if (self::$client == null) {
|
||||||
self::$client = new Client([
|
self::$client = new Client([
|
||||||
|
@ -40,33 +43,95 @@ class Rocketgo
|
||||||
}
|
}
|
||||||
return self::$client;
|
return self::$client;
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
* 获取base64图形验证码
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public static function get_captchaImage()
|
|
||||||
{
|
|
||||||
$client = new Client(); // 创建 Guzzle 客户端
|
|
||||||
// 请求数据
|
|
||||||
// 发送 POST 请求
|
|
||||||
$response = $client->get("self::baseurl/prod-api1/captchaImage");
|
|
||||||
|
|
||||||
// 获取响应体内容
|
/**
|
||||||
$body = $response->getBody();
|
* 获取 base64 图形验证码
|
||||||
$responseData = json_decode($body, true); // 如果返回的是 JSON 格式,解析它
|
*
|
||||||
return $responseData;
|
* @return mixed
|
||||||
}
|
*/
|
||||||
//login发送参数
|
protected static function get_captchaImage()
|
||||||
// {
|
|
||||||
// "username": "h102067452",
|
|
||||||
// "password": "yBQnfuBShGl1MTBN",
|
|
||||||
// "code": "23",
|
|
||||||
// "uuid": "9cbe6a9037dc47cf80c9f2a23c0672a5"
|
|
||||||
// }
|
|
||||||
public static function login($username, $password, $code, $uuid)
|
|
||||||
{
|
{
|
||||||
$client = new Client(); // 创建 Guzzle 客户端
|
$client = self::get_client(); // 创建 Guzzle 客户端
|
||||||
|
|
||||||
|
// 发送 GET 请求
|
||||||
|
try {
|
||||||
|
$response = $client->get("https://dx1.rocketgo.vip/prod-api3/captchaImage");
|
||||||
|
|
||||||
|
// 获取响应体内容
|
||||||
|
$body = $response->getBody();
|
||||||
|
$responseData = json_decode($body, true);
|
||||||
|
|
||||||
|
if ($responseData['code'] == 200) {
|
||||||
|
return $responseData;
|
||||||
|
}
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
Log::error("请求验证码失败: " . $e->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取第三方 API 可识别成功的验证码
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
protected static function get_captchaImage_available()
|
||||||
|
{
|
||||||
|
$captchaImage = self::get_captchaImage();
|
||||||
|
|
||||||
|
if ($captchaImage == -1) {
|
||||||
|
Log::error("请求验证码失败: " . json_encode($captchaImage));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
$uuid = $captchaImage['uuid'];
|
||||||
|
$img = $captchaImage['img'];
|
||||||
|
|
||||||
|
// 调用验证码识别接口
|
||||||
|
$code = Verification::get_captchaImage($img)['data'];
|
||||||
|
|
||||||
|
|
||||||
|
if ($code == -1) {
|
||||||
|
Log::error("调用接口验证码识别失败: ");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 验证验证码是否是2位数字
|
||||||
|
if (preg_match('/^\d{2}$/', $code)) {
|
||||||
|
return [
|
||||||
|
'code' => $code,
|
||||||
|
'uuid' => $uuid
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 登录方法
|
||||||
|
*
|
||||||
|
* @param string $username
|
||||||
|
* @param string $password
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function login($username, $password)
|
||||||
|
{
|
||||||
|
$code = "";
|
||||||
|
$uuid = "";
|
||||||
|
|
||||||
|
// 获取有效验证码并循环尝试直到成功
|
||||||
|
while (true) {
|
||||||
|
$captchaImage = self::get_captchaImage_available();
|
||||||
|
if ($captchaImage != -1) {
|
||||||
|
$code = $captchaImage['code'];
|
||||||
|
$uuid = $captchaImage['uuid'];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$client = self::get_client(); // 创建 Guzzle 客户端
|
||||||
|
|
||||||
// 请求数据
|
// 请求数据
|
||||||
$data = [
|
$data = [
|
||||||
"username" => $username,
|
"username" => $username,
|
||||||
|
@ -74,25 +139,218 @@ class Rocketgo
|
||||||
"code" => $code,
|
"code" => $code,
|
||||||
"uuid" => $uuid,
|
"uuid" => $uuid,
|
||||||
];
|
];
|
||||||
// 发送 POST 请求
|
|
||||||
$response = $client->post("self::1baseurl/prod-api1/login", [
|
|
||||||
'json' => $data, // 以 JSON 格式发送数据
|
|
||||||
]);
|
|
||||||
// 获取响应体内容
|
|
||||||
$body = $response->getBody();
|
|
||||||
$responseData = json_decode($body, true); // 如果返回的是 JSON 格式,解析它
|
|
||||||
return $responseData;
|
|
||||||
}
|
|
||||||
public static function account_list()
|
|
||||||
{
|
|
||||||
$client = new Client(); // 创建 Guzzle 客户端
|
|
||||||
// 请求数据
|
|
||||||
// 发送 POST 请求
|
|
||||||
$response = $client->get("self::1baseurl/prod-api1/biz/account/list?pageNum=1&pageSize=1000&accountStatus=1&sendCount=0");
|
|
||||||
|
|
||||||
// 获取响应体内容
|
try {
|
||||||
$body = $response->getBody();
|
// 发送 POST 请求
|
||||||
$responseData = json_decode($body, true); // 如果返回的是 JSON 格式,解析它
|
$response = $client->post("https://dx1.rocketgo.vip/prod-api3/login", [
|
||||||
return $responseData;
|
'json' => $data, // 以 JSON 格式发送数据
|
||||||
|
]);
|
||||||
|
|
||||||
|
// 获取响应体内容
|
||||||
|
$body = $response->getBody();
|
||||||
|
$responseData = json_decode($body, true);
|
||||||
|
if ($responseData['code'] == 200) {
|
||||||
|
self::$token = $responseData['token'];
|
||||||
|
return $responseData['token'];
|
||||||
|
}
|
||||||
|
return $responseData;
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
Log::error("登录失败: " . $e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static function get_token()
|
||||||
|
{
|
||||||
|
return self::$token;
|
||||||
|
}
|
||||||
|
protected static function set_token($token)
|
||||||
|
{
|
||||||
|
self::$token = $token;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 测试token是否有效
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
protected static function test_login()
|
||||||
|
{
|
||||||
|
$client = self::get_client(); // 创建 Guzzle 客户端
|
||||||
|
try {
|
||||||
|
// 发送 GET 请求
|
||||||
|
$response = $client->get("https://dx1.rocketgo.vip/prod-api2/biz/account/getLoginUserInfo", [
|
||||||
|
'headers' => [
|
||||||
|
'Authorization' => self::$token,
|
||||||
|
'Accept' => 'application/json', // 设置其他头信息
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
|
// 获取响应体内容
|
||||||
|
$body = $response->getBody();
|
||||||
|
$responseData = json_decode($body, true);
|
||||||
|
if ($responseData['code'] == 401) {
|
||||||
|
Log::info("登录过期需要重新登录");
|
||||||
|
self::login('h102067452', 'yBQnfuBShGl1MTBN');
|
||||||
|
}
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
Log::error("检测登录是否过期失败: " . $e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取账号列表(分页)
|
||||||
|
*
|
||||||
|
* @param int $pageSize 每页数据量,默认为 1000
|
||||||
|
* @return array
|
||||||
|
* logged 1 在线 0不在线
|
||||||
|
* failedReason 失败类型 正常为空
|
||||||
|
* username ws号码
|
||||||
|
*/
|
||||||
|
public static function account_list($pageSize = 100)
|
||||||
|
{
|
||||||
|
$client = self::get_client(); // 创建 Guzzle 客户端
|
||||||
|
$allData = []; // 用来存储所有分页的数据
|
||||||
|
$pageNum = 1; // 从第一页开始
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 首次请求,获取 total 数据量
|
||||||
|
$response = $client->get(self::$baseurl . "/prod-api2/biz/account/list", [
|
||||||
|
'query' => [
|
||||||
|
'pageNum' => $pageNum,
|
||||||
|
'pageSize' => $pageSize,
|
||||||
|
'sendCount' => 0,
|
||||||
|
'isAll' => 1,
|
||||||
|
],
|
||||||
|
'headers' => [
|
||||||
|
'Authorization' => 'Bearer ' . self::$token,
|
||||||
|
'Accept' => 'application/json', // 设置其他头信息
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
|
// 获取响应体内容
|
||||||
|
$body = $response->getBody();
|
||||||
|
$responseData = json_decode($body, true);
|
||||||
|
|
||||||
|
// 检查响应是否成功
|
||||||
|
if ($responseData['code'] == 200) {
|
||||||
|
$total = $responseData['total']; // 获取总数据量
|
||||||
|
$totalPages = ceil($total / $pageSize); // 计算总页数
|
||||||
|
|
||||||
|
// 合并第一页数据
|
||||||
|
$allData = array_merge($allData, $responseData['rows']);
|
||||||
|
|
||||||
|
// 循环获取其他页的数据
|
||||||
|
for ($pageNum = 2; $pageNum <= $totalPages; $pageNum++) {
|
||||||
|
$response = $client->get(self::$baseurl . "/prod-api2/biz/account/list", [
|
||||||
|
'query' => [
|
||||||
|
'pageNum' => $pageNum,
|
||||||
|
'pageSize' => $pageSize,
|
||||||
|
'sendCount' => 0,
|
||||||
|
'isAll' => 1,
|
||||||
|
],
|
||||||
|
'headers' => [
|
||||||
|
'Authorization' => 'Bearer ' . self::$token,
|
||||||
|
'Accept' => 'application/json',
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
|
// 获取响应体内容
|
||||||
|
$body = $response->getBody();
|
||||||
|
$responseData = json_decode($body, true);
|
||||||
|
|
||||||
|
if ($responseData['code'] == 200) {
|
||||||
|
// 合并当前页的数据
|
||||||
|
$allData = array_merge($allData, $responseData['rows']);
|
||||||
|
} else {
|
||||||
|
Log::error("获取账号列表失败,错误信息: " . $responseData['msg']);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Log::error("获取账号列表失败,错误信息: " . $responseData['msg']);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $allData; // 返回所有数据
|
||||||
|
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
Log::error("获取账号列表失败: " . $e->getMessage());
|
||||||
|
return []; // 返回空数组,表示请求失败
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取仓库账号列表(分页)
|
||||||
|
*
|
||||||
|
* @param int $pageSize 每页数据量,默认为 1000
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function account_storehouse_list($pageSize = 1000)
|
||||||
|
{
|
||||||
|
$client = self::get_client(); // 创建 Guzzle 客户端
|
||||||
|
$allData = []; // 用来存储所有分页的数据
|
||||||
|
$pageNum = 1; // 当前页数从 1 开始
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 发送初始请求,获取 total 数据量
|
||||||
|
$response = $client->get(self::$baseurl . "/prod-api2/biz/account/list", [
|
||||||
|
'query' => [
|
||||||
|
'pageNum' => $pageNum,
|
||||||
|
'pageSize' => $pageSize,
|
||||||
|
'accountType' => 2, // 只查询仓库类型的账号
|
||||||
|
'isAll' => 1, // 查询所有账号
|
||||||
|
],
|
||||||
|
'headers' => [
|
||||||
|
'Authorization' => 'Bearer ' . self::$token,
|
||||||
|
'Accept' => 'application/json', // 设置其他头信息
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
|
// 获取响应体内容
|
||||||
|
$body = $response->getBody();
|
||||||
|
$responseData = json_decode($body, true);
|
||||||
|
|
||||||
|
// 检查响应是否成功
|
||||||
|
if ($responseData['code'] == 200) {
|
||||||
|
$total = $responseData['total']; // 获取总数据量
|
||||||
|
$totalPages = ceil($total / $pageSize); // 计算总页数
|
||||||
|
|
||||||
|
// 循环获取分页数据
|
||||||
|
for ($pageNum = 1; $pageNum <= $totalPages; $pageNum++) {
|
||||||
|
// 发送 GET 请求,带上分页参数
|
||||||
|
$response = $client->get(self::$baseurl . "/prod-api2/biz/account/list", [
|
||||||
|
'query' => [
|
||||||
|
'pageNum' => $pageNum,
|
||||||
|
'pageSize' => $pageSize,
|
||||||
|
'accountType' => 2,
|
||||||
|
'isAll' => 1,
|
||||||
|
],
|
||||||
|
'headers' => [
|
||||||
|
'Authorization' => 'Bearer ' . self::$token,
|
||||||
|
'Accept' => 'application/json', // 设置其他头信息
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
|
// 获取响应体内容
|
||||||
|
$body = $response->getBody();
|
||||||
|
$responseData = json_decode($body, true);
|
||||||
|
|
||||||
|
// 检查响应是否成功
|
||||||
|
if ($responseData['code'] == 200) {
|
||||||
|
$allData = array_merge($allData, $responseData['rows']); // 合并当前页的数据
|
||||||
|
} else {
|
||||||
|
Log::error("获取仓库账号列表失败,错误信息: " . $responseData['msg']);
|
||||||
|
break; // 如果请求失败,退出循环
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $allData; // 返回所有数据
|
||||||
|
} else {
|
||||||
|
Log::error("获取仓库账号列表失败,错误信息: " . $responseData['msg']);
|
||||||
|
return []; // 返回空数组,表示请求失败
|
||||||
|
}
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
Log::error("获取仓库账号列表失败: " . $e->getMessage());
|
||||||
|
return []; // 返回空数组,表示请求失败
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue