内容来自微信官方文档。
接入微信公众平台开发,开发者需要按照如下步骤完成:
- 填写服务器配置
- 验证服务器地址的有效性
- 依据接口文档实现业务逻辑
微信官方的文档已经写得很详细,官方给出的例子是基于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: 恋水无意