GO开发--记录调用阿里云短信服务

   GO开发--记录调用阿里云短信服务_第1张图片

 

 

    今天,我们要做一个很常见的功能,就是在用户修改密码时候给手机发送短信验证码,因为我们用的是阿里云的短信,所以当时想着直接上去拿到api 就可以很快搞定了,但是中间出现个小插曲,所以特意记录下来,首先我们登陆阿里云平台

GO开发--记录调用阿里云短信服务_第2张图片

 

 1.找到你要用对应的短信接口,

 2.然后选择你要使用的语言 ,

 3.然后在看中间的参数.

我使用的是go 语言,所以选择go

GO开发--记录调用阿里云短信服务_第3张图片

 

按照上图所说我填好了必要参数,为了更直观,我把代码直接copy到我的工具里面,想着demo通了 就可以直接使用了,

GO开发--记录调用阿里云短信服务_第4张图片

按理说这样就可以了吧,但是我运行 就报错了

这说明我们需要在模板参数中添加参数,

GO开发--记录调用阿里云短信服务_第5张图片

 

再次运行,就接收到短信了

GO开发--记录调用阿里云短信服务_第6张图片

所以,那个必填参数我觉得是不是少看一个啊,没有 TemplateParam 不行呀,果然有时候不能太自信.ok到此结束.

 

(温馨提醒:  用在项目中,上面的那些特定的参数都是要配置文件读取的),然后验证码是自己写一个算法随机生成传过去,手机号也是动态传过去的)

下面是完整的代码,因为涉及公司信息,必要的地方会做处理

   

调用代码:

/**
 * @Author csq
 * @Description //发送验证码
 * @Date 3:53 下午 2020/6/16
 **/
func (a AccountController) PostAccountCode(ctx context.Context) {
	mobile := ctx.FormValue("mobile")
	if mobile == "" {
		ctx.JSON(resp.Resp{
			Status:  400,
			Message: "手机号为空!",
			Data:    nil,
		})
		return
	}
	user := dao.UserExample.FindByMobile(mobile) //根据手机号查询用户,没有用户不让发短信验证码
	if user == nil {
		ctx.JSON(resp.Resp{
			Status:  400,
			Message: "未查询到该用户!",
			Data:    nil,
		})
		return
	}
	var num int
	number := tools.InitData(&num) //随机生成6位验证码
	id := strconv.FormatInt(*user.ID, 10)
	code := strconv.FormatInt(int64(number), 10)
	_, err := tools.Sms(code,mobile) //传入手机号,验证码 发送 短信
	if err != nil {
		ctx.JSON(resp.Resp{
			Status:  400,
			Message: "短信发送失败!",
			Data:    nil,
		})
		return
	}
	constant.Redis.Do("SET", id, tools.JSON(number), "EX", "300") //存入redis并设置过期时间为5分钟 目的是为了比较用户提交的验证码是否是一样的
	a.Response(ctx, user, "验证码发送成功!", nil)
}

发送短信的方法

func Sms(code string, phone string) (string, error) {
	client, err := dysmsapi.NewClientWithAccessKey("cn-hangzhou", "accessKeyId", "accessKeySercret")
	request := dysmsapi.CreateSendSmsRequest()
	request.Scheme = "https"
	request.PhoneNumbers = phone
	request.SignName = "模板签名名称"
	request.TemplateCode = "模板签名"
	request.TemplateParam = "{\"code\":\"" + code + "\"}"
	response, err := client.SendSms(request)
	if err != nil {
		return "", err
	}
	return response.Message, nil

}

随机生成六位数的方法

/**
 * @Author csq
 * @Description //随机生成6位数字
 * @Date 3:55 下午 2020/6/16
 **/
func InitData(p *int) int {
	rand.Seed(time.Now().UnixNano())
	num := rand.Intn(1000000)
	return num
}

以上就是一个完整的发送用户短信验证码的过程.

 

 

关注我,每天给你一些工作中遇见的问题,哪怕是最简单的,让我们一起学习.

 

 

 

你可能感兴趣的:(GO开发问题记录)