需要先完成文档中的前提条件。
// 对应小程序后台-「开发」-「开发设置」-「消息推送」配置项中的token
const token = "weChatMessagePush"
func CheckSignature(c *context.Context) {
defer func() {
if r := recover(); r != nil {
log.Println("微信消息推服务接入失败", r)
c.StopWithStatus(http.StatusBadRequest)
}
}()
// 读取
ps := c.URLParams()
signature := ps["signature"]
timestamp := ps["timestamp"]
nonce := ps["nonce"]
echostr := ps["echostr"]
// 将token、timestamp、nonce三个参数进行字典序排序
data := []string{token, timestamp, nonce}
sort.Strings(data)
// 将三个参数字符串拼接成一个字符串进行sha1加密
cs := sha1.Sum([]byte(strings.Join(data, "")))
// 与signature对比,判断该请求是否来源于微信
if fmt.Sprintf("%x", cs) != signature {
panic("签名比对结果不一致")
} else {
// 原样返回 echostr 参数内容
c.StopWithText(http.StatusOK, echostr)
log.Println("微信消息推送服务已接入")
}
}
/*
如果报错【Token校验失败,请检查确认】
大概率是端口、URL或者接口写得有问题,仔细排查即可
*/
大佬可以提供一下完整的代码么