Go语言初识应用--容联云发送短信验证码、手机号注册

使用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 类型的参数,放入结构体中

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值