oceane/ocean/business/getqrcode.go
2023-05-15 11:35:10 +08:00

85 lines
1.8 KiB
Go

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
}