Files
kami_backend/utility/integration/pig/api.go
danial 15e2426e85 feat(camel_oil): 新增骆驼加油账号管理模块
- 实现账号增删改查接口和逻辑
- 支持账号状态更新及状态历史记录功能
- 提供账号列表、历史和统计信息查询API
- 实现账号轮询机制,支持按使用时间轮询获取账号
- 增加账号登录流程及批量登录功能,集成接码平台和平台API
- 管理账号订单容量,支持容量检查与账号登录触发
- 提供账号池状态统计接口
- 账号历史记录查询支持多种变更类型文本展示
- 密码等敏感信息采用脱敏展示
- 完善日志记录和错误处理机制,保证业务稳定运行
2025-11-21 00:49:50 +08:00

116 lines
2.8 KiB
Go

package pig
import (
"context"
"encoding/json"
"fmt"
"github.com/gogf/gf/v2/os/glog"
"github.com/gogf/gf/v2/os/gtime"
"kami/utility/cache"
"sync"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/gclient"
)
type InternalClient struct {
Client *gclient.Client
}
var client *InternalClient
func NewClient() *InternalClient {
sync.OnceFunc(func() {
client = &InternalClient{
Client: g.Client(),
}
})()
return client
}
func (c *InternalClient) getToken(ctx context.Context) (string, error) {
tokenKey := cache.PrefixTracePigAccount.Key("PrefixTracePigAccount")
tokenVar, err := cache.NewCache().Get(ctx, tokenKey)
if err != nil {
return "", err
}
token := ""
if tokenVar != nil && tokenVar.String() != "" {
return tokenVar.String(), nil
}
resp, err := c.Client.Post(ctx, fmt.Sprintf("https://api.haozhuyun.com/sms/?api=login&user=%s&pass=%s",
"19d3db76c14358397ffec25d2da18a36fe0837487d758d8445a54d783a9d1eaf",
"72112378425489db7fdca2caf9daa97ba9d50b84511d2c11c940e1db362d50b6"),
)
if err != nil {
return "", err
}
respData := struct {
Token string `json:"token"`
Code int `json:"code"`
Msg string `json:"msg"`
}{}
err = json.Unmarshal(resp.ReadAll(), &respData)
if err != nil {
return "", err
}
if respData.Token == "" {
return "", fmt.Errorf("获取token失败")
}
_ = cache.NewCache().Set(ctx, tokenKey, respData.Token, gtime.D)
return token, nil
}
// GetAccountInfo 获取账号信息
func (c *InternalClient) GetAccountInfo(ctx context.Context) (string, error) {
token, err := c.getToken(ctx)
if err != nil {
return "", err
}
respBody := struct {
Token string `json:"token"`
SID int `json:"sid"`
}{
Token: token,
SID: 21108,
}
resp, err := c.Client.Post(ctx, fmt.Sprintf("https://api.haozhuyun.com/sms?api=getPhone&token=%s&sid=%d&Province=&ascription=&isp=", respBody.Token, respBody.SID))
if err != nil {
return "", err
}
respStruct := struct {
Phone string `json:"phone"`
}{}
err = json.Unmarshal(resp.ReadAll(), &respStruct)
return respStruct.Phone, err
}
// CheckVerifyCode 检测验证码是否已接收
func (c *InternalClient) CheckVerifyCode(ctx context.Context, phone string) (code string, received bool, err error) {
token, err := c.getToken(ctx)
if err != nil {
return "", false, err
}
//构建 url 请求
resp, err := c.Client.Post(ctx, fmt.Sprintf("https://api.haozhuwang.cn/sms/?api=getMessage&token=%s&sid=%s&phone=%s", token, "21108", phone))
if err != nil {
return "", false, err
}
respStruct := struct {
Code json.Number `json:"code"`
Msg string `json:"msg"`
Sms string `json:"sms"`
Yzm string `json:"yzm"`
}{}
err = json.Unmarshal(resp.ReadAll(), &respStruct)
if err != nil {
return "", false, err
}
glog.Info(ctx, respStruct)
if respStruct.Code != "0" {
return "", false, nil
}
return respStruct.Yzm, true, nil
}