验证来自微信服务器的消息

内容来自微信官方文档

接入微信公众平台开发,开发者需要按照如下步骤完成:

  1. 填写服务器配置
  2. 验证服务器地址的有效性
  3. 依据接口文档实现业务逻辑

微信官方的文档已经写得很详细,官方给出的例子是基于php的,这里给出go实现的消息验证,http框架使用的是gin

type WeChatVerify struct {
Signature string
Timestamp string
Nonce string
Echostr string
}
func (p *WeChatVerify) Verify() bool {
s := []string{token, p.Timestamp, p.Nonce}
sort.Strings(s)
str := strings.Join(s, "")
hashs := sha1.New()
hashs.Write([]byte(str))
signature := hex.EncodeToString(hashs.Sum(nil))
log.Infof("calc signature on local: %s", signature)
if signature == p.Signature {
return true
} else {
return false
}
}
func wx(ctx *gin.Context) {
log.Infof("get request : %s", ctx.Request.URL)
verify := &WeChatVerify{
Signature: ctx.Query("signature"),
Timestamp: ctx.Query("timestamp"),
Nonce: ctx.Query("nonce"),
Echostr: ctx.Query("echostr"),
}
verifyBytes, _ := sonic.Marshal(verify)
log.Infof("Get WeChatVerify from wechat server: %s", string(verifyBytes))
if verify.Verify() {
ctx.Writer.WriteString(verify.Echostr)
} else {
log.Error("WeChat Verify failed")
ctx.JSON(http.StatusBadRequest, gin.H{"error": "WeChat Verify failed"})
}
}

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin92
Github: mengbin92
cnblogs: 恋水无意


posted @   落雷  阅读(163)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示