1. 程式人生 > >微信公眾號接入服務器驗證(Go實現)

微信公眾號接入服務器驗證(Go實現)

value 實現 checkout 微信公眾號 view -o ack nsh array

1 基本流程

  • 將token、timestamp、nonce三個參數進行字典序排序
  • 將三個參數字符串拼接成一個字符串進行sha1加密
  • 開發者獲得加密後的字符串可與signature對比,標識該請求來源於微信

2 請求參數

參數 描述
signature 微信加密簽名,signature結合了開發者填寫的token參數和請求中的timestamp參數、nonce參數。
timestamp 時間戳
nonce 隨機數
echostr 隨機字符串

3 註冊頁面填寫

  1. URL填寫:http://IP地址:監聽端口
  2. Token填寫自行設定的值

技術分享圖片

4 代碼說明

  • 監聽於3456
    端口
  • Token為iwuqing

5 代碼

package main

import (
    "crypto/sha1"
    "encoding/hex"
    "fmt"
    "net/http"
    "sort"
)

func main()  {
    // 綁定路由
    http.HandleFunc("/", checkout)
    // 啟動監聽=j
    err := http.ListenAndServe(":3456", nil)
    if err != nil {
     fmt.Println("服務器啟動失敗!")
    }
}
func checkout(response http.ResponseWriter, request *http.Request)  {
    //解析URL參數
    err := request.ParseForm()
    if err != nil {
        fmt.Println("URL解析失敗!")
        return
    }
    // token
    var token string = "iwuqing"
    // 獲取參數
    signature := request.FormValue("signature")
    timestamp := request.FormValue("timestamp")
    nonce := request.FormValue("nonce")
    echostr := request.FormValue("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 {
        _, err := response.Write([]byte(echostr))
        if err != nil {
            fmt.Println("響應失敗。。。")
        }
    } else {
        fmt.Println("驗證失敗")
    }
}

GitHub地址

https://github.com/iwuqing/WeChat-with-Go

微信公眾號接入服務器驗證(Go實現)