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

版权声明:本文为博主原创文章,转载请标明出处和链接! https://blog.csdn.net/junmoxi/article/details/85411288

微信对接文档:点击查看

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

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)
}

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

func signature(r *ghttp.Request) {
	getSignature := new(GetSignature)
	r.GetToStruct(getSignature)
	echostr := getSignature.Echostr
	// 直接返回就可以了
	r.Response.Write(echostr)
}

猜你喜欢

转载自blog.csdn.net/junmoxi/article/details/85411288