如何在 Golang 中实现短信验证码验证_Golang 第三方接口集成实战


先实现短信验证码发送与校验,需注册阿里云并配置AccessKey、签名及模板;再通过Golang SDK调用短信服务,结合Redis存储验证码,设置有效期,并使用HTTP路由处理发送与验证逻辑。

如何在 golang 中实现短信验证码验证_golang 第三方接口集成实战

短信验证码验证在现代 Web 应用中非常常见,比如用户注册、登录、找回密码等场景。Golang 以其高性能和简洁语法,非常适合处理这类高并发请求。下面通过一个实战示例,展示如何在 Golang 中集成第三方短信服务(以阿里云 SMS 为例)实现完整的短信验证码发送与校验流程。

1. 注册并配置阿里云短信服务

要使用短信功能,首先需要开通阿里云短信服务:

  • 登录阿里云控制台,开通短信服务(SMS)
  • 获取AccessKey ID 和 AccessKey Secret
  • 申请短信签名(如:你的公司或应用名称)
  • 创建短信模板(例如:验证码为 ${code},有效5分钟)

保存好这些信息,后续代码中会用到。

2. 安装阿里云 SDK for Golang

使用官方提供的 Go SDK 发送短信:

go get github.com/aliyun/alibaba-cloud-sdk-go/sdk

导入所需包:

import ( "github.com/aliyun/alibaba-cloud-sdk-go/services/dysmsapi" "github.com/aliyun/alibaba-cloud-sdk-go/sdk" "github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials" )

3. 封装短信发送函数

编写一个通用函数 sendSMS 来调用阿里云接口:

