使用gin框架、gorm映射
所使用的连接容联云参考容联云官方文档,放置到utils中,
gin项目结构根据自身需要,大题如下设置:
utils--sms.go
package main
import (
"github.com/cloopen/go-sms-sdk/cloopen"
"log"
)
func main() {
cfg := cloopen.DefaultConfig().
// 开发者主账号,登陆云通讯网站后,可在控制台首页看到开发者主账号ACCOUNT SID和主账号令牌AUTH TOKEN
WithAPIAccount("accountSId").
// 主账号令牌 TOKEN,登陆云通讯网站后,可在控制台首页看到开发者主账号ACCOUNT SID和主账号令牌AUTH TOKEN
WithAPIToken("auth token")
sms := cloopen.NewJsonClient(cfg).SMS()
// 下发包体参数
input := &cloopen.SendRequest{
// 应用的APPID
AppId: "appId",
// 手机号码
To: "1352*******",
// 模版ID
TemplateId: "templateId",
// 模版变量内容 非必填
Datas: []string{"您的验证码是****"},
}
// 下发
resp, err := sms.Send(input)
if err != nil {
log.Fatal(err)
return
}
log.Printf("Response MsgId: %s \n", resp.TemplateSMS.SmsMessageSid)
}
controller--user_controller.go
package controller
import (
"fmt"
"github.com/gin-gonic/gin"
"myproject/model"
"myproject/utils"
"regexp"
"strconv"
)
// 总路由分发
func UserRegister(userGrp *gin.RouterGroup) {
userGrp.Use().POST("/send_code", Sendcode)
userGrp.Use().POST("/register", Register)
}
// 发送短信验证码
func Sendcode(c *gin.Context) {
//获取参数。手机号
//验证合法
//从redis获取存在则不能重复发
//不存在 生成随机数 调用发短信接口
//存入redis返回结果
mobile := c.Query("mobile")
fmt.Println(">>>>>>>" + mobile)
reg := "^1[3-9]{1}\\d{9}$"
result := regexp.MustCompile(reg)
flag := result.MatchString(mobile)
if !flag {
c.JSON(200, gin.H{
"code": "10011",
"res": "手机号不正确,请重新输入",
})
} else {
r := utils.GetRedis()
value := r.Get(mobile)
if value == "" {
// 生成随机值短信验证码
num := utils.RandInt(10000, 99999)
fmt.Println(num)
num1 := strconv.Itoa(num) // 转换string
// 调用容联云发送短信接口
utils.SendSms(mobile, num1)
r.Setex(mobile, 60, num1)
c.JSON(200, gin.H{
"code": "200",
"res": "发送成功",
})
} else {
c.JSON(200, gin.H{
"code": "10012",
"res": "不能重复发送",
})
}
}
}
type UserInfo struct {
Mobile string
Code string
}
// 注册 发送短信 随机值
func Register(c *gin.Context) {
//mobile := c.PostForm("mobile")
//newcode := c.PostForm("newcode")
var userInfo UserInfo
c.Bind(&userInfo)
mobile := userInfo.Mobile
newcode := userInfo.Code
r := utils.GetRedis()
code := r.Get(mobile)
if code != newcode {
c.JSON(200, gin.H{
"code": "10020",
"res": "验证码不正确",
})
} else {
//加入数据库
user := &model.User{
Name: mobile,
Mobile: mobile,
Password: "123456",
}
db := model.GetDb()
db.Create(user)
fmt.Println(user.ID)
//生成token返回
token, _ := utils.ReleaseToken(user.ID)
c.JSON(200, gin.H{
"code": "200",
"res": "注册成功",
"userid": user.ID,
"token": token,
})
}
}
获取前端传参方式:
获取 URL (query)参数
querystring
指的是URL中?
后面携带的参数,例如:/user/search?username=zhangsan&address=北京
。
获取 Form参数
前端请求的数据通过form表单提交
参数绑定
使用 Bind() 方法, 根据请求方式,自动提取 JSON, form表单 和 Query 类型的参数,放入结构体中