package weixin import ( "errors" "git.rosy.net.cn/jx-callback/business/auth2" "git.rosy.net.cn/jx-callback/business/auth2/authprovider" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" ) const ( AuthTypeWeixin = "weixin" AuthTypeMP = "weixinsns" AuthTypeMini = "weixinmini" ) type Auther struct { authprovider.DefAuther authType string } var ( AutherObjWX *Auther AutherObjMP *Auther ) var ( ErrStateIsWrong = errors.New("登录state非法") ) func init() { AutherObjWX = &Auther{ authType: AuthTypeWeixin, } auth2.RegisterAuther(AuthTypeWeixin, AutherObjWX) AutherObjMP = &Auther{ authType: AuthTypeMP, } auth2.RegisterAuther(AuthTypeMP, AutherObjMP) } func (a *Auther) VerifySecret(state, code string) (authBindEx *auth2.AuthBindEx, err error) { globals.SugarLogger.Debugf("weixin VerifySecret code:%s", code) if state == "" { token, err2 := api.WeixinPageAPI.SNSRetrieveToken(code) if err = err2; err == nil { wxUserinfo, err2 := api.WeixinPageAPI.SNSGetUserInfo(token.AccessToken, token.OpenID) if err = err2; err == nil { if authBindEx, err = a.UnionFindAuthBind(a.authType, []string{AuthTypeWeixin, AuthTypeMini, AuthTypeMini}, wxUserinfo.OpenID, wxUserinfo.UnionID, wxUserinfo); err == nil { authBindEx.UserHint = &auth2.UserBasic{ Name: wxUserinfo.NickName, } } } } } else { err = ErrStateIsWrong } return authBindEx, err }