84 lines
1.9 KiB
Go
84 lines
1.9 KiB
Go
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)
|
|
}
|