package service import ( "bytes" "crypto/md5" "encoding/json" "fmt" "io" "math/rand" "net/http" "sort" "strings" "zhaoCaiMao/vo" "github.com/gogf/gf/v2/frame/g" ) type Cat struct { } var CatService Cat var letters = []rune("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ") // 招财猫签到 func (t *Cat) SignCat() error { req := vo.SignReq{} req.Vendor = "LANDI" req.Nonce = randStr(22) req.Sn = "LDNS3022890N637808" req.SignMethod = "md5" req.TerminalInfo = "测试请求" req.Sign = t.sign(&req) fmt.Println(req.Sign) jsonBody, err := json.Marshal(&req) if err != nil { g.Log().Line().Print(nil, err) return err } r, err := http.Post("https://rmb.pingan.com.cn:443", "application/json", bytes.NewBuffer(jsonBody)) if err != nil { g.Log().Line().Print(nil, err) return err } defer r.Body.Close() body, err := io.ReadAll(r.Body) fmt.Println(string(body)) if err != nil { g.Log().Line().Print(nil, err) return err } resp := vo.SignResp{} err = json.Unmarshal(body, &resp) if err != nil { g.Log().Line().Print(nil, err) return err } fmt.Println(resp) return nil } func (t *Cat) sign(req *vo.SignReq) string { parts := []string{} parts = append(parts, fmt.Sprintf("%s=%s", "nonce", req.Nonce)) parts = append(parts, fmt.Sprintf("%s=%s", "signMethod", req.SignMethod)) parts = append(parts, fmt.Sprintf("%s=%s", "sn", req.Sn)) parts = append(parts, fmt.Sprintf("%s=%s", "terminalInfo", req.TerminalInfo)) parts = append(parts, fmt.Sprintf("%s=%s", "vendor", req.Vendor)) sort.Strings(parts) data := strings.Join(parts, "&") data += fmt.Sprintf("&key=(%s)", "49df1a070e754da391493bfef5139282") fmt.Println(data) hash := md5.New() io.WriteString(hash, data) md5Sum := hash.Sum(nil) return fmt.Sprintf("%x", md5Sum) } func randStr(n int) string { b := make([]rune, n) for i := range b { b[i] = letters[rand.Intn(len(letters))] } return string(b) }