go語(yǔ)言實(shí)現(xiàn)短信發(fā)送實(shí)例探究
特點(diǎn)
- 支持目前市面多家服務(wù)商
- 一套寫(xiě)法兼容所有平臺(tái)
- 簡(jiǎn)單配置即可靈活增減服務(wù)商
- 內(nèi)置多種服務(wù)商輪詢(xún)策略、支持自定義輪詢(xún)策略
- 統(tǒng)一的返回值格式,便于日志與監(jiān)控
- 更多等你去發(fā)現(xiàn)與改進(jìn)...
平臺(tái)支持
目前支持
- 阿里云
- 互億無(wú)線(xiàn)
- 短信寶
- 聚合數(shù)據(jù)
- 網(wǎng)易云信
- 微網(wǎng)通聯(lián)
- twilio
環(huán)境需求
- 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/twilio"
)
func main() {
sms := gosms.NewParser(gateways.Gateways{Twilio: twilio.Twilio{AccountSID: "ACd********", AuthToken: "***********", TwilioPhoneNumber: "+1********"}})
// 常規(guī)
sms.Send(18888888888, gosms.MapStringAny{
"content": "您的驗(yàn)證碼是:****。請(qǐng)不要把驗(yàn)證碼泄露給其他人。",
"template": "SMS_001",
"data": gosms.MapStrings{
"code": "6379",
},
}, nil)
}短信內(nèi)容
由于使用多網(wǎng)關(guān)發(fā)送,所以一條短信要支持多平臺(tái)發(fā)送,每家的發(fā)送方式不一樣,但是我們抽象定義了以下公用屬性:
content文字內(nèi)容,使用在像云片類(lèi)似的以文字內(nèi)容發(fā)送的平臺(tái)sign_name簽名template模板 ID,使用在以模板ID來(lái)發(fā)送短信的平臺(tái)data模板變量,使用在以模板ID來(lái)發(fā)送短信的平臺(tái)
所以,在使用過(guò)程中你可以根據(jù)所要使用的平臺(tái)定義發(fā)送的內(nèi)容。
sms.Send(18888888888, gosms.MapStringAny{
"content": "您的驗(yàn)證碼是:****。請(qǐng)不要把驗(yàn)證碼泄露給其他人。",
"template": "SMS_001",
"data": gosms.MapStrings{
"code": "6379",
},
}, nil)你也可以使用閉包來(lái)返回對(duì)應(yīng)的值:
sms.Send(18888888888, gosms.MapStringAny{
"content": func(gateway gosms.IGateway) string {
return "您的驗(yàn)證碼是:****。請(qǐng)不要把驗(yàn)證碼泄露給其他人。"
},
"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)發(fā)送網(wǎng)關(guān)
默認(rèn)使用初始化中的網(wǎng)關(guān)發(fā)送,如果某一條短信你想要覆蓋默認(rèn)的設(shè)置。在 send 方法中使用第三個(gè)參數(shù)即可:
sms := gosms.NewGateways(twilio.GateWay("ACd********", "***********", "+1***********"))
sms.Send(18888888888, gosms.MapStringAny{
"content": "您的驗(yàn)證碼是:****。請(qǐng)不要把驗(yàn)證碼泄露給其他人。",
}, nil)自定義網(wǎng)關(guān)
本拓展已經(jīng)支持用戶(hù)自定義網(wǎng)關(guān),你可以很方便的配置即可當(dāng)成與其它拓展一樣的使用:
sms := gosms.NewGateways()
sms.Extend("aliyun", aliyun.GateWay("accessKeyId", "accessKeySecret"))
sms.Send(18888888888, gosms.MapStringAny{
"content": "您的驗(yàn)證碼是:****。請(qǐng)不要把驗(yàn)證碼泄露給其他人。",
}, []string{"aliyun"})自定義網(wǎng)關(guān)實(shí)現(xiàn)接口
// IGateway 網(wǎng)關(guān)
type IGateway interface {
// I 用于初始化默認(rèn)值
I() IGateway
// GetName 網(wǎng)關(guān)名稱(chēng)
GetName() string
// Send 發(fā)送操作
Send(to IPhoneNumber, message IMessage) (SMSResult, error)
}通過(guò)Sender函數(shù)去發(fā)送
package main
import (
"fmt"
gosms "github.com/pkg6/go-sms"
"github.com/pkg6/go-sms/gateways/twilio"
)
func main() {
gateway := twilio.GateWay("ACd********", "********", "+1111111")
var message = gosms.MessageContent("Hello from Twilio")
number := gosms.CHNPhoneNumber(18888888888)
result, err := gosms.Sender(number, message, gateway)
if resp, ok := result.ClientResult.Response.(twilio.Response); ok {
fmt.Println(resp)
}
fmt.Println(err)
}總結(jié)
以上就是go語(yǔ)言實(shí)現(xiàn)短信發(fā)送實(shí)例探究的詳細(xì)內(nèi)容,更多關(guān)于go語(yǔ)言發(fā)送短信的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go語(yǔ)言基礎(chǔ)go doc命令用法及示例詳解
這篇文章主要為大家介紹了Go語(yǔ)言基礎(chǔ)go doc命令的用法及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步2021-11-11
解析Golang中的鎖競(jìng)爭(zhēng)問(wèn)題
這篇文章主要介紹了golang中的鎖競(jìng)爭(zhēng)問(wèn)題,本文通過(guò)實(shí)例代碼給大家詳細(xì)講解,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-10-10
go的websocket實(shí)現(xiàn)原理與用法詳解
這篇文章主要介紹了go的websocket實(shí)現(xiàn)原理與用法,詳細(xì)分析了websocket的功能、原理及Go語(yǔ)言實(shí)現(xiàn)websocket的相關(guān)技巧,需要的朋友可以參考下2016-07-07
golang使用aes庫(kù)實(shí)現(xiàn)加解密操作
這篇文章主要介紹了golang使用aes庫(kù)實(shí)現(xiàn)加解密操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12
Go Excelize API源碼解讀GetSheetViewOptions與SetPageLayo
這篇文章主要為大家介紹了Go Excelize API源碼解讀GetSheetViewOptions與SetPageLayout方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08

