From 0faaa6b36657ae56f674246f6456ba32a2ec1d22 Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 5 Sep 2018 18:03:53 +0800 Subject: [PATCH] - mobile sms verify added. --- business/jxcallback/auth/auth.go | 15 ++++++++ business/jxcallback/auth/mobile/mobile.go | 38 +++++++++++++++++++ .../jxcallback/auth/mobile/mobile_test.go | 12 ++++++ conf/app.conf | 3 ++ controllers/auth_controller.go | 29 ++++++++++++++ globals/globals.go | 6 +++ routers/commentsRouter_controllers.go | 16 ++++++++ 7 files changed, 119 insertions(+) create mode 100644 business/jxcallback/auth/mobile/mobile.go create mode 100644 business/jxcallback/auth/mobile/mobile_test.go diff --git a/business/jxcallback/auth/auth.go b/business/jxcallback/auth/auth.go index 683dd5f43..bddf09156 100644 --- a/business/jxcallback/auth/auth.go +++ b/business/jxcallback/auth/auth.go @@ -5,7 +5,10 @@ import ( "time" "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/jxcallback/auth/mobile" + "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/globals" + "git.rosy.net.cn/jx-callback/globals/gormdb" ) const ( @@ -78,3 +81,15 @@ func GetUserInfo(token string) (loginInfo *LoginInfo, err error) { } return nil, err } + +func BindMobile(token, mobileNum, code string) (err error) { + loginInfo := new(LoginInfo) + if err = globals.Cacher.GetAs(token, loginInfo); err == nil { + if mobile.VerifyCode(mobileNum, code) { + db := gormdb.GetDB() + return db.Model(model.WeiXins{}).Where("openid = ?", loginInfo.ID).Update("tel", mobileNum).Error + } + err = errors.New("验证码错") + } + return err +} diff --git a/business/jxcallback/auth/mobile/mobile.go b/business/jxcallback/auth/mobile/mobile.go new file mode 100644 index 000000000..737e01932 --- /dev/null +++ b/business/jxcallback/auth/mobile/mobile.go @@ -0,0 +1,38 @@ +package mobile + +import ( + "fmt" + "math/rand" + "time" + + "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/globals" + "github.com/KenmyZhang/aliyun-communicate" +) + +const ( + DefVerifyCodeDuration = 5 * time.Minute +) + +func SendVerifyCode(mobileNumber string) error { + smsClient := aliyunsmsclient.New("http://dysmsapi.aliyuncs.com/") + code := fmt.Sprintf("%06d", rand.Intn(1000000)) + _, err := smsClient.Execute(globals.AliKey, globals.AliSecret, mobileNumber, "京西菜市", "SMS_84655036", string(utils.MustMarshal(map[string]interface{}{ + "code": code, + }))) + if err == nil { + globals.Cacher.Set(mobileNumber, code, DefVerifyCodeDuration) + } + // globals.SugarLogger.Debug(utils.Format4Output(result, false)) + return err +} + +func VerifyCode(mobileNumber, code string) bool { + if value := globals.Cacher.Get(mobileNumber); value != nil { + if code == value.(string) { + globals.Cacher.Del(mobileNumber) + return true + } + } + return false +} diff --git a/business/jxcallback/auth/mobile/mobile_test.go b/business/jxcallback/auth/mobile/mobile_test.go new file mode 100644 index 000000000..0ed6829f5 --- /dev/null +++ b/business/jxcallback/auth/mobile/mobile_test.go @@ -0,0 +1,12 @@ +package mobile + +import ( + "testing" +) + +func TestSendVerifyCode(t *testing.T) { + err := SendVerifyCode("18180948107") + if err != nil { + t.Fatal(err) + } +} diff --git a/conf/app.conf b/conf/app.conf index 74e402168..116cebcd9 100644 --- a/conf/app.conf +++ b/conf/app.conf @@ -17,6 +17,9 @@ autonaviKey = "4427170f870af2110becb8852d36ab08" generateLegacyJxOrder = false enableStore = true +aliKey = "LTAI6xJUGaP6WdMQ" +aliSecret = "CLmx5T93Bgi89EGAxWM4RTAXUsiHbM" + [dev] freshFoodServerURL = "http://portal.beta.jxc4.com" diff --git a/controllers/auth_controller.go b/controllers/auth_controller.go index 5f4ad63dc..7c2f5df1e 100644 --- a/controllers/auth_controller.go +++ b/controllers/auth_controller.go @@ -8,6 +8,7 @@ import ( "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxcallback/auth" _ "git.rosy.net.cn/jx-callback/business/jxcallback/auth/localpass" // 加载本地用户密码 + "git.rosy.net.cn/jx-callback/business/jxcallback/auth/mobile" "git.rosy.net.cn/jx-callback/business/jxcallback/auth/weixin" "git.rosy.net.cn/jx-callback/globals" "github.com/astaxie/beego" @@ -102,3 +103,31 @@ func (c *AuthController) GetUserInfo() { return retVal, "", err }) } + +// @Title 发送验证码 +// @Description 发送验证码 +// @Param mobile formData string true "手机号" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /SendMobileVerifyCode [post] +func (c *AuthController) SendMobileVerifyCode() { + c.callSendMobileVerifyCode(func(params *tAuthSendMobileVerifyCodeParams) (retVal interface{}, errCode string, err error) { + err = mobile.SendVerifyCode(params.Mobile) + return retVal, "", err + }) +} + +// @Title 绑定手机 +// @Description 绑定手机 +// @Param token header string true "认证token" +// @Param mobile formData string true "手机号" +// @Param code formData string true "验证码" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /BindMobile [post] +func (c *AuthController) BindMobile() { + c.callBindMobile(func(params *tAuthBindMobileParams) (retVal interface{}, errCode string, err error) { + err = auth.BindMobile(params.Token, params.Mobile, params.Code) + return retVal, "", err + }) +} diff --git a/globals/globals.go b/globals/globals.go index 9121df509..685b98f82 100644 --- a/globals/globals.go +++ b/globals/globals.go @@ -27,6 +27,9 @@ var ( JdorderTableName string Cacher cache.ICacher + + AliKey string + AliSecret string ) func init() { @@ -53,4 +56,7 @@ func Init() { JdorderTableName = "jdorder" Cacher = redis.New(beego.AppConfig.DefaultString("redisHost", "localhost"), beego.AppConfig.DefaultInt("redisPort", 0), beego.AppConfig.DefaultString("redisPassword", "")) + + AliKey = beego.AppConfig.DefaultString("aliKey", "") + AliSecret = beego.AppConfig.DefaultString("aliSecret", "") } diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 54f66e899..75242b032 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -7,6 +7,14 @@ import ( func init() { + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:AuthController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:AuthController"], + beego.ControllerComments{ + Method: "BindMobile", + Router: `/BindMobile`, + AllowHTTPMethods: []string{"post"}, + MethodParams: param.Make(), + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:AuthController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:AuthController"], beego.ControllerComments{ Method: "GetUserInfo", @@ -39,6 +47,14 @@ func init() { MethodParams: param.Make(), Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:AuthController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:AuthController"], + beego.ControllerComments{ + Method: "SendMobileVerifyCode", + Router: `/SendMobileVerifyCode`, + AllowHTTPMethods: []string{"post"}, + MethodParams: param.Make(), + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:OrderController"], beego.ControllerComments{ Method: "CreateWaybillOnProviders",