| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- package sms
- import (
- "encoding/json"
- "fmt"
- openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
- dysmsapi20170525 "github.com/alibabacloud-go/dysmsapi-20170525/v5/client"
- util "github.com/alibabacloud-go/tea-utils/v2/service"
- "github.com/alibabacloud-go/tea/tea"
- credential "github.com/aliyun/credentials-go/credentials"
- "github.com/gogf/gf/frame/g"
- "github.com/gogf/gf/os/glog"
- "strings"
- "yx-dataset-server/app/errors"
- )
- type ALiYunSendSmsArgs struct {
- TemplateCode string `json:"template_code"`
- PhoneNumbers string `json:"phone_numbers"`
- TemplateParam string `json:"template_param"`
- }
- type ALiYunSendBatchSmsArgs struct {
- TemplateCode string `json:"template_code"`
- PhoneNumbers string `json:"phone_numbers"`
- TemplateParam string `json:"template_param"`
- }
- // Description:
- //
- // 使用凭据初始化账号Client
- //
- // @return Client
- //
- // @throws Exception
- func CreateClient() (result *dysmsapi20170525.Client, err error) {
- // 工程代码建议使用更安全的无AK方式,凭据配置方式请参见:https://help.aliyun.com/document_detail/378661.html。
- //credential, err := credential.NewCredential(nil)
- //if err != nil {
- // return result, err
- //}
- //
- //config := &openapi.Config{
- // Credential: credential,
- // AccessKeyId: tea.String(g.Cfg().GetString("aliyun_sms.accessKeyId")),
- // AccessKeySecret: tea.String(g.Cfg().GetString("aliyun_sms.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
- credentialsConfig := new(credential.Config).
- // 凭证类型。
- SetType("access_key").
- // 设置为AccessKey ID值。
- SetAccessKeyId(g.Cfg().GetString("aliyun_sms.accessKeyId")).
- // 设置为AccessKey Secret值。
- SetAccessKeySecret(g.Cfg().GetString("aliyun_sms.accessKeySecret"))
- credentialClient, _err := credential.NewCredential(credentialsConfig)
- if _err != nil {
- panic(_err)
- }
- ecsConfig := &openapi.Config{}
- ecsConfig.Endpoint = tea.String("dysmsapi.aliyuncs.com")
- ecsConfig.Credential = credentialClient
- result, err = dysmsapi20170525.NewClient(ecsConfig)
- return result, err
- }
- func SendSms(args ALiYunSendSmsArgs) error {
- client, err := CreateClient()
- if err != nil {
- return err
- }
- sendSmsRequest := &dysmsapi20170525.SendSmsRequest{
- SignName: tea.String(g.Cfg().GetString("aliyun_sms.signName")),
- TemplateCode: tea.String(args.TemplateCode),
- PhoneNumbers: tea.String(args.PhoneNumbers),
- TemplateParam: tea.String(args.TemplateParam),
- }
- // 复制代码运行请自行打印 API 的返回值
- d, err := client.SendSmsWithOptions(sendSmsRequest, &util.RuntimeOptions{})
- if err != nil {
- return err
- }
- if d != nil && *d.Body.Message != "OK" {
- glog.Infof("短信发送失败:%s", *d.Body.Message)
- return errors.New400Response(fmt.Sprintf("发送失败:%s,请稍后重试", *d.Body.Message))
- }
- 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
- }
- func SendBatchSms(args ALiYunSendBatchSmsArgs) error {
- client, err := CreateClient()
- if err != nil {
- return err
- }
- sendBatchSmsRequest := &dysmsapi20170525.SendBatchSmsRequest{
- SignNameJson: tea.String(g.Cfg().GetString("aliyun_sms.signName")),
- TemplateCode: tea.String(args.TemplateCode),
- PhoneNumberJson: tea.String(args.PhoneNumbers),
- TemplateParamJson: tea.String(args.TemplateParam),
- }
- tryErr := func() (e error) {
- defer func() {
- if r := tea.Recover(recover()); r != nil {
- e = r
- }
- }()
- // 复制代码运行请自行打印 API 的返回值
- _, err = client.SendBatchSmsWithOptions(sendBatchSmsRequest, &util.RuntimeOptions{})
- if err != nil {
- return err
- }
- 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
- }
|