123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- package share
- import (
- qu "app.yhyue.com/moapp/jybase/common"
- se "app.yhyue.com/moapp/jybase/encrypt"
- "app.yhyue.com/moapp/jybase/redis"
- "app.yhyue.com/moapp/message/config"
- "app.yhyue.com/moapp/message/db"
- "encoding/base64"
- "fmt"
- "github.com/SKatiyar/qr"
- "github.com/gogf/gf/v2/frame/g"
- "github.com/gogf/gf/v2/net/ghttp"
- "log"
- "net/url"
- "regexp"
- "strings"
- )
- type ShareRouter struct{}
- func (c *ShareRouter) Info(r *ghttp.Request) {
- userid := r.Header.Get("userId")
- res := map[string]interface{}{}
- keyUser := fmt.Sprintf("SF_%s", userid)
- if value := redis.GetStr("other", keyUser); value != "" {
- varr := strings.Split(value, "#@#@")
- link := fmt.Sprintf("%s/front/followGift/%s", config.PushConfig.Webdomain, varr[3])
- r, _ := qr.Encode(link, qr.M)
- pngdat := r.PNG()
- res["data"] = map[string]interface{}{
- "shareId": varr[3], //口令
- "shareLink": link, //微信分享链接
- "erUrl": base64.StdEncoding.EncodeToString(pngdat),
- }
- res["error_code"] = 0
- res["error_msg"] = ""
- } else {
- nickname, headimageurl := "", ""
- if data := GetInfo(userid); data != nil {
- nickname = qu.ObjToString(data["nickname"])
- headimageurl = qu.ObjToString(data["headimageurl"])
- }
- shareId := VarLSCPool.GetJob()
- shareIdKey := fmt.Sprintf("shareId_%s", shareId)
- value := fmt.Sprintf("%s#@#@%s#@#@%s#@#@%s", userid, nickname, headimageurl, shareIdKey)
- redis.Put("other", shareIdKey, userid, -1)
- redis.Put("other", keyUser, value, -1)
- link := fmt.Sprintf("%s/front/followGift/%s", config.PushConfig.Webdomain, shareIdKey)
- r, _ := qr.Encode(link, qr.M)
- pngdat := r.PNG()
- res["data"] = map[string]interface{}{
- "shareId": shareIdKey, //口令
- "shareLink": link, //微信分享链接
- "erUrl": base64.StdEncoding.EncodeToString(pngdat),
- }
- res["error_code"] = 0
- res["error_msg"] = ""
- }
- r.Response.WriteJson(res)
- }
- func (c *ShareRouter) Receive(r *ghttp.Request) {
- openid := se.SE.DecodeString(r.Get("oid").String()) //被分享者openid
- if db.Mgo.Count("user", map[string]interface{}{"s_m_openid": openid, "i_appid": 2}) > 0 {
- r.Response.WriteJson(g.Map{
- "error_code": -1,
- "error_msg": "老用户无法领取奖励",
- "data": map[string]interface{}{
- "status": false,
- },
- })
- return
- }
- shareId := r.Get("shareId").String()
- redisKey := fmt.Sprintf("rec_%s", openid)
- log.Println(openid, shareId, redisKey) //分享者和被分享者对应关系
- shareUserid := redis.GetStr("other", shareId) //获取分享者
- if shareUserid == "" {
- r.Response.WriteJson(g.Map{
- "error_code": -1,
- "error_msg": "领取失败",
- "data": map[string]interface{}{
- "status": false,
- },
- })
- return
- }
- r.Response.WriteJson(g.Map{
- "error_code": 0,
- "error_msg": "",
- "data": map[string]interface{}{
- "status": redis.Put("other", redisKey, shareUserid, timeOut()),
- },
- })
- }
- func (c *ShareRouter) List(r *ghttp.Request) {
- userid := r.Get("userId").String()
- pNum := r.Get("pageNum").Int()
- pSize := r.Get("pagesize").Int()
- rdata := map[string]interface{}{
- "count": 0,
- "haveNextPage": false,
- "res": []map[string]interface{}{},
- }
- query := map[string]interface{}{
- "share_uid": userid,
- }
- count := db.Mgo.Count("user_share", query)
- if count == 0 {
- r.Response.WriteJson(g.Map{
- "error_code": 0,
- "error_msg": "",
- "data": rdata,
- })
- return
- }
- result, _ := db.Mgo.Find("user_share", query, `{"createtime":-1}`, `{"shared_uid":1}`, false, pNum*pSize, pSize)
- haveNextPage := (pNum+1)*pSize < count
- rdata["count"] = count
- rdata["haveNextPage"] = haveNextPage
- rdata["pageSize"] = pSize
- rdata["res"] = Info(result)
- r.Response.WriteJson(g.Map{
- "error_code": 0,
- "error_msg": "",
- "data": rdata,
- })
- }
- func (c *ShareRouter) Followgift(r *ghttp.Request) {
- client := r.Header.Get("User-Agent")
- var mobileReg = regexp.MustCompile("(?i)(Android|Mobile|Phone)")
- Wxoauth := `https://open.weixin.qq.com/connect/oauth2/authorize?appid=` + qu.ObjToString(config.Wx.WxJianyu.Appid) + `&redirect_uri=%s&response_type=code&scope=snsapi_base&state=%s#wechat_redirect`
- fdata := map[string]interface{}{
- "error_code": 0,
- "error_msg": "",
- }
- idata := map[string]interface{}{}
- bm := mobileReg.MatchString(client)
- openid := r.Header.Get("s_m_openid")
- nickname := r.Header.Get("s_nickname")
- redisName := "other"
- headImg := ""
- qrstr := ""
- infos := ""
- shareid := r.Get("shareId").String()
- if !strings.Contains(shareid, "shareId_") {
- rdata, ok := db.Mgo.FindOneByField("user", map[string]interface{}{"s_m_openid": shareid, "i_appid": 2}, `{"_id":1}`)
- if rdata != nil && ok && len(*rdata) > 0 {
- uid := BsonIdToSId((*rdata)["_id"])
- infos = redis.GetStr(redisName, fmt.Sprintf("SF_%s", uid))
- }
- }
- if shareUserid := redis.GetStr(redisName, shareid); shareUserid == "" && infos == "" {
- r.Response.WriteJson(g.Map{
- "error_code": -1,
- "error_msg": "无数据",
- })
- return
- } else {
- if infos == "" {
- infos = redis.GetStr(redisName, fmt.Sprintf("SF_%s", shareUserid))
- }
- if infos != "" {
- nickname = strings.Split(infos, "#@#@")[1]
- headImg = strings.Split(infos, "#@#@")[2]
- link := fmt.Sprintf("%s/front/followGift/%s", qu.ObjToString(config.PushConfig.Webdomain), strings.Split(infos, "#@#@")[3])
- r, _ := qr.Encode(link, qr.M)
- pngdat := r.PNG()
- qrstr = base64.StdEncoding.EncodeToString(pngdat)
- shareid = strings.Split(infos, "#@#@")[3]
- if IsPhone(nickname) {
- nickname = string(nickname[0:3]) + "****" + string(nickname[len(nickname)-4:])
- }
- }
- }
- if bm {
- if openid == "" {
- if r.Header.Get("s_m_openid") == "" {
- if r.Get("state").String() == "wx" {
- //微信跳回来的
- code := r.Get("code").String()
- if code != "" {
- openid = Getopenid(code)
- if openid != "" {
- if CheckUserIsSubscribe(openid) {
- FindUserAndCreateSess(openid, r.Session, "wx", false)
- }
- }
- }
- } else {
- if CheckWxBrowser(r.Request) {
- //所有参数都不再使用,跳到微信验证用户
- idata["data"] = fmt.Sprintf(Wxoauth, url.QueryEscape(r.Host+r.URL.String()), "wx")
- fdata["data"] = idata
- r.Response.WriteJson(fdata)
- }
- }
- }
- }
- idata["shareid"] = shareid
- idata["share_nickname"] = nickname
- idata["share_headImg"] = headImg
- idata["openid"] = se.SE.EncodeString(openid)
- idata["share_qr"] = qrstr
- mynickname := r.Header.Get("s_nickname")
- myavatar := r.Header.Get("s_avatar")
- idata["nickname"] = mynickname
- idata["avatar"] = myavatar
- idata["signature"] = SignJSSDK(r.Host + r.URL.String())
- fdata["data"] = idata
- r.Response.WriteJson(fdata)
- } else {
- idata["shareid"] = shareid
- idata["share_nickname"] = nickname
- idata["share_headImg"] = headImg
- idata["signature"] = SignJSSDK(r.Host + r.URL.String())
- idata["isWeixin"] = CheckWxBrowser(r.Request)
- idata["share_qr"] = qrstr
- fdata["data"] = idata
- r.Response.WriteJson(fdata)
- }
- }
|