package business import ( "encoding/json" "errors" "fmt" "ocean/utils" ) const getQrcodeUrl = "https://sso.oceanengine.com/get_qrcode/?fp&aid=1402&language=zh&account_sdk_source=we" type getQrcodeResponse struct { Data struct { AppName string `json:"app_name"` IsFrontier bool `json:"is_frontier"` Qrcode string `json:"qrcode"` QrcodeIndexURL string `json:"qrcode_index_url"` Token string `json:"token"` WebName string `json:"web_name"` } `json:"data"` Description string `json:"description"` ErrorCode int `json:"error_code"` Message string `json:"message"` } type FormatQrcodeRespone struct { Url string `json:"url"` Token string `json:"token"` Qrcode string `json:"qrcode"` XBogus string `json:"X-Bogus"` MsToken string `json:"msToken"` } func (c *Client) GetQrcode(ua string) (data *FormatQrcodeRespone, err error) { sign, err := utils.XbogusSign(getQrcodeUrl, ua) if err != nil { return } msToken := utils.XbogusMsToken() url := fmt.Sprintf("%s&X-Bogus=%s&msToken=%s", getQrcodeUrl, sign, msToken) header := map[string]string{ "Origin": "https://business.oceanengine.com", "Referer": "https://business.oceanengine.com", } resp, cookies, err := utils.Get(url, header) if err != nil { return } result := &getQrcodeResponse{} err = json.Unmarshal(resp, result) if err != nil || result.ErrorCode != 0 { return nil, errors.New(result.Description) } for _, cookie := range cookies { if cookie.Name == "passport_csrf_token" { c.ctx.BusinessCookie[cookie.Name] = cookie.Value } if cookie.Name == "passport_csrf_token_default" { c.ctx.BusinessCookie[cookie.Name] = cookie.Value } } format := &FormatQrcodeRespone{ Url: url, MsToken: msToken, Qrcode: result.Data.Qrcode, Token: result.Data.Token, XBogus: sign, } return format, nil }