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端:


 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号