GO開發--記錄調用阿里雲短信服務

   

 

 

    今天,我們要做一個很常見的功能,就是在用戶修改密碼時候給手機發送短信驗證碼,因爲我們用的是阿里雲的短信,所以當時想着直接上去拿到api 就可以很快搞定了,但是中間出現個小插曲,所以特意記錄下來,首先我們登陸阿里雲平臺

 

 1.找到你要用對應的短信接口,

 2.然後選擇你要使用的語言 ,

 3.然後在看中間的參數.

我使用的是go 語言,所以選擇go

 

按照上圖所說我填好了必要參數,爲了更直觀,我把代碼直接copy到我的工具裏面,想着demo通了 就可以直接使用了,

按理說這樣就可以了吧,但是我運行 就報錯了

這說明我們需要在模板參數中添加參數,

 

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

所以,那個必填參數我覺得是不是少看一個啊,沒有 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
}

以上就是一個完整的發送用戶短信驗證碼的過程.

 

 

關注我,每天給你一些工作中遇見的問題,哪怕是最簡單的,讓我們一起學習.

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章