shanshanzhong c582087c0f refactor: 更新项目引用路径从perfect-panel/ppanel-server到perfect-panel/server
feat: 添加版本和构建时间变量
fix: 修正短信队列类型注释错误
style: 清理未使用的代码和测试文件
docs: 更新安装文档中的下载链接
chore: 迁移数据库脚本添加日志和订阅配置
2025-10-13 01:33:03 -07:00

64 lines
1.8 KiB
Go

package twilio
import (
"fmt"
"github.com/perfect-panel/server/pkg/logger"
"github.com/perfect-panel/server/pkg/templatex"
"github.com/twilio/twilio-go"
twilioApi "github.com/twilio/twilio-go/rest/api/v2010"
)
type Config struct {
Access string `json:"access"`
Secret string `json:"secret"`
PhoneNumber string `json:"phone_number"`
Template string `json:"template"`
}
type Client struct {
config Config
client *twilio.RestClient
}
func NewClient(config Config) *Client {
client := twilio.NewRestClientWithParams(twilio.ClientParams{
Username: config.Access,
Password: config.Secret,
})
return &Client{
config: config,
client: client,
}
}
func (c *Client) SendCode(area, mobile, code string) error {
params := &twilioApi.CreateMessageParams{}
params.SetTo(fmt.Sprintf("+%s%s", area, mobile))
params.SetFrom(c.config.PhoneNumber)
text, err := templatex.RenderToString(c.config.Template, map[string]interface{}{
"code": code,
})
if err != nil {
logger.Error("twilio send code render template error", logger.Field("error", err.Error()), logger.Field("template", c.config.Template), logger.Field("code", code))
}
params.SetBody(text)
resp, err := c.client.Api.CreateMessage(params)
if err != nil {
logger.Error("twilio send code error", logger.Field("error", err.Error()), logger.Field("params", params))
return fmt.Errorf("twilio send code error: %s", err.Error())
}
if resp.ErrorCode != nil {
logger.Error("twilio send code error", logger.Field("error_code", *resp.ErrorCode), logger.Field("error_message", *resp.ErrorMessage))
return fmt.Errorf("twilio send code error: %s", *resp.ErrorMessage)
}
return nil
}
func (c *Client) GetSendCodeContent(code string) string {
text, _ := templatex.RenderToString(c.config.Template, map[string]interface{}{
"code": code,
})
return text
}