123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- package front
- import (
- "fmt"
- "jfw/config"
- "jfw/jyutil"
- "jfw/public"
- "log"
- "net/url"
- qutil "qfw/util"
- "qfw/util/redis"
- "time"
- "github.com/go-xweb/httpsession"
- "github.com/go-xweb/xweb"
- "go.mongodb.org/mongo-driver/bson"
- "go.mongodb.org/mongo-driver/bson/primitive"
- )
- type SingleLogin struct {
- *xweb.Action
- singleLogin xweb.Mapper `xweb:"/swordfish/SingleLogin"` //微信登录中转
- shortUrl xweb.Mapper `xweb:"/stl/(.*)"` //短地址跳转
- }
- func init() {
- xweb.AddAction(&SingleLogin{})
- }
- //短地址跳转
- func (this *SingleLogin) ShortUrl(key string) error {
- var redirectUrl = "/swordfish/about"
- if key != "" && config.ActiveConfig.ShortUrl[key] != "" {
- redirectUrl = config.ActiveConfig.ShortUrl[key]
- }
- return this.Redirect(redirectUrl)
- }
- //是否关注处理
- func (this *SingleLogin) SingleLogin() error {
- userid := qutil.ObjToString(this.GetSession("userId"))
- toHref := this.GetString("toHref")
- log.Println("SingleLogin sessionId", this.Session().Id())
- if userid != "" { //已有session,直接跳转至结果页面
- return this.Redirect(toHref)
- }
- data := map[string]interface{}{}
- stateKey := this.GetString("state")
- log.Println("SingleLogin stateKey", userid, stateKey)
- if stateKey == "" { //公众号回调
- stateKey = getTmpKey()
- data["href"] = toHref
- data["title"] = this.GetString("title")
- redis.Put("other", stateKey, data, 60*5) //存储信息
- return this.Redirect(fmt.Sprintf(config.Wxoauth, url.QueryEscape(this.Site()+this.Url()), stateKey), 302)
- }
- //获取wx跳转前参数
- if redisValue := redis.Get("other", stateKey); redisValue != nil {
- if param, ok := redisValue.(map[string]interface{}); ok {
- data = param
- }
- }
- log.Println("SingleLogin data", data)
- openid := jyutil.Getopenid(this.GetString("code")) //获取用户openid
- if loginCreateSess(openid, this.Session()) {
- log.Println("已关注用户", openid, data["href"])
- return this.Redirect(qutil.ObjToString(data["href"]))
- }
- log.Println("SingleLogin 未关注用户", openid)
- if len(data) > 0 { //存储携带信息
- redis.Put("other", fmt.Sprintf("SingleLogin_%s", openid), data, 60*30)
- }
- return this.Render("/weixin/singlelogin/index.html")
- }
- func getTmpKey() string {
- return fmt.Sprintf("%s_%s", time.Now().Format("20060102150405"), qutil.GetLetterRandom(5))
- }
- func loginCreateSess(openid string, sess *httpsession.Session) bool {
- _person, ok := public.MQFW.FindOne("user", bson.M{"s_m_openid": openid, "i_ispush": 1})
- if ok && *_person != nil && len(*_person) > 0 {
- person := *_person
- if person["i_shareknow"] != nil {
- sess.Set("shareknow", person["i_shareknow"])
- }
- sess.Set("userId", (person["_id"].(primitive.ObjectID)).Hex())
- sess.Set("s_m_openid", person["s_m_openid"])
- sess.Set("openid", person["s_m_openid"])
- sess.Set("s_nickname", person["s_nickname"])
- if person["s_avatar"] == nil {
- sess.Set("s_avatar", person["s_headimage"])
- } else {
- sess.Set("s_avatar", person["s_avatar"])
- }
- return true
- } else {
- return false
- }
- }
|