[Go]GO語言實戰-小程序或公衆號接口gin框架驗證微信服務器消息簽名-開源WEB客服

在開發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驗證失敗")
    }
}

在公衆號後臺驗證時 , 彈出來綠色的驗證成功標識後就能夠了框架

相關文章
相關標籤/搜索