|
@@ -0,0 +1,94 @@ |
|
|
|
|
|
package aliyun |
|
|
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
|
|
utils "code.fnuoos.com/EggPlanet/egg_system_rules.git/utils" |
|
|
|
|
|
"encoding/json" |
|
|
|
|
|
"errors" |
|
|
|
|
|
"fmt" |
|
|
|
|
|
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" |
|
|
|
|
|
dysmsapi20170525 "github.com/alibabacloud-go/dysmsapi-20170525/v4/client" |
|
|
|
|
|
util "github.com/alibabacloud-go/tea-utils/v2/service" |
|
|
|
|
|
"github.com/alibabacloud-go/tea/tea" |
|
|
|
|
|
"strings" |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
// Description: |
|
|
|
|
|
// |
|
|
|
|
|
// 使用AK&SK初始化账号Client |
|
|
|
|
|
// |
|
|
|
|
|
// @return Client |
|
|
|
|
|
// |
|
|
|
|
|
// @throws Exception |
|
|
|
|
|
func CreateClientOwn(accessKeyId, accessKeySecret string) (_result *dysmsapi20170525.Client, _err error) { |
|
|
|
|
|
// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。 |
|
|
|
|
|
// 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378661.html。 |
|
|
|
|
|
config := &openapi.Config{ |
|
|
|
|
|
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 |
|
|
|
|
|
AccessKeyId: tea.String(accessKeyId), |
|
|
|
|
|
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 |
|
|
|
|
|
AccessKeySecret: tea.String(accessKeySecret), |
|
|
|
|
|
} |
|
|
|
|
|
// Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi |
|
|
|
|
|
config.Endpoint = tea.String("dysmsapi.aliyuncs.com") |
|
|
|
|
|
_result = &dysmsapi20170525.Client{} |
|
|
|
|
|
_result, _err = dysmsapi20170525.NewClient(config) |
|
|
|
|
|
return _result, _err |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func AliyunSendSmsOwn(accessKeyId, accessKeySecret, phone, signName, templateCode, templateParam string) error { |
|
|
|
|
|
client, _err := CreateClientOwn(accessKeyId, accessKeySecret) |
|
|
|
|
|
if _err != nil { |
|
|
|
|
|
return _err |
|
|
|
|
|
} |
|
|
|
|
|
sendSmsRequest := &dysmsapi20170525.SendSmsRequest{ |
|
|
|
|
|
PhoneNumbers: tea.String(phone), |
|
|
|
|
|
SignName: tea.String(signName), |
|
|
|
|
|
TemplateCode: tea.String(templateCode), |
|
|
|
|
|
TemplateParam: tea.String(templateParam), |
|
|
|
|
|
} |
|
|
|
|
|
runtime := &util.RuntimeOptions{} |
|
|
|
|
|
tryErr := func() (_e error) { |
|
|
|
|
|
defer func() { |
|
|
|
|
|
if r := tea.Recover(recover()); r != nil { |
|
|
|
|
|
_e = r |
|
|
|
|
|
} |
|
|
|
|
|
}() |
|
|
|
|
|
// 复制代码运行请自行打印 API 的返回值 |
|
|
|
|
|
body, _err := client.SendSmsWithOptions(sendSmsRequest, runtime) |
|
|
|
|
|
if _err != nil { |
|
|
|
|
|
return _err |
|
|
|
|
|
} |
|
|
|
|
|
if body != nil && body.Body != nil && body.Body.Code != nil && *body.Body.Code != "OK" { |
|
|
|
|
|
if body.Body.Message != nil { |
|
|
|
|
|
fmt.Println("阿里短信:" + utils.SerializeStr(body)) |
|
|
|
|
|
} |
|
|
|
|
|
return errors.New("发送失败") |
|
|
|
|
|
} |
|
|
|
|
|
return nil |
|
|
|
|
|
}() |
|
|
|
|
|
|
|
|
|
|
|
if tryErr != nil { |
|
|
|
|
|
var error = &tea.SDKError{} |
|
|
|
|
|
if _t, ok := tryErr.(*tea.SDKError); ok { |
|
|
|
|
|
error = _t |
|
|
|
|
|
} else { |
|
|
|
|
|
error.Message = tea.String(tryErr.Error()) |
|
|
|
|
|
} |
|
|
|
|
|
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 |
|
|
|
|
|
// 错误 message |
|
|
|
|
|
fmt.Println(tea.StringValue(error.Message)) |
|
|
|
|
|
// 诊断地址 |
|
|
|
|
|
var data interface{} |
|
|
|
|
|
d := json.NewDecoder(strings.NewReader(tea.StringValue(error.Data))) |
|
|
|
|
|
d.Decode(&data) |
|
|
|
|
|
if m, ok := data.(map[string]interface{}); ok { |
|
|
|
|
|
recommend, _ := m["Recommend"] |
|
|
|
|
|
fmt.Println(recommend) |
|
|
|
|
|
} |
|
|
|
|
|
_, _err = util.AssertAsString(error.Message) |
|
|
|
|
|
if _err != nil { |
|
|
|
|
|
return _err |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
return _err |
|
|
|
|
|
} |