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

posted @ 2023-05-18 18:15  99号的格调  阅读(455)  评论(0编辑  收藏  举报