weixin.go 913 B

1234567891011121314151617181920212223242526272829303132333435
  1. package controller
  2. import (
  3. "crypto/sha1"
  4. "encoding/hex"
  5. "git.wanbits.cc/sin/flytalk/models"
  6. "github.com/gin-gonic/gin"
  7. "log"
  8. "sort"
  9. )
  10. func GetCheckWeixinSign(c *gin.Context) {
  11. token := models.FindConfig("WeixinToken")
  12. signature := c.Query("signature")
  13. timestamp := c.Query("timestamp")
  14. nonce := c.Query("nonce")
  15. echostr := c.Query("echostr")
  16. //将token、timestamp、nonce三个参数进行字典序排序
  17. var tempArray = []string{token, timestamp, nonce}
  18. sort.Strings(tempArray)
  19. //将三个参数字符串拼接成一个字符串进行sha1加密
  20. var sha1String string = ""
  21. for _, v := range tempArray {
  22. sha1String += v
  23. }
  24. h := sha1.New()
  25. h.Write([]byte(sha1String))
  26. sha1String = hex.EncodeToString(h.Sum([]byte("")))
  27. //获得加密后的字符串可与signature对比
  28. if sha1String == signature {
  29. c.Writer.Write([]byte(echostr))
  30. } else {
  31. log.Println("微信API验证失败")
  32. }
  33. }