golang调用阿里云发短信

2024-04-28 10:52
文章标签 阿里 golang 调用 发短信

本文主要是介绍golang调用阿里云发短信,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

之前用golang封装的一个发送阿里云短信的工具包,代码如下

client.go

package smsimport ("context""github.com/go-playground/validator/v10""github.com/pkg/errors"
)type Client interface {// Send 发送短信Send(ctx context.Context, opt *SendOpt) error
}type SendOpt struct {// 必填:待发送手机号// 批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式PhoneNumbers []string `validate:"required,max=1000"`SignName     string// 必填:短信模板-可在短信控制台中找到TemplateCode string `validate:"required"`// 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为// 友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,// 否则会导致JSON在服务端解析失败TemplateParam string `validate:"required"`// 可选-上行短信扩展码(扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段)SmsUpExtendCode string// 可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者OutId string
}func (p *SendOpt) Valid() error {if err := validator.New().Struct(p); err != nil {return errors.WithStack(err)}return nil
}

impl.go

package smsimport ("context""strings""time""github.com/denverdino/aliyungo/sms""github.com/pkg/errors"
)const (defaultSignName = ""
)var (ErrBusinessLimitControl = errors.New("BUSINESS_LIMIT_CONTROL")
)type ClientImpl struct {aliyunSms *sms.DYSmsClient
}type CodeStore interface {Save(ctx context.Context, key, smsCode string, expire time.Duration) errorGet(ctx context.Context, key string) (string, error)
}type ClientOpt struct {Key    stringSecret string
}func NewClient(opt *ClientOpt) Client {return &ClientImpl{aliyunSms: sms.NewDYSmsClient(opt.Key, opt.Secret),}
}func (p *ClientImpl) Send(_ context.Context, opt *SendOpt) error {if err := opt.Valid(); err != nil {return err}s := defaultSignNameif opt.SignName != "" {s = opt.SignName}res, err := p.aliyunSms.SendSms(&sms.SendSmsArgs{PhoneNumbers:    strings.Join(opt.PhoneNumbers, ","),SignName:        s,TemplateCode:    opt.TemplateCode,TemplateParam:   opt.TemplateParam,SmsUpExtendCode: opt.SmsUpExtendCode,OutId:           opt.OutId,})if err != nil {return errors.WithStack(err)}switch res.Code {case "OK":return nilcase "isv.BUSINESS_LIMIT_CONTROL":return ErrBusinessLimitControldefault:return errors.Errorf("send sms fail: %s, RequestId<%s>, Code<%s>, BizId<%s>",res.Message, res.RequestId, res.Code, res.BizId)}
}

这篇关于golang调用阿里云发短信的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/943042

相关文章

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

Python如何调用另一个类的方法和属性

《Python如何调用另一个类的方法和属性》在Python面向对象编程中,类与类之间的交互是非常常见的场景,本文将详细介绍在Python中一个类如何调用另一个类的方法和属性,大家可以根据需要进行选择... 目录一、前言二、基本调用方式通过实例化调用通过类继承调用三、高级调用方式通过组合方式调用通过类方法/静

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制

Python用Flask封装API及调用详解

《Python用Flask封装API及调用详解》本文介绍Flask的优势(轻量、灵活、易扩展),对比GET/POST表单/JSON请求方式,涵盖错误处理、开发建议及生产环境部署注意事项... 目录一、Flask的优势一、基础设置二、GET请求方式服务端代码客户端调用三、POST表单方式服务端代码客户端调用四

Python跨文件实例化、跨文件调用及导入库示例代码

《Python跨文件实例化、跨文件调用及导入库示例代码》在Python开发过程中,经常会遇到需要在一个工程中调用另一个工程的Python文件的情况,:本文主要介绍Python跨文件实例化、跨文件调... 目录1. 核心对比表格(完整汇总)1.1 自定义模块跨文件调用汇总表1.2 第三方库使用汇总表1.3 导

使用Python的requests库调用API接口的详细步骤

《使用Python的requests库调用API接口的详细步骤》使用Python的requests库调用API接口是开发中最常用的方式之一,它简化了HTTP请求的处理流程,以下是详细步骤和实战示例,涵... 目录一、准备工作:安装 requests 库二、基本调用流程(以 RESTful API 为例)1.

Python调用LibreOffice处理自动化文档的完整指南

《Python调用LibreOffice处理自动化文档的完整指南》在数字化转型的浪潮中,文档处理自动化已成为提升效率的关键,LibreOffice作为开源办公软件的佼佼者,其命令行功能结合Python... 目录引言一、环境搭建:三步构建自动化基石1. 安装LibreOffice与python2. 验证安装

全面解析Golang 中的 Gorilla CORS 中间件正确用法

《全面解析Golang中的GorillaCORS中间件正确用法》Golang中使用gorilla/mux路由器配合rs/cors中间件库可以优雅地解决这个问题,然而,很多人刚开始使用时会遇到配... 目录如何让 golang 中的 Gorilla CORS 中间件正确工作一、基础依赖二、错误用法(很多人一开

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

golang版本升级如何实现

《golang版本升级如何实现》:本文主要介绍golang版本升级如何实现问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录golanwww.chinasem.cng版本升级linux上golang版本升级删除golang旧版本安装golang最新版本总结gola