|
|
@@ -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
|