appToken.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package jy
  2. import (
  3. "encoding/base64"
  4. "encoding/json"
  5. "fmt"
  6. qutil "app.yhyue.com/moapp/jybase/common"
  7. "strings"
  8. )
  9. //用户信息
  10. type WxUserInfo struct {
  11. City string `json:"city"`
  12. Country string `json:"country"`
  13. CreateTime int64 `json:"createtime"`
  14. HeadImageUrl string `json:"headimgurl"`
  15. Nickname string `json:"nickname"`
  16. OpenId string `json:"openid"`
  17. Province string `json:"province"`
  18. Sex int `json:"sex"`
  19. Sign string `json:"sign"`
  20. UnionId string `json:"unionid"`
  21. }
  22. func GetMsgFromWxSign(sign string) (wxinfo *WxUserInfo, err error) {
  23. wxinfo = &WxUserInfo{}
  24. if sign == "" {
  25. err = fmt.Errorf("获取信息异常,参数为空")
  26. return
  27. }
  28. b, decodeErr := base64.StdEncoding.DecodeString(strings.Replace(sign, " ", "+", -1))
  29. if decodeErr != nil {
  30. err = fmt.Errorf("获取信息异常,解密失败")
  31. return
  32. }
  33. UnmarshalErr := json.Unmarshal(b, &wxinfo)
  34. if UnmarshalErr != nil {
  35. err = fmt.Errorf("获取信息异常,格式异常")
  36. return
  37. }
  38. //做比对,防篡改
  39. checkSign := qutil.GetMd5String(fmt.Sprintf("city=%s&country=%s&createtime=%d&headimgurl=%s&nickname=%s&openid=%s&province=%s&sex=%d&unionid=%s",
  40. wxinfo.City, wxinfo.Country, wxinfo.CreateTime, wxinfo.HeadImageUrl, wxinfo.Nickname, wxinfo.OpenId, wxinfo.Province, wxinfo.Sex, wxinfo.UnionId))
  41. if wxinfo.Sign != checkSign {
  42. err = fmt.Errorf("获取信息异常,校验错误")
  43. return
  44. }
  45. if wxinfo.OpenId == "" {
  46. err = fmt.Errorf("获取信息异常,openid为空")
  47. return
  48. }
  49. return
  50. }