package main import ( "crypto/md5" "encoding/hex" "encoding/json" "fmt" "io/ioutil" "net/http" "net/url" "sort" "strings" "time" ) func main() { method := "GET" // Request method: GET, POST secretType := "MD5" // Verification method: MD5, Hash (configured in backend) apiURL := "https://登录后显示/api/22/128" appid := "应用id" // Get from your application settings in Wapi.cn secret := "应用密钥" // Get from your application settings in Wapi.cn // Prepare request data data := map[string]string{ "appid": "1", "date": "2021-08-17", "format": "json", "time": "1545829466", } data['appid'] = appid data['time'] = fmt.Sprintf("%d", time.Now().Unix()) // Generate signature based on secret type if secretType == "MD5" { // Sort keys alphabetically keys := make([]string, 0, len(data)) for k := range data { keys = append(keys, k) } sort.Strings(keys) // Build MD5 string var md5String strings.Builder for _, k := range keys { v := data[k] if len(v) > 0 { // Skip empty values md5String.WriteString(k) md5String.WriteString(v) } } md5String.WriteString(secret) // Calculate MD5 hash hash := md5.Sum([]byte(md5String.String())) data["sign"] = hex.EncodeToString(hash[:]) } else if secretType == "HASH" { data["sign"] = secret } var result []byte var err error if method == "GET" { // Build URL with query parameters queryParams := url.Values{} for k, v := range data { queryParams.Add(k, v) } fullURL := apiURL + "?" + queryParams.Encode() // Make GET request resp, err := http.Get(fullURL) if err != nil { fmt.Printf("Error making GET request: %v\n", err) return } defer resp.Body.Close() result, err = ioutil.ReadAll(resp.Body) if err != nil { fmt.Printf("Error reading response: %v\n", err) return } } else { // Prepare POST request formData := url.Values{} for k, v := range data { formData.Add(k, v) } req, err := http.NewRequest("POST", apiURL, strings.NewReader(formData.Encode())) if err != nil { fmt.Printf("Error creating POST request: %v\n", err) return } req.Header.Set("Content-Type", "application/x-www-form-urlencoded;charset=utf-8") client := &http.Client{} resp, err := client.Do(req) if err != nil { fmt.Printf("Error making POST request: %v\n", err) return } defer resp.Body.Close() result, err = ioutil.ReadAll(resp.Body) if err != nil { fmt.Printf("Error reading response: %v\n", err) return } } // Parse JSON response var responseData map[string]interface{} if err := json.Unmarshal(result, &responseData); err != nil { fmt.Printf("Error parsing JSON response: %v\n", err) return } // Print the result (similar to PHP's print_r) fmt.Printf("%+v\n", responseData) }