内容来自微信官方文档

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

  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: 恋水无意