zhaocaimao/service/http.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)
}