func sendSMS(phoneNumber, code string) error { credentials := credentials.NewAccessKeyCredential("your-access-key-id", "your-access-key-secret") client, err := dysmsapi.NewClientWithOptions("cn-hangzhou", sdk.NewConfig(), credentials) if err != nil { return err } request := dysmsapi.CreateSendSmsRequest() request.Scheme = "https" request.PhoneNumbers = phoneNumber request.SignName = "你的签名名称" request.TemplateCode = "SMS_XXXXX" // 模板ID request.TemplateParam = fmt.Sprintf("{\"code\":\"%s\"}", code) _, err = client.SendSms(request) return err }

注意替换 AccessKey、签名、模板ID 等为你自己的值。

4. 实现验证码生成与存储(Redis 推荐)

验证码通常需要短期存储以便比对。推荐使用 Redis 存储手机号对应的验证码,设置过期时间(如5分钟)。

标贝悦读AI配音 标贝悦读AI配音

在线文字转语音软件-专业的配音网站

标贝悦读AI配音 66 查看详情 标贝悦读AI配音

安装 Redis 客户端:

go get github.com/go-redis/redis/v8

生成并保存验证码:

func generateAndStoreCode(rdb *redis.Client, phone string) (string, error) { code := fmt.Sprintf("%06d", rand.Intn(1000000)) // 6位随机数 ctx := context.Background() err := rdb.Set(ctx, "sms:"+phone, code, time.Minute*5).Err() return code, err }

5. 验证用户输入的验证码

用户提供验证码后,从 Redis 中读取原始值进行比对:

func verifyCode(rdb *redis.Client, phone, inputCode string) bool { ctx := context.Background() storedCode, err := rdb.Get(ctx, "sms:"+phone).Result() if err != nil || storedCode != inputCode { return false } // 验证成功后删除,防止重用 rdb.Del(ctx, "sms:"+phone) return true }

6. 完整流程示例(HTTP 路由)

使用 Gin 或 net/http 实现两个接口:

  • /send-code:接收手机号,生成验证码并发送
  • /verify-code:接收手机号和验证码,进行校验

示例片段:

r.POST("/send-code", func(c *gin.Context) { var req struct{ Phone string } if err := c.ShouldBindJSON(&req); err != nil { c.JSON(400, gin.H{"error": "无效参数"}) return } code, _ := generateAndStoreCode(rdb, req.Phone) go sendSMS(req.Phone, code) // 异步发送 c.JSON(200, gin.H{"msg": "验证码已发送"}) }) r.POST("/verify-code", func(c *gin.Context) { var req struct { Phone string Code string } if err := c.ShouldBindJSON(&req); err != nil { c.JSON(400, gin.H{"error": "无效参数"}) return } if verifyCode(rdb, req.Phone, req.Code) { c.JSON(200, gin.H{"verified": true}) } else { c.JSON(400, gin.H{"verified": false, "msg": "验证码错误或已过期"}) } })

基本上就这些。整个流程清晰可靠,适合生产环境使用。关键点在于安全存储密钥、合理设置验证码生命周期、避免频繁发送,并做好错误日志记录。集成其他平台(如腾讯云、容联云)逻辑类似,只需更换 SDK 和参数即可。

以上就是如何在 Golang 中实现短信验证码验证_Golang 第三方接口集成实战的详细内容,更多请关注其它相关文章!


# 如何在  # 威海短视频seo系统  # 舟山抖音seo客服  # 北京网站建设方案报价  # 任城区线上seo工具  # 盐城网站建设哪家靠谱  # 网站外部优化的重点  # 天津seo实操  # 扬州媒体网站优化优势  # seo是灰色产业嘛  # 如何优化关键词排名靠前  # 自己的  # 比对  # 键值  # 中非  # 两种  # golang  # 第三方  # 短信服务  # 验证码  # 验证  # 路由  # 阿里云  # 腾讯  # access  # github  # go  # json  # git  # js  # redis  # 短信验证码 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: Chart.js 教程:自定义插件实现图表与图例间距调整  VS Code源代码管理(SCM)视图的进阶使用技巧  如何在Python中安全地将环境变量转换为整数并满足Mypy类型检查  Win11如何分屏操作_Win11多窗口分屏技巧  性能与资源监视器快捷打开  口腔诊所管理软件推荐  智慧团建活动报名入口 智慧团建活动报名入口手机端官网​  火柴人战争网页版在线玩  抖音火山版如何进行提现  uc浏览器官网网页版使用 uc浏览器官网免费在线首页  word文档中的分隔符有哪些不同类型和用途_Word分隔符类型与用途方法  汽水音乐车机版 汽水音乐车机版官方入口  《合金装备4》有望推出重制版!制作人发话了  《绿竹漫游》关闭消息通知方法  BunnyStream TUS视频上传指南:解决401认证错误与参数配置  win11讲述人怎么关闭 Win11屏幕朗读辅助功能禁用方法【技巧】  word怎么将图片设置为页面背景并不影响打印_Word图片背景设置方法  《撕歌》会员开通方法  PHP页面重载后变量状态保持:实现用户档案连续浏览的教程  PHP 4 函数中引用参数的默认值限制与解决方案  J*aScript装饰器_元编程实战  键盘测试软件哪个好_键盘故障检测工具推荐  《小黑盒》删除历史浏览方法  《KARDS》冬季扩展包“国土阵线”上线!全新“协力”机制改变战场格局  J*a里如何处理ArithmeticException并防止除零_算术异常防护策略解析  windows10怎么关闭自动安装应用_windows10禁止推广应用下载  WooCommerce 新客户订单自动添加管理员备注教程  基于键值条件高效映射 Pandas DataFrame 多列数据  PHP odbc_fetch_array 返回值处理:如何正确访问嵌套数组元素  悟空浏览器网页版链接 悟空浏览器网页版最新有效地址  CodeIgniter 3 中基于 MySQL 数据高效生成动态图表教程  Animex动漫社社登录官网 Animex动漫社资源社入口直达  c++20的指定初始化(Designated Initializers)怎么用_c++ C风格结构体初始化  顺丰快递收费标准查询_如何查看顺丰最新收费价格  空腹吃苹果好吗 苹果空腹摄入指南  如何在CSS中使用伪类选择器_hover实现悬停效果  SQLAlchemy 2.0 与 Pydantic 模型类型安全集成指南  抖音猜你想搜能说明对方搜过吗  铁路12306座位怎么选_12306官方选座操作方法  服装短视频如何起号推广?服装短视频起号推广有什么要求?  Lar*el Eloquent中通过Join查询关联数据表:解决多行子查询问题  电脑开不了机怎么办 电脑无法开机的解决方法  《鹿路通》退余额方法  《战地6》反作弊已成功拦截240万次作弊 发售第一周98%比赛没有作弊  163邮箱登录入口官网 163.com邮箱登录入口  C#解析并修改XML后保存 如何确保格式与编码的正确性  教育查询官方网站入口 教育个人档案查询免费官网  Linux如何开发轻量级数据服务模块_Linux服务化设计  键盘保修需要什么_键盘售后维修流程  Lar*el如何创建自定义的辅助函数(Helpers)_Lar*el全局函数定义与加载方法 

 2025-11-14

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.