在開發GO小程序或者公衆號接口的時候,須要對接微信消息的token簽名驗證 , 這時候須要開發者驗證來自微信 , 並返回指定的字符串git
微信文檔裏給的是PHP版本的代碼 , 下面這個是go版本的代碼 , 使用的gin框架github
這個是入口的路由 ,根據本身的代碼來寫就能夠 , 注意發來的是GET請求小程序
package router import ( "github.com/gin-gonic/gin" "github.com/taoshihan1991/imaptool/controller" ) func InitApiRouter(engine *gin.Engine){ engine.GET("/micro_program",controller.GetCheckWeixinSign) }
驗證代碼 , 這裏只有一個須要把微信公衆號後臺填寫的token , 本身換上 , 其餘都是對方發來的消息微信
package controller import ( "crypto/sha1" "encoding/hex" "github.com/gin-gonic/gin" "github.com/taoshihan1991/imaptool/config" "log" "sort" ) func GetCheckWeixinSign(c *gin.Context){ token:="xxxxxxxx"//本身填的token signature:=c.Query("signature") timestamp:=c.Query("timestamp") nonce:=c.Query("nonce") echostr:=c.Query("echostr") //將token、timestamp、nonce三個參數進行字典序排序 var tempArray = []string{token, timestamp, nonce} sort.Strings(tempArray) //將三個參數字符串拼接成一個字符串進行sha1加密 var sha1String string = "" for _, v := range tempArray { sha1String += v } h := sha1.New() h.Write([]byte(sha1String)) sha1String = hex.EncodeToString(h.Sum([]byte(""))) //得到加密後的字符串可與signature對比 if sha1String == signature { c.Writer.Write([]byte(echostr)) } else { log.Println("微信API驗證失敗") } }
在公衆號後臺驗證時 , 彈出來綠色的驗證成功標識後就能夠了框架