mirror of
https://github.com/bufanyun/hotgo.git
synced 2025-02-03 02:54:41 +08:00
122 lines
3.3 KiB
Go
122 lines
3.3 KiB
Go
package aliyun
|
||
|
||
import (
|
||
"context"
|
||
"fmt"
|
||
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
|
||
dysmsapi20170525 "github.com/alibabacloud-go/dysmsapi-20170525/v3/client"
|
||
util "github.com/alibabacloud-go/tea-utils/v2/service"
|
||
"github.com/alibabacloud-go/tea/tea"
|
||
"github.com/gogf/gf/v2/frame/g"
|
||
"hotgo/internal/model"
|
||
"hotgo/internal/model/input/sysin"
|
||
"hotgo/internal/service"
|
||
)
|
||
|
||
var (
|
||
Handle = aliYun{}
|
||
)
|
||
|
||
type aliYun struct{}
|
||
|
||
// SendCode 发送验证码
|
||
func (d *aliYun) SendCode(ctx context.Context, in sysin.SendCodeInp, config *model.SmsConfig) (err error) {
|
||
if config == nil {
|
||
config, err = service.SysConfig().GetSms(ctx)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
}
|
||
|
||
client, err := CreateClient(tea.String(config.AliYunAccessKeyID), tea.String(config.AliYunAccessKeySecret))
|
||
if err != nil {
|
||
return err
|
||
}
|
||
|
||
sendSmsRequest := &dysmsapi20170525.SendSmsRequest{
|
||
PhoneNumbers: tea.String(in.Mobile),
|
||
SignName: tea.String(config.AliYunSign),
|
||
TemplateCode: tea.String(in.Template),
|
||
TemplateParam: tea.String(fmt.Sprintf("{\"code\":\"%v\"}", in.Code)),
|
||
}
|
||
|
||
tryErr := func() (_e error) {
|
||
defer func() {
|
||
if r := tea.Recover(recover()); r != nil {
|
||
_e = r
|
||
}
|
||
}()
|
||
|
||
// 复制代码运行请自行打印 API 的返回值
|
||
response, err := client.SendSmsWithOptions(sendSmsRequest, &util.RuntimeOptions{})
|
||
if err != nil {
|
||
return err
|
||
}
|
||
|
||
g.Log().Debugf(ctx, "aliyun.sendCode response:%+v", response.GoString())
|
||
|
||
return nil
|
||
}()
|
||
return tryErr
|
||
}
|
||
|
||
// CreateClient 使用AK&SK初始化账号Client
|
||
func CreateClient(accessKeyId *string, accessKeySecret *string) (_result *dysmsapi20170525.Client, _err error) {
|
||
config := &openapi.Config{
|
||
// 必填,您的 AccessKey ID
|
||
AccessKeyId: accessKeyId,
|
||
// 必填,您的 AccessKey Secret
|
||
AccessKeySecret: accessKeySecret,
|
||
}
|
||
// 访问的域名
|
||
config.Endpoint = tea.String("dysmsapi.aliyuncs.com")
|
||
_result = &dysmsapi20170525.Client{}
|
||
_result, _err = dysmsapi20170525.NewClient(config)
|
||
return _result, _err
|
||
}
|
||
|
||
func TestSend(accessKeyId string, accessKeySecret string) (_err error) {
|
||
// 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378661.html
|
||
client, _err := CreateClient(tea.String(accessKeyId), tea.String(accessKeySecret))
|
||
if _err != nil {
|
||
return _err
|
||
}
|
||
|
||
sendSmsRequest := &dysmsapi20170525.SendSmsRequest{
|
||
PhoneNumbers: tea.String("15303830571"),
|
||
SignName: tea.String("布帆云"),
|
||
TemplateCode: tea.String("SMS_198921686"),
|
||
TemplateParam: tea.String("{\"code\":\"1234\"}"),
|
||
}
|
||
runtime := &util.RuntimeOptions{}
|
||
tryErr := func() (_e error) {
|
||
defer func() {
|
||
if r := tea.Recover(recover()); r != nil {
|
||
_e = r
|
||
}
|
||
}()
|
||
// 复制代码运行请自行打印 API 的返回值
|
||
_, _err = client.SendSmsWithOptions(sendSmsRequest, runtime)
|
||
if _err != nil {
|
||
return _err
|
||
}
|
||
|
||
return nil
|
||
}()
|
||
|
||
if tryErr != nil {
|
||
var err = &tea.SDKError{}
|
||
if _t, ok := tryErr.(*tea.SDKError); ok {
|
||
err = _t
|
||
} else {
|
||
err.Message = tea.String(tryErr.Error())
|
||
}
|
||
// 如有需要,请打印 error
|
||
_, _err = util.AssertAsString(err.Message)
|
||
if _err != nil {
|
||
return _err
|
||
}
|
||
}
|
||
return _err
|
||
}
|