package controller import ( "SciencesServer/app/handle" "SciencesServer/utils" "errors" "fmt" ) type Sms struct{} type SmsHandle func() *Sms type ( CaptchaCallback struct { Token string `json:"token"` EffectTime int `json:"effect_time"` } ) // tokenEffectTime Token有效期,单位s var tokenEffectTime = 5 * 60 func (c *Sms) captchaCallback(mobile, code string, callback func() error) error { content := fmt.Sprintf("【中科云】您的验证码是%s,三分钟内有效", code) fmt.Println(content) // 执行保存数据库 //mSysSmsLogs := model.NewSysSmsLogs() //mSysSmsLogs.Mobile = mobile //mSysSmsLogs.Content = content //mSysSmsLogs.Usage = model2.SysSmsLogsUsageForCaptcha // //return model2.Create(mSysSmsLogs.SysSmsLogs) // 发送短信 //_ = platform.NewSms().Send()(platform.SmsSendModeForGroup, &platform.SmsParam{ // Mobile: []string{mobile}, Content: content, //}) if callback != nil { //_ = callback() } return nil } // Captcha 验证码事件 func (c *Sms) Captcha(mobile string) error { if !utils.ValidateMobile(mobile) { return errors.New("手机格式不正确") } if err := handle.NewCaptcha().Sms(6, mobile, c.captchaCallback); err != nil { return err } return nil } func (c *Sms) CaptchaValidate(mobile, captcha string) (*CaptchaCallback, error) { if !utils.ValidateMobile(mobile) { return nil, errors.New("手机格式不正确") } pass, err := handle.NewCaptcha().Validate(&handle.CaptchaSms{ Mobile: mobile, Captcha: captcha, }) if err != nil { return nil, err } else if !pass { return nil, errors.New("手机号或验证码错误") } return &CaptchaCallback{ Token: utils.JWTEncrypt(tokenEffectTime, map[string]interface{}{ "mobile": mobile, }), EffectTime: tokenEffectTime, }, nil } func NewSms() SmsHandle { return func() *Sms { return &Sms{} } }