go语言实现服务器与微信公众平台对接

微信对接文档:点击查看

在这不得不吐槽一下,写的什么玩意文档,给的例子真他么垃圾,文档说是返回echostr,例子给返回个true,false要不要这么误导人。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
type GetSignature struct {
Signature string `json:"signature"` //微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
Timestamp string `json:"timestamp"` //时间戳
Nonce string `json:"nonce"` //随机数
Echostr string `json:"echostr"` //随机字符串
}

func signature(r *ghttp.Request) {
getSignature := new(GetSignature)
r.GetToStruct(getSignature)
sign := getSignature.Signature
nonce := getSignature.Nonce
timestamp := getSignature.Timestamp
echostr := getSignature.Echostr
strs := []string{token, timestamp, nonce}
sort.Strings(strs)

tempStr := fmt.Sprintf("%s%s%s", strs[0], strs[1], strs[2])
h := sha1.New()
io.WriteString(h, tempStr)
result := fmt.Sprintf("%x", h.Sum(nil))
if result != sign {
// 等不等于都让它返回正确的结果,zz验证
r.Response.Write(echostr)
return
}
r.Response.Write(echostr)
}

完全搞不懂微信他们到底要搞什么骚操作,这是什么垃圾验证,中间做了一大堆算法,其实一点屁用都没有,直接用下面这个粗暴的版本也可以:

1
2
3
4
5
6
7
func signature(r *ghttp.Request) {
getSignature := new(GetSignature)
r.GetToStruct(getSignature)
echostr := getSignature.Echostr
// 直接返回就可以了
r.Response.Write(echostr)
}
-------------本文结束感谢您的阅读-------------