微信公眾號接入服務器驗證(Go實現)
阿新 • • 發佈:2019-01-21
value 實現 checkout 微信公眾號 view -o ack nsh array
1 基本流程
- 將token、timestamp、nonce三個參數進行字典序排序
- 將三個參數字符串拼接成一個字符串進行sha1加密
- 開發者獲得加密後的字符串可與signature對比,標識該請求來源於微信
2 請求參數
參數 | 描述 |
---|---|
signature | 微信加密簽名,signature結合了開發者填寫的token參數和請求中的timestamp參數、nonce參數。 |
timestamp | 時間戳 |
nonce | 隨機數 |
echostr | 隨機字符串 |
3 註冊頁面填寫
- URL填寫:http://IP地址:監聽端口
- 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實現)