Ver código fonte

Merge branch 'fix/fix_sms' of hongze/hongze_mobile_admin into master

xyxie 2 anos atrás
pai
commit
80a89ee5d3
3 arquivos alterados com 91 adições e 24 exclusões
  1. 18 4
      controllers/admin_wx.go
  2. 3 2
      models/tables/admin/admin.go
  3. 70 18
      services/sms.go

+ 18 - 4
controllers/admin_wx.go

@@ -34,6 +34,8 @@ func (c *AdminWxController) SendSmsCode()  {
 		c.FailWithMessage("请输入授权标识", "请输入授权标识")
 		return
 	}
+
+	areaNum := req.AreaNum
 	//获取token,如果没有token不允许发送验证码
 	infoJson, err := utils.Rc.RedisString(utils.HZ_MOBILE_ADMIN_WXLOGIN_TOKEN+req.Token)
 	if err != nil {
@@ -92,10 +94,18 @@ func (c *AdminWxController) SendSmsCode()  {
 	}
 
 	//发送短信
+	var sendRet bool
 	code :=  utils.GetRandDigit(4)
-	err = services.SendSmsCode(req.Mobile,"",utils.LOGIN_CODE, code)
-	if err != nil {
-		c.FailWithMessage("发送验证码失败", "发送验证码失败"+err.Error())
+	if areaNum == "86" || areaNum == "" || areaNum == "0" {
+		//国内的短信
+		sendRet = services.SendSmsCode(req.Mobile, code)
+	} else {
+		//国际短信
+		sendRet = services.SendSmsCodeGj(req.Mobile, code, areaNum)
+	}
+
+	if !sendRet {
+		c.FailWithMessage("发送验证码失败", "发送验证码失败")
 		return
 	}
 	//存储验证码
@@ -139,11 +149,15 @@ func (c *AdminWxController) BindMobile()  {
 		return
 	}
 	//校验验证码
-	_, err = utils.Rc.RedisString(utils.HZ_MOBILE_ADMIN_WXLOGIN_MOBILE_CODE+req.Mobile)
+	code, err := utils.Rc.RedisString(utils.HZ_MOBILE_ADMIN_WXLOGIN_MOBILE_CODE + req.Mobile)
 	if err != nil {
 		c.FailWithMessage("验证码错误或者已过期", "验证码错误或者已过期"+err.Error())
 		return
 	}
+	if  req.Code != code {
+		c.FailWithMessage("验证码错误", "验证码错误")
+		return
+	}
 	//获取token,如果没有token不允许发送验证码
 	infoJson, err := utils.Rc.RedisString(utils.HZ_MOBILE_ADMIN_WXLOGIN_TOKEN+req.Token)
 	if err != nil {

+ 3 - 2
models/tables/admin/admin.go

@@ -125,8 +125,9 @@ type AdminItem struct {
 }
 
 type SmsCodeReq struct {
-	Mobile string
-	Token  string
+	Mobile  string
+	Token   string
+	AreaNum string
 }
 
 type BindMobileReq struct {

+ 70 - 18
services/sms.go

@@ -2,7 +2,6 @@ package services
 
 import (
 	"encoding/json"
-	"errors"
 	"fmt"
 	"hongze/hongze_mobile_admin/services/alarm_msg"
 	"hongze/hongze_mobile_admin/utils"
@@ -11,34 +10,31 @@ import (
 	"net/url"
 )
 
-func SendSmsCode(mobile, ip string, codeType int, vcode string) (err error) {
-	tplId := ""
-	switch codeType {
-	case utils.REGISTER_CODE:
-		tplId = "206722"
-	case utils.LOGIN_CODE:
-		tplId = "65692"
-	}
-	result, err := sendSms(mobile, tplId, vcode)
+func SendSmsCode(mobile, vCode string) bool {
+	tplId := "65692"
+	result, err := sendSms(mobile, tplId, vCode)
 	if err != nil {
-		return
+		fmt.Println("发送短信失败")
+		return false
 	}
 	fmt.Println("result", string(result))
 	var netReturn map[string]interface{}
 	err = json.Unmarshal(result, &netReturn)
 	if err != nil {
-		go alarm_msg.SendAlarmMsg("短信验证码发送失败 ErrMsg:"+err.Error()+" result"+string(result), 3)
-		//go utils.SendEmail("短信验证码发送失败","err:"+err.Error()+" result"+string(result), utils.EmailSendToUsers)
-		return
+		//go SendEmail("短信验证码发送失败", "err:"+err.Error()+" result"+string(result), utils.EmailSendToUsers)
+		go alarm_msg.SendAlarmMsg("短信验证码发送失败, Err:"+err.Error()+";Result:"+string(result), 2)
+		return false
 	}
 	if netReturn["error_code"].(float64) == 0 {
 		fmt.Printf("接口返回result字段是:\r\n%v", netReturn["result"])
+		return true
 	} else {
-		err = errors.New(string(result))
-		go alarm_msg.SendAlarmMsg("短信验证码发送失败 ErrMsg:"+err.Error()+" result"+string(result), 3)
-		//go utils.SendEmail("短信验证码发送失败"," result"+string(result), utils.EmailSendToUsers)
+		// 忽略错误的手机号码这种错误
+		if netReturn["error_code"].(float64) != 205401 {
+			go alarm_msg.SendAlarmMsg("短信验证码发送失败, Result:"+string(result), 2)
+		}
+		return false
 	}
-	return
 }
 
 func sendSms(mobile, tplId, code string) (rs []byte, err error) {
@@ -67,3 +63,59 @@ func sendSms(mobile, tplId, code string) (rs []byte, err error) {
 	defer resp.Body.Close()
 	return ioutil.ReadAll(resp.Body)
 }
+
+// SendSmsCodeGj 发送国际短信
+func SendSmsCodeGj(mobile, vCode, areaNum string) bool {
+	result, err := sendSmsGj(mobile, vCode, areaNum)
+	if err != nil {
+		fmt.Println("发送短信失败")
+		return false
+	}
+	fmt.Println("result", string(result))
+	var netReturn map[string]interface{}
+	err = json.Unmarshal(result, &netReturn)
+	if err != nil {
+		//go SendEmail("短信验证码发送失败", "err:"+err.Error()+" result"+string(result), utils.EmailSendToUsers)
+		go alarm_msg.SendAlarmMsg("短信验证码发送失败, Err:"+err.Error()+";Result:"+string(result), 2)
+		return false
+	}
+	if netReturn["error_code"].(float64) == 0 {
+		fmt.Printf("接口返回result字段是:\r\n%v", netReturn["result"])
+		return true
+	} else {
+		// 忽略错误的手机号码这种错误
+		if netReturn["error_code"].(float64) != 205401 {
+			go alarm_msg.SendAlarmMsg("短信验证码发送失败, Result:"+string(result), 2)
+		}
+		return false
+	}
+}
+
+// sendSmsGj 发送国际短信
+func sendSmsGj(mobile, code, areaNum string) (rs []byte, err error) {
+	var Url *url.URL
+	apiURL := "http://v.juhe.cn/smsInternational/send.php"
+	//初始化参数
+	param := url.Values{}
+	//配置请求参数,方法内部已处理urlencode问题,中文参数可以直接传参
+	param.Set("mobile", mobile)           //接受短信的用户手机号码
+	param.Set("tplId", "10054")           //您申请的短信模板ID,根据实际情况修改
+	param.Set("tplValue", "#code#="+code) //您设置的模板变量,根据实际情况
+	param.Set("key", utils.JhGjAppKey)    //应用APPKEY(应用详细页查询)
+	param.Set("areaNum", areaNum)         //应用APPKEY(应用详细页查询)
+
+	Url, err = url.Parse(apiURL)
+	if err != nil {
+		fmt.Printf("解析url错误:\r\n%v", err)
+		return nil, err
+	}
+	//如果参数中有中文参数,这个方法会进行URLEncode
+	Url.RawQuery = param.Encode()
+	resp, err := http.Get(Url.String())
+	if err != nil {
+		fmt.Println("err:", err)
+		return nil, err
+	}
+	defer resp.Body.Close()
+	return ioutil.ReadAll(resp.Body)
+}