package cmd import ( "crypto/md5" "encoding/base64" "encoding/hex" "fmt" "math/rand" "time" "github.com/go-resty/resty/v2" "github.com/mizuki1412/go-core-kit/class/exception" "github.com/mizuki1412/go-core-kit/service/configkit" "github.com/spf13/cast" "github.com/spf13/cobra" "github.com/tidwall/gjson" ) func init() { rootCmd.AddCommand(testCmd) } var testCmd = &cobra.Command{ Use: "test", Short: "Only for test", Run: func(cmd *cobra.Command, args []string) { res := getUserIds() fmt.Println(res) for _, v := range res { result, err := CheckUser( v, WMSToken, ) if err != nil { panic(exception.New(err.Error())) } moduleResultList := gjson.Get(result, "data.moduleResultList").Array() qianfei := moduleResultList[0].Get("itemList").Array()[3].Get("itemResult").String() lixian := moduleResultList[3].Get("itemList").Array()[0].Get("itemResult").String() if qianfei == "是" && lixian == "离线" { fmt.Println(v + " 欠费且离线") } } }, } func getUserIds() []string { var m []string client := resty.New().SetRetryCount(5).SetRetryWaitTime(20 * time.Second) resp, err := client.R(). SetHeaders(map[string]string{ "Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "eyJhbGciOiJIUzUxMiJ9.eyJ1c2VyX2lkIjo5MzYsInVzZXJfa2V5IjoiNzYzNjQyZTktNmMyZS00ODdkLWE3NWItNTM5NGYyZmFmMjBlIiwidXNlcm5hbWUiOiJ2emphZXhoeTAxMzMifQ.42oypkCmHDoqrRHI2J0K-7Ub2Acc7YjfaddW8xlOjirjaeGtW8Xy1sSUrLDDS0_ep2qgmO8Yj9tqUlHFhYjzVw")), "Content-Type": "application/json;charset=UTF-8", "Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "eyJhbGciOiJIUzUxMiJ9.eyJ1c2VyX2lkIjo5MzYsInVzZXJfa2V5IjoiNzYzNjQyZTktNmMyZS00ODdkLWE3NWItNTM5NGYyZmFmMjBlIiwidXNlcm5hbWUiOiJ2emphZXhoeTAxMzMifQ.42oypkCmHDoqrRHI2J0K-7Ub2Acc7YjfaddW8xlOjirjaeGtW8Xy1sSUrLDDS0_ep2qgmO8Yj9tqUlHFhYjzVw")), "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36", }).SetBody(map[string]string{ "eqptId": "124390484", "regionId": "A", }).Post("http://132.151.25.19:15609/prod-api/eqpt/resEqpt/portOfEqpt") if err != nil { panic(exception.New(err.Error())) } arr := gjson.Get(resp.String(), "data").Array() for i, v := range arr { if i == 0 || v.Get("STATE").String() != "A" { continue } else { id := v.Get("SUBSCRIBER_ID").String() resp, err = client.R(). SetHeaders(map[string]string{ "Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "eyJhbGciOiJIUzUxMiJ9.eyJ1c2VyX2lkIjo5MzYsInVzZXJfa2V5IjoiNzYzNjQyZTktNmMyZS00ODdkLWE3NWItNTM5NGYyZmFmMjBlIiwidXNlcm5hbWUiOiJ2emphZXhoeTAxMzMifQ.42oypkCmHDoqrRHI2J0K-7Ub2Acc7YjfaddW8xlOjirjaeGtW8Xy1sSUrLDDS0_ep2qgmO8Yj9tqUlHFhYjzVw")), "Content-Type": "application/json;charset=UTF-8", "Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "eyJhbGciOiJIUzUxMiJ9.eyJ1c2VyX2lkIjo5MzYsInVzZXJfa2V5IjoiNzYzNjQyZTktNmMyZS00ODdkLWE3NWItNTM5NGYyZmFmMjBlIiwidXNlcm5hbWUiOiJ2emphZXhoeTAxMzMifQ.42oypkCmHDoqrRHI2J0K-7Ub2Acc7YjfaddW8xlOjirjaeGtW8Xy1sSUrLDDS0_ep2qgmO8Yj9tqUlHFhYjzVw")), "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36", }).SetQueryParams(map[string]string{ "productInstanceId": id, "regionId": "A", "state": "A", "sysMenuId": "2166", }).Get("http://132.151.25.19:15609/prod-api/resource/queryProductInfo/portUserList") if err != nil { panic(exception.New(err.Error())) } if len(gjson.Get(resp.String(), "data").Array()) > 0 { m = append(m, gjson.Get(resp.String(), "data").Array()[0].Get("bandNumber").String()) } } } return m } const ( AppID = "gkSystem" AppSec = "123456" UserType = 1 WMSToken = "2521870EF1B066C03DAE4A3F954961A4C22BC06A5FBCD5B54AD4586B24755772817529295CB7A609E022DE1810993F01" ) const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" func randomString(n int) string { r := rand.New(rand.NewSource(time.Now().UnixNano())) b := make([]byte, n) for i := range b { b[i] = chars[r.Intn(len(chars))] } return string(b) } func buildSign() (string, string, int64) { timestamp := time.Now().UnixMilli() nonceStr := randomString(32) raw := fmt.Sprintf( "%s_%s_%d_%s", AppID, AppSec, timestamp, nonceStr, ) sum := md5.Sum([]byte(raw)) md5Hex := hex.EncodeToString(sum[:]) sign := base64.StdEncoding.EncodeToString( []byte(md5Hex), ) return sign, nonceStr, timestamp } func CheckUser(account string, token string) (string, error) { sign, nonceStr, timestamp := buildSign() body := map[string]any{ "account": base64.StdEncoding.EncodeToString([]byte(account)), "type": UserType, "appId": AppID, "sign": sign, "nonceStr": nonceStr, "timestamp": timestamp, } resp, err := resty.New(). R(). SetHeader("Content-Type", "application/json"). SetQueryParam("touchKey", AppID). SetQueryParam("appSec", AppSec). SetQueryParam("token", token). SetBody(body). Post("https://zjgkappservice.zj186.com/diagnosed/checkUser") if err != nil { panic(exception.New(err.Error())) } return resp.String(), nil }