Golang项目实战--实现手机验证码发送功能
首先,我们选择阿里云作为第三方,开通短信服务,完成相应配置
1.模版签名
2.模版管理
3.key和sercet
别忘了,需要进到个人中心提前充好money,因为一条短信大概是4分钱。
对于验证吗,我们需要手动生成六位随机密码,在这里给出我的方法:可以指定的参数n,生成n位数字随机验证码
func GenerateSmsCode(witdh int) string {
//生成width长度的短信验证码
numeric := [10]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
r := len(numeric)
rand.Seed(time.Now().UnixNano())
var sb strings.Builder
for i := 0; i < witdh; i++ {
fmt.Fprintf(&sb, "%d", numeric[rand.Intn(r)])
}
return sb.String()
}
然后,创建主逻辑,我们需要在发送请求时,带着一些参数,才能获取到验证码,由于部分信息涉及到隐私,这里将不予展示,这些信息在阿里云的控制台都会有
func SendSms(ctx *gin.Context) {
client, err := dysmsapi.NewClientWithAccessKey("cn-qingdao", "", "")
if err != nil {
panic(err)
}
smsCode := GenerateSmsCode(6)
request := dysmsapi.CreateSendSmsRequest()
request.Scheme = "https"
request.PhoneNumbers = "" //接收短信的手机号码
request.SignName = "" //短信签名名称
request.TemplateCode = "" //短信模板ID
request.TemplateParam = "{\"code\":" + smsCode + "}"
response, err := client.SendSms(request)
if err != nil {
fmt.Print(err.Error())
}
fmt.Printf("response is %#v\n", response.Code)
//将验证吗写入redis
rdb := redis.NewClient(&redis.Options{
Addr: fmt.Sprintf("%s:%d", global.ServerConfig.RedisInfo.Host, global.ServerConfig.RedisInfo.Port),
})
rdb.Set(context.Background(), sendSmsForm.Mobile, smsCode, time.Duration(global.ServerConfig.RedisInfo.Expire)*time.Second)
ctx.JSON(http.StatusOK, gin.H{
"msg": "发送成功",
})
}
测试,
APP端: