package services import ( "encoding/json" "errors" "fmt" "hongze/hongze_api/models" "hongze/hongze_api/utils" "rdluck_tools/http" "time" ) func PcWxGetUserOpenIdByCode(code string) (item *WxAccessToken, err error) { if code == "" { err = errors.New("code is empty") return nil, err } requestUrl := `https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code` requestUrl = fmt.Sprintf(requestUrl, utils.PcWxAppId, utils.PcWxAppSecret, code) result, err := http.Get(requestUrl) if err != nil { return nil, err } utils.FileLog.Info("WxGetUserOpenIdByCode:%s", string(result)) err = json.Unmarshal(result, &item) return } func PcWxGetAccessToken() (accessToken string, err error) { wxToken, err := models.PcGetWxToken() fmt.Println(err, wxToken) if err != nil && err.Error() != utils.ErrNoRow() { return } fmt.Println(wxToken, err) //wx_token 不存在 if wxToken == nil || (err != nil && err.Error() == utils.ErrNoRow()) { fmt.Println("token is nil") token, err := PcWxGetToken() if err != nil { return accessToken, err } if token.Errmsg != "" { err = errors.New("获取access_token 失败 errcode:" + token.Errmsg + " ;errmsg:" + token.Errmsg) return "", err } expiresIn := time.Now().Add(110 * time.Minute).Unix() err = models.PcAddWxToken(token.AccessToken, expiresIn) if err != nil { err = errors.New("新增wx_token失败" + err.Error()) return accessToken, err } accessToken = token.AccessToken } else { fmt.Println("token is not nil") if wxToken.ExpiresIn <= time.Now().Unix() { token, err := PcWxGetToken() if err != nil { return accessToken, err } if token.Errmsg != "" { err = errors.New("获取access_token 失败 errcode:" + token.Errmsg + " ;errmsg:" + token.Errmsg) return "", err } expiresIn := time.Now().Add(110 * time.Minute).Unix() err = models.PcUpdateWxToken(token.AccessToken, expiresIn, wxToken.Id) if err != nil { err = errors.New("修改wx_token失败" + err.Error()) return accessToken, err } accessToken = token.AccessToken } else { accessToken = wxToken.AccessToken } } return } func PcWxGetToken() (item *WxToken, err error) { requestUrl := `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s` requestUrl = fmt.Sprintf(requestUrl, utils.PcWxAppId, utils.PcWxAppSecret) result, err := http.Get(requestUrl) utils.FileLog.Info("result:%s", string(result)) if err != nil { return nil, err } err = json.Unmarshal(result, &item) return } func InitSetUnionId() { list, err := models.GetOpenIdAll() if err != nil { fmt.Println("err:" + err.Error()) return } accessToken := "40_2L4GKbzCZ7qLtlATugEBKBIO6NZJBf4_0O6bHcelPSSSHbgeZhLFyU2jLdLeAP5d_DAinICR2ifS5M_TK-cmGwSKnVz4oa2nnR2UyhD3WbIbvMv3lRbXo06Ujtmwht_gilx_dU26kTHxOKpYDTEjAAAVLW" for k, v := range list { fmt.Println(k, v.OpenId) wxUserInfo, err := WxGetUserInfo(v.OpenId, accessToken) if err != nil { fmt.Println("Err:" + err.Error()) return } unionId := wxUserInfo.Unionid if unionId != "" { err = models.ModifyWxUserUnionId(unionId, v.UserId) if err != nil { fmt.Println("ModifyWxUserUnionId Err:" + err.Error()) return } } } } type PcWxUserInfo struct { Openid string `json:"openid"` Nickname string `json:"nickname"` Sex int `json:"sex"` Language string `json:"language"` City string `json:"city"` Province string `json:"province"` Country string `json:"country"` Headimgurl string `json:"headimgurl"` Unionid string `json:"unionid"` Errcode int `json:"errcode"` Errmsg string `json:"errmsg"` } func PcWxGetUserInfo(openId, accessToken string) (item *PcWxUserInfo, err error) { requestUrl := `https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s` requestUrl = fmt.Sprintf(requestUrl, accessToken, openId) result, err := http.Get(requestUrl) if err != nil { return } fmt.Println("result:",string(result)) utils.FileLog.Info("WxGetUserInfo:%s openId:%s,accessToken:%s ", string(result), openId, accessToken) utils.FileLog.Info("WxGetUserInfo Result:%s ", string(result)) err = json.Unmarshal(result, &item) return }