短信验证码
测试短信验证码
-
申请 阿里云账号、开通短信验证码功能、申请签名、申请模板、申请 AccessKey
-
打开 OpenAPI Explorer。
-
选择 左侧 SendSms
-
在中间位置依次填:华东1(杭州)、手机号、签名的名称、模板Code、{”code“:验证码}
-
在右侧自动生成代码。 拷贝至,测试.go 程序中
-
将 dysmsapi.NewClientWithAccessKey() 函数的 :<accessKeyId> 和 <accessSecret> 替换为我们申请到的 AccessKey 对应值。
-
虚拟机安装的 SDK 版本,比从 OpenAPI Explorer 工具拿到的代码版本低。需要添加一行代码:
request.Domain = "dysmsapi.aliyuncs.com"
-
运行 测试.go 程序。 —— 成功:在手机上收到 短信验证码。
将短信验证码集成到项目
-
修改 router 分组。
--- 在 web/main.go 中 // 添加路由分组 r1 := router.Group("/api/v1.0") { r1.GET("/session", controller.GetSession) r1.GET("/imagecode/:uuid", controller.GetImageCd) r1.GET("/smscode/:phone", controller.GetSmscd) }
-
提取Get请求中的数据
--- 在 web/controller/user.go 中 GET 请求 URL 格式: http://IP:port/资源路径?key=value&key=value&key=value... func GetSmscd(ctx *gin.Context) { // 获取短信验证码 phone := ctx.Param("phone") // 拆分 GET 请求中 的 URL === 格式: 资源路径?k=v&k=v&k=v imgCode := ctx.Query("text") uuid := ctx.Query("id") fmt.Println("---out---:", phone, imgCode, uuid) }
-
封装实现 校验图片 验证码
--- 依据 MVC 代码架构。 创建 model/modelFunc.go // 校验图片验证码 func CheckImgCode(uuid, imgCode string) bool { // 链接 redis conn, err := redis.Dial("tcp", "192.168.6.108:6379") if err != nil { fmt.Println("redis.Dial err:", err) return false } defer conn.Close() // 查询 redis 数据 code, err := redis.String(conn.Do("get", uuid)) if err != nil { fmt.Println("查询错误 err:", err) return false } // 返回校验结果 return code == imgCode }
-
根据校验结果,发送短信验证码
result := model.CheckImgCode(uuid, imgCode) if result { // 校验成功 // 发送短信验证码 response, _ := client.SendSms(request) if response.IsSuccess() { // 发送短信验证码 成功 } else { // 发送端验证码 失败. } } else { // 校验失败 }
-
发送短信验证码实现
client, _ := dysmsapi.NewClientWithAccessKey("cn-hangzhou", "LTAI4FgbQXjf117SX7E75Rmn",