package main import ( "bytes" "encoding/json" "fmt" "io/ioutil" "log" "net/http" ) func signIn(config interface{}, accessToken string, phone string) bool { url := "https://member.aliyundrive.com/v1/activity/sign_in_list" reqBody, err := json.Marshal(map[string]interface{}{}) if err != nil { log.Printf("[%s] 签到失败, 错误信息: %v\n", phone, err) return false } req, err := http.NewRequest("POST", url, bytes.NewBuffer(reqBody)) if err != nil { log.Printf("[%s] 签到失败, 错误信息: %v\n", phone, err) return false } req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", accessToken)) req.Header.Set("Content-Type", "application/json") client := &http.Client{} resp, err := client.Do(req) if err != nil { log.Printf("[%s] 签到失败, 错误信息: %v\n", phone, err) return false } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { log.Printf("[%s] 签到失败, 错误信息: %v\n", phone, err) return false } var data map[string]interface{} err = json.Unmarshal(body, &data) if err != nil { log.Printf("[%s] 签到失败, 错误信息: %v\n", phone, err) return false } if _, ok := data["success"]; !ok { log.Printf("[%s] 签到失败, 错误信息: %v\n", phone, data) return false } var currentDay map[string]interface{} for i, day := range data["result"].(map[string]interface{})["signInLogs"].([]interface{}) { if day.(map[string]interface{})["status"].(string) == "miss" { currentDay = data["result"].(map[string]interface{})["signInLogs"].([]interface{})[i-1].(map[string]interface{}) break } } reward := "无奖励" if currentDay != nil && currentDay["isReward"].(bool) { reward = fmt.Sprintf("获得 %s %s", currentDay["reward"].(map[string]interface{})["name"].(string), currentDay["reward"].(map[string]interface{})["description"].(string)) } log.Printf("[%s] 签到成功, 本月累计签到 %d 天.\n", phone, int(data["result"].(map[string]interface{})["signInCount"].(float64))) log.Printf("[%s] 本次签到 %s\n", phone, reward) push(config, phone, reward, int(data["result"].(map[string]interface{})["signInCount"].(float64))) return true } func push(config interface{}, phone string, reward string, signInCount int) { // push notification implementation here } func main() { // Example usage: accessToken := "your-access-token" phone := "your-phone-number" config := map[string]interface{}{} // or ConfigObj object signIn(config, accessToken, phone) }