You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
1.8 KiB

package message
import (
"encoding/json"
"errors"
"fmt"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
"math/rand"
"recook/internal/cache"
"time"
)
var MessageLogin = &messageLogin{}
var client *sdk.Client
type messageLogin struct {
}
const (
regionId = "cn-hangzhou"
SUCCESS = "SMS_243631426"
FAIL = "SMS_243616481"
)
type AliResp struct {
Message string
RequestId string
BizId string
Code string
}
// SendMessage @Title 短信发送
func (m *messageLogin) SendMessage(mobile, loginTemplateCode string) error {
randString := fmt.Sprintf("%04v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000))
request := returnRequest(mobile, randString, loginTemplateCode)
response, err := client.ProcessCommonRequest(request)
if err != nil {
return errors.New(err.Error())
}
if response.IsSuccess() {
cache.SetVerifyMobileSMSCode(mobile, randString)
var p AliResp
if err := json.Unmarshal(response.GetHttpContentBytes(), &p); err != nil {
return errors.New(err.Error())
}
if p.Message != "OK" {
return errors.New("短信发送失败: " + p.Message)
}
return nil
} else {
return errors.New("短信发送失败")
}
}
func returnRequest(mobile string, code string, templateCode string) *requests.CommonRequest {
request := requests.NewCommonRequest()
request.Method = "POST"
request.Scheme = "https"
request.Domain = "dysmsapi.aliyuncs.com"
request.Version = "2017-05-25"
request.ApiName = "SendSms"
request.QueryParams["RegionId"] = regionId
request.QueryParams["SignName"] = "瑞库客"
request.QueryParams["TemplateCode"] = templateCode
request.QueryParams["TemplateParam"] = fmt.Sprintf("{\"code\":\"%v\"}", code)
request.QueryParams["PhoneNumbers"] = mobile
return request
}