package service import ( "encoding/json" "errors" "fmt" openapi "github.com/alibabacloud-go/darabonba-openapi/client" dysmsapi20170525 "github.com/alibabacloud-go/dysmsapi-20170525/v2/client" util "github.com/alibabacloud-go/tea-utils/service" "github.com/alibabacloud-go/tea/tea" credential "github.com/aliyun/credentials-go/credentials" "github.com/gogf/gf/v2/encoding/gjson" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/gctx" "log" "strings" ) type IAliYunSms interface { ConfigInit() CreateClient() (_result *dysmsapi20170525.Client, _err error) Main(args []string) (_err error) } type aliYunSmsServiceTmpl struct { } var aliYunSmsService = aliYunSmsServiceTmpl{} func AliYunSms() IAliYunSms { return &aliYunSmsService } type AliyunSms struct { AccessKeyId string AccessSecret string RegionId string CodeSignName string TemplateCode string } var ( smsConfig AliyunSms ) func init() { aliYunSmsService.ConfigInit() } func (a *aliYunSmsServiceTmpl) ConfigInit() { //加载游戏相关配置 ctx := gctx.New() smsConfig.AccessKeyId = g.Cfg().MustGet(ctx, "game.sms.accessKeyId").String() smsConfig.AccessSecret = g.Cfg().MustGet(ctx, "game.sms.accessSecret").String() smsConfig.RegionId = g.Cfg().MustGet(ctx, "game.sms.regionId").String() smsConfig.CodeSignName = g.Cfg().MustGet(ctx, "game.sms.codeSignName").String() smsConfig.TemplateCode = g.Cfg().MustGet(ctx, "game.sms.templateCode").String() log.Println("aliyunsms init: ", smsConfig) } /* Description: * 使用凭据初始化账号Client * @return Client * @throws Exception */ func (a *aliYunSmsServiceTmpl) CreateClient() (_result *dysmsapi20170525.Client, _err error) { // 工程代码建议使用更安全的无AK方式,凭据配置方式请参见:https://help.aliyun.com/document_detail/378661.html。 newCredential, _err := credential.NewCredential(nil) if _err != nil { return _result, _err } config := &openapi.Config{ Credential: newCredential, // 您的AccessKey ID AccessKeyId: tea.String(smsConfig.AccessKeyId), // 您的AccessKey Secret AccessKeySecret: tea.String(smsConfig.AccessSecret), RegionId: tea.String(smsConfig.RegionId), } // 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 } /* Description: * 使用凭据初始化账号Client * @return Client * @throws Exception */ func (a *aliYunSmsServiceTmpl) Main(args []string) (_err error) { client, _err := a.CreateClient() if _err != nil { return _err } sendSmsRequest := &dysmsapi20170525.SendSmsRequest{ PhoneNumbers: tea.String(args[0]), SignName: tea.String(smsConfig.CodeSignName), TemplateCode: tea.String(smsConfig.TemplateCode), TemplateParam: tea.String(gjson.MustEncodeString(map[string]string{"code": args[1]})), } sendSmsRes := &dysmsapi20170525.SendSmsResponse{} tryErr := func() (_e error) { defer func() { if r := tea.Recover(recover()); r != nil { _e = r } }() // 复制代码运行请自行打印 API 的返回值 sendSmsRes, _err = client.SendSmsWithOptions(sendSmsRequest, &util.RuntimeOptions{}) log.Print("sendSmsRes: ", gjson.MustEncodeString(sendSmsRes)) 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 error.Message != nil { return errors.New(*error.Message) } } else { fmt.Println("sendSmsRes: Body ", sendSmsRes.Body.GoString()) body := sendSmsRes.Body.GoString() jsonBody := map[string]interface{}{} _err = json.Unmarshal([]byte(body), &jsonBody) if _err != nil { return _err } return errors.New(fmt.Sprint(jsonBody["Message"])) } return _err } //func main() { // err := _main(tea.StringSlice(os.Args[1:])) // if err != nil { // panic(err) // } //}