commit d0a2107a8c164e55877d3b62a4ea5acf298958ad Author: kanade <3136520963@qq.com> Date: Tue Apr 27 14:46:29 2021 +0800 init diff --git a/README.md b/README.md new file mode 100644 index 0000000..80be0ac --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# 云通信sdk工具 \ No newline at end of file diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..3f33974 --- /dev/null +++ b/go.mod @@ -0,0 +1,5 @@ +module git.oa00.com/go/ytx + +go 1.16 + +require golang.org/x/text v0.3.6 diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..3c12b4f --- /dev/null +++ b/go.sum @@ -0,0 +1,3 @@ +golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/request.go b/request.go new file mode 100644 index 0000000..58eb2f7 --- /dev/null +++ b/request.go @@ -0,0 +1,37 @@ +package ytx + +import ( + "io" + "net/http" + "strings" +) + +const ( + post = "POST" + get = "GET" +) + +var client = &http.Client{} + +// @Title 请求 +func request(method, url, data string, headers ...map[string]string) ([]byte, error) { + reqest, err := http.NewRequest(method, url, strings.NewReader(data)) + if err != nil { + return nil, err + } + if len(headers) > 0 { + for key, value := range headers[0] { + reqest.Header.Add(key, value) + } + } + response, err := client.Do(reqest) + if err != nil { + return nil, err + } + defer response.Body.Close() + result, err := io.ReadAll(response.Body) + if err != nil { + return nil, err + } + return result, nil +} diff --git a/sms.go b/sms.go new file mode 100644 index 0000000..f27c9e9 --- /dev/null +++ b/sms.go @@ -0,0 +1,69 @@ +package ytx + +import ( + "errors" + "fmt" + "golang.org/x/text/encoding/simplifiedchinese" + "golang.org/x/text/transform" + "net/url" + "time" +) + +const ( + YtxSmsTypeCaptcha = "1" // 验证码 + YtxSmsTypeMessage = "2" // 通知 +) + +var Sms = &sms{} + +type sms struct { + url string + spCode string + loginName string + password string +} + +// InitSms @Title 初始化 +func InitSms(url ,spCode, loginName, password string) *sms { + Sms.url = url + Sms.spCode = Sms.encode(spCode) + Sms.loginName = Sms.encode(loginName) + Sms.password = Sms.encode(password) + return Sms +} + +// Send @Title 发送短信 +func (s *sms) Send(phone, content, msgType string) error { + now := time.Now() + data := url.Values{ + "SpCode": {s.spCode}, + "LoginName": {s.loginName}, + "Password": {s.password}, + "MessageContent": {s.encode(content)}, + "MessageType": {msgType}, + "UserNumber": {phone}, + "SerialNumber": {fmt.Sprintf("%s%.6d", now.Format("20060102150405"), now.UnixNano()/1e3-now.Unix()*1e6)}, + "ScheduleTime": {now.Format("20060102150405")}, + "ExtendAccessNum": {}, + "f": {}, + "AutographId": {}, + } + bytes, err := request(get, fmt.Sprintf("%s?%s", s.url, data.Encode()), "") + if err != nil { + return err + } + query, err := url.ParseQuery(string(bytes)) + if err != nil { + return err + } + if query.Get("result") == "0" { + return nil + } + return errors.New(query.Get("description")) +} + +// @Title 编码转换 +func (s *sms) encode(source string) string { + result, _, _ := transform.String(simplifiedchinese.GBK.NewEncoder(), source) + return result +}