xdd-plus/models/available.go
2021-08-18 23:04:35 +08:00

178 lines
5.8 KiB
Go

package models
import (
"encoding/json"
"fmt"
"github.com/beego/beego/v2/client/httplib"
)
type UserInfoResult struct {
Data struct {
JdVvipCocoonInfo struct {
JdVvipCocoon struct {
DisplayType int `json:"displayType"`
HitTypeList []int `json:"hitTypeList"`
Link string `json:"link"`
Price string `json:"price"`
Qualification int `json:"qualification"`
SellingPoints string `json:"sellingPoints"`
} `json:"JdVvipCocoon"`
JdVvipCocoonStatus string `json:"JdVvipCocoonStatus"`
} `json:"JdVvipCocoonInfo"`
JdVvipInfo struct {
JdVvipStatus string `json:"jdVvipStatus"`
} `json:"JdVvipInfo"`
AssetInfo struct {
AccountBalance string `json:"accountBalance"`
BaitiaoInfo struct {
AvailableLimit string `json:"availableLimit"`
BaiTiaoStatus string `json:"baiTiaoStatus"`
Bill string `json:"bill"`
BillOverStatus string `json:"billOverStatus"`
Outstanding7Amount string `json:"outstanding7Amount"`
OverDueAmount string `json:"overDueAmount"`
OverDueCount string `json:"overDueCount"`
UnpaidForAll string `json:"unpaidForAll"`
UnpaidForMonth string `json:"unpaidForMonth"`
} `json:"baitiaoInfo"`
BeanNum string `json:"beanNum"`
CouponNum string `json:"couponNum"`
CouponRed string `json:"couponRed"`
RedBalance string `json:"redBalance"`
} `json:"assetInfo"`
FavInfo struct {
FavDpNum string `json:"favDpNum"`
FavGoodsNum string `json:"favGoodsNum"`
FavShopNum string `json:"favShopNum"`
FootNum string `json:"footNum"`
IsGoodsRed string `json:"isGoodsRed"`
IsShopRed string `json:"isShopRed"`
} `json:"favInfo"`
GrowHelperCoupon struct {
AddDays int `json:"addDays"`
BatchID int `json:"batchId"`
CouponKind int `json:"couponKind"`
CouponModel int `json:"couponModel"`
CouponStyle int `json:"couponStyle"`
CouponType int `json:"couponType"`
Discount float64 `json:"discount"`
LimitType int `json:"limitType"`
MsgType int `json:"msgType"`
Quota float64 `json:"quota"`
RoleID int `json:"roleId"`
State int `json:"state"`
Status int `json:"status"`
} `json:"growHelperCoupon"`
KplInfo struct {
KplInfoStatus string `json:"kplInfoStatus"`
Mopenbp17 string `json:"mopenbp17"`
Mopenbp22 string `json:"mopenbp22"`
} `json:"kplInfo"`
OrderInfo struct {
CommentCount string `json:"commentCount"`
Logistics []interface{} `json:"logistics"`
OrderCountStatus string `json:"orderCountStatus"`
ReceiveCount string `json:"receiveCount"`
WaitPayCount string `json:"waitPayCount"`
} `json:"orderInfo"`
PlusPromotion struct {
Status int `json:"status"`
} `json:"plusPromotion"`
UserInfo struct {
BaseInfo struct {
AccountType string `json:"accountType"`
BaseInfoStatus string `json:"baseInfoStatus"`
CurPin string `json:"curPin"`
DefinePin string `json:"definePin"`
HeadImageURL string `json:"headImageUrl"`
LevelName string `json:"levelName"`
Nickname string `json:"nickname"`
Pinlist string `json:"pinlist"`
UserLevel string `json:"userLevel"`
} `json:"baseInfo"`
IsHideNavi string `json:"isHideNavi"`
IsHomeWhite string `json:"isHomeWhite"`
IsJTH string `json:"isJTH"`
IsKaiPu string `json:"isKaiPu"`
IsPlusVip string `json:"isPlusVip"`
IsQQFans string `json:"isQQFans"`
IsRealNameAuth string `json:"isRealNameAuth"`
IsWxFans string `json:"isWxFans"`
Jvalue string `json:"jvalue"`
OrderFlag string `json:"orderFlag"`
PlusInfo struct {
} `json:"plusInfo"`
XbScore string `json:"xbScore"`
} `json:"userInfo"`
UserLifeCycle struct {
IdentityID string `json:"identityId"`
LifeCycleStatus string `json:"lifeCycleStatus"`
TrackID string `json:"trackId"`
} `json:"userLifeCycle"`
} `json:"data"`
Msg string `json:"msg"`
Retcode string `json:"retcode"`
Timestamp int64 `json:"timestamp"`
}
func initCookie() {
cks := GetJdCookies()
l := len(cks)
for i := 0; i < l-1; i++ {
if cks[i].Available == True && !CookieOK(&cks[i]) {
if pt_key, err := cks[i].OutPool(); err == nil && pt_key != "" {
i--
}
}
}
go func() {
Save <- &JdCookie{}
}()
}
func CookieOK(ck *JdCookie) bool {
// tytCoupon(fmt.Sprintf("pt_key=%s;pt_pin=%s;", ck.PtKey, ck.PtPin))
if ck == nil {
return true
}
req := httplib.Get("https://me-api.jd.com/user_new/info/GetJDUserInfoUnion")
req.Header("Cookie", fmt.Sprintf("pt_key=%s;pt_pin=%s;", ck.PtKey, ck.PtPin))
req.Header("Accept", "*/*")
req.Header("Accept-Language", "zh-cn,")
req.Header("Connection", "keep-alive,")
req.Header("Referer", "https://home.m.jd.com/myJd/newhome.action?sceneval=2&ufc=&")
req.Header("Host", "me-api.jd.com")
req.Header("User-Agent", "jdapp;iPhone;9.4.4;14.3;network/4g;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1")
data, err := req.Bytes()
if err != nil {
return true
}
ui := &UserInfoResult{}
if nil != json.Unmarshal(data, ui) {
return true
}
switch ui.Retcode {
case "1001": //ck.BeanNum
if ui.Msg == "not login" {
if ck.Available == True {
ck.Push(fmt.Sprintf("失效账号,%s", ck.PtPin))
}
return false
}
case "0":
if ui.Data.UserInfo.BaseInfo.Nickname != ck.Nickname || ui.Data.AssetInfo.BeanNum != ck.BeanNum {
ck.Updates(JdCookie{
Nickname: ui.Data.UserInfo.BaseInfo.Nickname,
BeanNum: ui.Data.AssetInfo.BeanNum,
Available: True,
})
ck.Nickname = ui.Data.UserInfo.BaseInfo.Nickname
ck.BeanNum = ui.Data.AssetInfo.BeanNum
}
default:
}
return true
}