特点
支持目前市面多家服务商
一套写法兼容所有平台
简单配置即可灵活增减服务商
内置多种服务商轮询策略、支持自定义轮询策略
统一的返回值格式,便于日志与监控
更多等你去发现与改进...
平台支持
目前支持
环境需求
Golang >= 1.18
安装
$ go get github.com/pkg6/go-sms
使用
package main
import (
gosms "github.com/pkg6/go-sms"
"github.com/pkg6/go-sms/gateways"
"github.com/pkg6/go-sms/gateways/ihuyi"
)
func main() {
sms := gosms.NewParser(gateways.Gateways{IHuYi: ihuyi.IHuYi{Account: "APIID", Password: "APIKEY"}})
// 常规
sms.Send(18888888888, gosms.MapStringAny{
"content": "您的验证码是:****。请不要把验证码泄露给其他人。",
"template": "SMS_001",
"data": gosms.MapStrings{
"code": "6379",
},
}, nil)
}
短信内容
由于使用多网关发送,所以一条短信要支持多平台发送,每家的发送方式不一样,但是我们抽象定义了以下公用属性:
content 文字内容,使用在像云片类似的以文字内容发送的平台
sign_name 签名
template 模板 ID,使用在以模板ID来发送短信的平台
data 模板变量,使用在以模板ID来发送短信的平台
所以,在使用过程中你可以根据所要使用的平台定义发送的内容。
sms.Send(18888888888, gosms.MapStringAny{
"content": "您的验证码是:****。请不要把验证码泄露给其他人。",
"template": "SMS_001",
"data": gosms.MapStrings{
"code": "6379",
},
}, nil)
你也可以使用闭包来返回对应的值:
sms.Send(18888888888, gosms.MapStringAny{
"content": func(gateway gosms.IGateway) string {
return "您的验证码是:****。请不要把验证码泄露给其他人。"
},
"template": func(gateway gosms.IGateway) string {
if gateway.GetName() == "aliyun" {
return "TP2818"
}
return "SMS_001"
},
"data": func(gateway gosms.IGateway) gosms.MapStrings {
return map[string]string{
"code": "1234",
}
},
}, nil)
发送网关
默认使用初始化中的网关发送,如果某一条短信你想要覆盖默认的设置。在 send 方法中使用第三个参数即可:
g := gosms.NewGateways([]gosms.IGateway{ihuyi.GateWay("APIID", "APIKEY")})
g.Send(18888888888, gosms.MapStringAny{
"content": "您的验证码是:****。请不要把验证码泄露给其他人。",
}, []string{"ihuyi"})
自定义网关
本拓展已经支持用户自定义网关,你可以很方便的配置即可当成与其它拓展一样的使用:
g.Extend("ihuyi2", ihuyi.GateWay("APIID", "APIKEY"))
g := gosms.NewGateways([]gosms.IGateway{ihuyi.GateWay("APIID", "APIKEY")})
g.Send(18888888888, gosms.MapStringAny{
"content": "您的验证码是:****。请不要把验证码泄露给其他人。",
}, []string{"ihuyi2"})
自定义网关实现接口
// IGateway 网关
type IGateway interface {
// Clone 用于初始化默认值
Clone() IGateway
// GetName 网关名称
GetName() string
// Send 发送操作
Send(to IPhoneNumber, message IMessage) (SMSResult, error)
}
通过Sender函数去发送
package main
import (
"fmt"
gosms "github.com/pkg6/go-sms"
"github.com/pkg6/go-sms/gateways/ihuyi"
)
func main() {
var number = gosms.NoCodePhoneNumber(18888888888)
//对接相关资源 APIID 为account APIKEY 为password
var gateway = ihuyi.GateWay("APIID", "APIKEY")
var message = ihuyi.MessageContent("您的验证码是:****。请不要把验证码泄露给其他人。")
result, err := gosms.Sender(number, message, gateway)
if resp, ok := result.ClientResult.Response.(ihuyi.Response); ok {
fmt.Println(resp)
}
fmt.Println(err)
}
加入我们
如果你认可我们的开源项目,有兴趣为 go-sms的发展做贡献,竭诚欢迎加入我们一起开发完善。无论是报告错误或是 Pull Request 开发,那怕是修改一个错别字也是对我们莫大的帮助。