Browse Source

添加分享关系绑定,三凌宝跳转添加token加密验证,对接登录三凌宝接口

chendeng 2 years ago
parent
commit
fc52314596
6 changed files with 127 additions and 20 deletions
  1. 1 0
      configFiles/config.yaml
  2. 0 0
      configFiles/gamemap.json
  3. 113 12
      controllers/user.go
  4. 2 0
      errorcode/errorcode.go
  5. 2 0
      models/user.go
  6. 9 8
      server/user.go

+ 1 - 0
configFiles/config.yaml

@@ -5,5 +5,6 @@ encrypt: 0x5c4Ac697C62c20808105134FA2036900B1f8AFDE
 map_key: MC2BZ-UJWWG-63RQS-QCNXJ-VZF4H-CBB23
 map_sk: H25D26Yd5IRvmnvVtbJjcAVYdmzHkEy4
 ip138_token: ad3306c76dca90c73929549a2b98eb27
+slb_api_url: https://sit.slbsc.cn/
 port: 8999
 mode: debug

File diff suppressed because it is too large
+ 0 - 0
configFiles/gamemap.json


+ 113 - 12
controllers/user.go

@@ -1,6 +1,7 @@
 package controllers
 
 import (
+	"bytes"
 	"crypto/md5"
 	"encoding/hex"
 	"encoding/json"
@@ -12,6 +13,7 @@ import (
 	"log"
 	"math/rand"
 	"net/http"
+	"net/url"
 	"sort"
 	"strings"
 	"the12animal/configFiles"
@@ -32,12 +34,13 @@ type UserController struct {
 }
 
 type consumercodeReq struct {
-	Code      string  `json:"code"`
-	NickName  string  `json:"nick_name"`
-	PicUrl    string  `json:"pic_url"` //头像路由
-	Phone     string  `json:"phone"`   //头像路由
-	Latitude  float64 `json:"latitude"`
-	Longitude float64 `json:"longitude"`
+	Code           string  `json:"code"`
+	NickName       string  `json:"nick_name"`
+	PicUrl         string  `json:"pic_url"`         //头像路由
+	Phone          string  `json:"phone"`           //头像路由
+	RecommenderUid int     `json:"recommender_uid"` //推荐人uid
+	Latitude       float64 `json:"latitude"`
+	Longitude      float64 `json:"longitude"`
 }
 
 func (U *UserController) Init() {
@@ -144,6 +147,39 @@ func (U *UserController) SendSms(g *gin.Context) {
 		return
 	}
 
+	// 验证手机号是否已绑定此微信号
+	user := U.C.GetUser(openid)
+	if user.Phone != "" && user.Phone != req.Phone {
+		errRequest(g, "输入的手机号和此游戏账号绑定的手机号不符", errorcode.PhoneNumberNotBindWechat)
+		return
+	}
+
+	requestUrl := viper.GetString("slb_api_url") + "api/auth/verify"
+	values := url.Values{}
+	values.Set("phone", req.Phone)
+	request, err := http.NewRequest("POST", requestUrl, bytes.NewBufferString(values.Encode()))
+	if err != nil {
+		// 处理错误
+		errRequest(g, "SLB接口异常0:"+err.Error(), errorcode.SLBAPIERR)
+		return
+	}
+	request.Header.Set("Content-Type", "application/x-www-form-urlencoded")
+
+	client := &http.Client{}
+	response, err := client.Do(request)
+	if err != nil {
+		// 处理错误
+		errRequest(g, "SLB接口异常1:"+err.Error(), errorcode.SLBAPIERR)
+		return
+	}
+	defer response.Body.Close()
+	_, err = ioutil.ReadAll(response.Body)
+	if err != nil {
+		// 处理错误
+		errRequest(g, "SLB接口异常2:"+err.Error(), errorcode.SLBAPIERR)
+		return
+	}
+
 	back := BackData{}
 	back.Code = 0
 	g.JSON(200, back)
@@ -222,6 +258,17 @@ type registerReq struct {
 	Phone string `json:"phone"` //手机号
 }
 
+type slbLoginResp struct {
+	Data struct {
+		Status  int    `json:"status"`
+		Message string `json:"message"`
+		Token   string `json:"token"`
+		User    struct {
+			Phone string `json:"phone"`
+		}
+	}
+}
+
 func (U *UserController) Register(g *gin.Context) {
 	openid := g.GetHeader("token")
 	if openid == "" {
@@ -235,24 +282,76 @@ func (U *UserController) Register(g *gin.Context) {
 		errRequest(g, "参数错误", errorcode.PARAMETERERROR)
 		return
 	}
-	U.C.SavePhone(openid, req.Phone)
+
+	requestUrl := viper.GetString("slb_api_url") + "api/auth/smslogin"
+	values := url.Values{}
+	values.Set("phone", req.Phone)
+	values.Set("sms_code", req.Sms)
+	request, err := http.NewRequest("POST", requestUrl, bytes.NewBufferString(values.Encode()))
+	if err != nil {
+		// 处理错误
+		errRequest(g, "SLB接口异常0:"+err.Error(), errorcode.SLBAPIERR)
+		return
+	}
+	request.Header.Set("Content-Type", "application/x-www-form-urlencoded")
+
+	client := &http.Client{}
+	response, err := client.Do(request)
+	if err != nil {
+		// 处理错误
+		errRequest(g, "SLB接口异常1:"+err.Error(), errorcode.SLBAPIERR)
+		return
+	}
+	defer response.Body.Close()
+	data, err := ioutil.ReadAll(response.Body)
+	if err != nil {
+		// 处理错误
+		errRequest(g, "SLB接口异常2:"+err.Error(), errorcode.SLBAPIERR)
+		return
+	}
+	print(string(data))
+
+	var loginResp slbLoginResp
+	err = json.Unmarshal([]byte(data), &loginResp)
+	if err != nil {
+		// 处理错误
+		errRequest(g, "SLB接口异常3:"+err.Error(), errorcode.SLBAPIERR)
+		return
+	}
+
+	user := U.C.GetUser(openid)
+	if user.Phone == "" {
+		U.C.SavePhone(openid, req.Phone)
+	}
 	back := BackData{}
 	back.Code = 0
+	back.Data = loginResp
 	g.JSON(200, back)
 }
 
 func (U *UserController) Login(g *gin.Context) {
 	req := consumercodeReq{}
 	err := g.BindJSON(&req)
-	if err != nil || req.Code == "" || req.NickName == "" || req.PicUrl == "" {
+	if err != nil || req.Code == "" || req.NickName == "" {
 		errRequest(g, "参数错误", errorcode.PARAMETERERROR)
 		return
 	}
 	code, msg, wxMsg := U.wxLogin(req.Code)
 	if code == 0 {
 		encrypt := &models.Encrypt{}
-		phoneNumber := encrypt.DecryptData(viper.GetString("encrypt"), req.Phone)
-
+		phoneNumber := ""
+		slbToken := ""
+		if req.Phone != "" {
+			slbArrayString := encrypt.DecryptData(viper.GetString("encrypt"), req.Phone)
+			slbArray := strings.Split(slbArrayString, "{token}")
+			phoneNumber = slbArray[0]
+			if len(slbArray) < 2 {
+				errRequest(g, "SLB进入参数错误", errorcode.PARAMETERERROR)
+				return
+			} else {
+				slbToken = slbArray[1]
+			}
+		}
 		nothas := U.C.UserHasOrNot(wxMsg.Openid)
 		var (
 			user      *models.User
@@ -275,7 +374,7 @@ func (U *UserController) Login(g *gin.Context) {
 				addr1 = "域外"
 			}
 
-			user, errorcode = U.C.NewLoginRecord3(req.NickName, req.PicUrl, wxMsg.Openid, phoneNumber, wxMsg.SessionKey, addr1, addr2)
+			user, errorcode = U.C.NewLoginRecord3(req.NickName, req.PicUrl, wxMsg.Openid, phoneNumber, wxMsg.SessionKey, addr1, addr2, req.RecommenderUid)
 		} else {
 			user, errorcode = U.C.LoginRecord3(req.NickName, req.PicUrl, wxMsg.Openid, phoneNumber, wxMsg.SessionKey)
 		}
@@ -283,7 +382,9 @@ func (U *UserController) Login(g *gin.Context) {
 			errRequest(g, "登录错误", errorcode)
 			return
 		}
-
+		if slbToken != "" {
+			user.SlbToken = slbToken
+		}
 		back := BackData{}
 		back.Code = 0
 		back.Data = user

+ 2 - 0
errorcode/errorcode.go

@@ -9,6 +9,8 @@ const (
 	LoginErr
 	AccountIsExist
 	PASSWDERROR
+	SLBAPIERR
+	PhoneNumberNotBindWechat
 	FileUploadErr
 	GoodsNOTEXIST
 	GoodsTypeNOTEXIST

+ 2 - 0
models/user.go

@@ -6,6 +6,7 @@ import (
 
 type User struct {
 	Id                int       `gorm:"primary_key" json:"uid"`
+	RecommenderUid    int       `gorm:"type:int(11);default:0" json:"recommender_uid"`
 	OpenId            string    `gorm:"type:varchar(100)" json:"open_id"`
 	Phone             string    `gorm:"type:varchar(20)" json:"phone"`
 	NickName          string    `gorm:"type:varchar(100)" json:"nick_name"`
@@ -16,6 +17,7 @@ type User struct {
 	ResurrectionCount int       `gorm:"type:int;default:1" json:"resurrection_count"`
 	Balance           float32   `gorm:"type:decimal(11,2);default:0.00" json:"balance"`
 	Sex               int       `json:"sex"`
+	SlbToken          string    `gorm:"-" json:"slb_token"`
 	Resurrection      string    `gorm:"-" json:"resurrection"`
 	LuckUser          bool      `gorm:"-" json:"luck_user"`
 	TodayGameTimes    int       `gorm:"-" json:"today_game_times"`

+ 9 - 8
server/user.go

@@ -17,15 +17,16 @@ func (U *UserServer) UserHasOrNot(Openid string) bool {
 	return U.UserSer.UserHasOrNot(Openid)
 }
 
-func (U *UserServer) NewLoginRecord3(NickName, PicUrl, Openid, Phone, SessionKey, addr1, addr2 string) (*models.User, int) {
+func (U *UserServer) NewLoginRecord3(NickName, PicUrl, Openid, Phone, SessionKey, addr1, addr2 string, recommenderUid int) (*models.User, int) {
 	user := models.User{
-		OpenId:       Openid,
-		NickName:     NickName,
-		PicUrl:       PicUrl,
-		Addr1:        addr1,
-		Addr2:        addr2,
-		Phone:        Phone,
-		RegisterTime: time.Now(),
+		OpenId:         Openid,
+		NickName:       NickName,
+		PicUrl:         PicUrl,
+		Addr1:          addr1,
+		Addr2:          addr2,
+		Phone:          Phone,
+		RecommenderUid: recommenderUid,
+		RegisterTime:   time.Now(),
 	}
 	data := U.UserSer.CreatUser(&user)
 	if data == nil {

Some files were not shown because too many files changed in this diff