Go实现微信回调验证

2022-04-27  本文已影响0人  秀秀小虞儿
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("验证失败")
    }
}

原文地址:https://www.jianshu.com/p/6c732577060f

上一篇 下一篇

猜你喜欢

热点阅读