mirror of
				https://github.com/yangjian102621/geekai.git
				synced 2025-11-04 16:23:42 +08:00 
			
		
		
		
	feat: merge sms branch,add DuanXinBao sms service implemetation
This commit is contained in:
		@@ -2,6 +2,11 @@ package oss
 | 
			
		||||
 | 
			
		||||
import "github.com/gin-gonic/gin"
 | 
			
		||||
 | 
			
		||||
const Local = "LOCAL"
 | 
			
		||||
const Minio = "MINIO"
 | 
			
		||||
const QiNiu = "QINIU"
 | 
			
		||||
const AliYun = "ALIYUN"
 | 
			
		||||
 | 
			
		||||
type File struct {
 | 
			
		||||
	Name string `json:"name"`
 | 
			
		||||
	Size int64  `json:"size"`
 | 
			
		||||
 
 | 
			
		||||
@@ -9,11 +9,6 @@ type UploaderManager struct {
 | 
			
		||||
	handler Uploader
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const Local = "LOCAL"
 | 
			
		||||
const Minio = "MINIO"
 | 
			
		||||
const QiNiu = "QINIU"
 | 
			
		||||
const AliYun = "ALIYUN"
 | 
			
		||||
 | 
			
		||||
func NewUploaderManager(config *types.AppConfig) (*UploaderManager, error) {
 | 
			
		||||
	active := Local
 | 
			
		||||
	if config.OSS.Active != "" {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
package service
 | 
			
		||||
package sms
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"chatplus/core/types"
 | 
			
		||||
@@ -7,22 +7,23 @@ import (
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type AliYunSmsService struct {
 | 
			
		||||
	config *types.AliYunSmsConfig
 | 
			
		||||
	config *types.SmsConfigAli
 | 
			
		||||
	client *dysmsapi.Client
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewAliYunSmsService(config *types.AppConfig) (*AliYunSmsService, error) {
 | 
			
		||||
func NewAliYunSmsService(appConfig *types.AppConfig) (*AliYunSmsService, error) {
 | 
			
		||||
	config := &appConfig.SMS.Ali
 | 
			
		||||
	// 创建阿里云短信客户端
 | 
			
		||||
	client, err := dysmsapi.NewClientWithAccessKey(
 | 
			
		||||
		"cn-hangzhou",
 | 
			
		||||
		config.SmsConfig.AccessKey,
 | 
			
		||||
		config.SmsConfig.AccessSecret)
 | 
			
		||||
		config.AccessKey,
 | 
			
		||||
		config.AccessSecret)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, fmt.Errorf("failed to create client: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return &AliYunSmsService{
 | 
			
		||||
		config: &config.SmsConfig,
 | 
			
		||||
		config: config,
 | 
			
		||||
		client: client,
 | 
			
		||||
	}, nil
 | 
			
		||||
}
 | 
			
		||||
@@ -46,8 +47,7 @@ func (s *AliYunSmsService) SendVerifyCode(mobile string, code int) error {
 | 
			
		||||
	if response.Code != "OK" {
 | 
			
		||||
		return fmt.Errorf("failed to send SMS:%v", response.Message)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var _ SmsService = &AliYunSmsService{}
 | 
			
		||||
var _ Service = &AliYunSmsService{}
 | 
			
		||||
							
								
								
									
										72
									
								
								api/service/sms/bao.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								api/service/sms/bao.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,72 @@
 | 
			
		||||
package sms
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"chatplus/core/types"
 | 
			
		||||
	"chatplus/utils"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"net/url"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type BaoSmsService struct {
 | 
			
		||||
	config *types.SmsConfigBao
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewSmsBaoSmsService(appConfig *types.AppConfig) *BaoSmsService {
 | 
			
		||||
	config := appConfig.SMS.Bao
 | 
			
		||||
	if config.Domain == "" { // use default domain
 | 
			
		||||
		config.Domain = "api.smsbao.com"
 | 
			
		||||
		logger.Infof("Using default domain for SMS-BAO: %s", config.Domain)
 | 
			
		||||
	}
 | 
			
		||||
	return &BaoSmsService{
 | 
			
		||||
		config: &config,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var errMsg = map[string]string{
 | 
			
		||||
	"0":  "短信发送成功",
 | 
			
		||||
	"-1": "参数不全",
 | 
			
		||||
	"-2": "服务器空间不支持,请确认支持curl或者fsocket,联系您的空间商解决或者更换空间",
 | 
			
		||||
	"30": "密码错误",
 | 
			
		||||
	"40": "账号不存在",
 | 
			
		||||
	"41": "余额不足",
 | 
			
		||||
	"42": "账户已过期",
 | 
			
		||||
	"43": "IP地址限制",
 | 
			
		||||
	"50": "内容含有敏感词",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *BaoSmsService) SendVerifyCode(mobile string, code int) error {
 | 
			
		||||
 | 
			
		||||
	content := fmt.Sprintf("%s%s", s.config.Sign, s.config.CodeTemplate)
 | 
			
		||||
	content = strings.ReplaceAll(content, "{code}", strconv.Itoa(code))
 | 
			
		||||
	password := utils.Md5(s.config.Password)
 | 
			
		||||
	params := url.Values{}
 | 
			
		||||
	params.Set("u", s.config.Username)
 | 
			
		||||
	params.Set("p", password)
 | 
			
		||||
	params.Set("m", mobile)
 | 
			
		||||
	params.Set("c", content)
 | 
			
		||||
 | 
			
		||||
	apiURL := fmt.Sprintf("https://%s/sms?%s", s.config.Domain, params.Encode())
 | 
			
		||||
	response, err := http.Get(apiURL)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	defer response.Body.Close()
 | 
			
		||||
 | 
			
		||||
	body, err := io.ReadAll(response.Body)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	result := string(body)
 | 
			
		||||
	logger.Debugf("send SmsBao result: %v", errMsg[result])
 | 
			
		||||
 | 
			
		||||
	if result != "0" {
 | 
			
		||||
		return fmt.Errorf("failed to send SMS:%v", errMsg[result])
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var _ Service = &BaoSmsService{}
 | 
			
		||||
							
								
								
									
										8
									
								
								api/service/sms/service.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								api/service/sms/service.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
package sms
 | 
			
		||||
 | 
			
		||||
const Ali = "ALI"
 | 
			
		||||
const Bao = "BAO"
 | 
			
		||||
 | 
			
		||||
type Service interface {
 | 
			
		||||
	SendVerifyCode(mobile string, code int) error
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										39
									
								
								api/service/sms/service_manager.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								api/service/sms/service_manager.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
package sms
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"chatplus/core/types"
 | 
			
		||||
	logger2 "chatplus/logger"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type ServiceManager struct {
 | 
			
		||||
	handler Service
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var logger = logger2.GetLogger()
 | 
			
		||||
 | 
			
		||||
func NewSendServiceManager(config *types.AppConfig) (*ServiceManager, error) {
 | 
			
		||||
	active := Ali
 | 
			
		||||
	if config.OSS.Active != "" {
 | 
			
		||||
		active = strings.ToUpper(config.SMS.Active)
 | 
			
		||||
	}
 | 
			
		||||
	var handler Service
 | 
			
		||||
	switch active {
 | 
			
		||||
	case Ali:
 | 
			
		||||
		client, err := NewAliYunSmsService(config)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
		handler = client
 | 
			
		||||
		break
 | 
			
		||||
	case Bao:
 | 
			
		||||
		handler = NewSmsBaoSmsService(config)
 | 
			
		||||
		break
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return &ServiceManager{handler: handler}, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *ServiceManager) GetService() Service {
 | 
			
		||||
	return m.handler
 | 
			
		||||
}
 | 
			
		||||
@@ -1,5 +0,0 @@
 | 
			
		||||
package service
 | 
			
		||||
 | 
			
		||||
type SmsService interface {
 | 
			
		||||
	SendVerifyCode(mobile string, code int) error
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1
									
								
								api/service/wanx/types.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								api/service/wanx/types.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
package wanx
 | 
			
		||||
		Reference in New Issue
	
	Block a user