package main import ( "encoding/json" "errors" "fmt" alibabacloudopenapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" alibabaclouddysmsapi "github.com/alibabacloud-go/dysmsapi-20170525/v3/client" alibabacloudteautils "github.com/alibabacloud-go/tea-utils/v2/service" alibabacloudtea "github.com/alibabacloud-go/tea/tea" ) // SendSms 发送短信 // @param phoneNumber string 接收短信手机号码 // @param templateCode string 短信内容模板CODE // @param templateParam map[string]any 短信内容模板参数 // @return error 错误信息,若发送成功则为nil func SendSms(phoneNumber string, templateCode string, templateParam map[string]any) error { // 重要提醒:以下变量应该写入配置文件或数据库以方便随时修改,这里主要目的是演示发送短信故直接写死。 accessKeyID := "****************" // AccessKey ID accessKeySecret := "******************************" // AccessKey Secret endpoint := "dysmsapi.aliyuncs.com" // 服务接入点(公网接入地址) signName := "码农人生" // 签名名称 // 初始化config config := &alibabacloudopenapi.Config{ AccessKeyId: alibabacloudtea.String(accessKeyID), AccessKeySecret: alibabacloudtea.String(accessKeySecret), Endpoint: alibabacloudtea.String(endpoint), } // 创建客户端 client, err := alibabaclouddysmsapi.NewClient(config) if err != nil { fmt.Println("发送短信失败", err) return err } sendSmsRequest := &alibabaclouddysmsapi.SendSmsRequest{} runtimeOptions := &alibabacloudteautils.RuntimeOptions{} sendSmsRequest.SetSignName(signName) sendSmsRequest.SetPhoneNumbers(phoneNumber) sendSmsRequest.SetTemplateCode(templateCode) // 处理短信内容模板参数 jsonByte, _ := json.Marshal(templateParam) sendSmsRequest.SetTemplateParam(string(jsonByte)) // 调用接口 // 说明:调用接口成功不代表发送短信成功,调用接口失败通常是AccessKeyId、AccessKeySecret、Endpoint错误导致。 sendSmsResponse, err := client.SendSmsWithOptions(sendSmsRequest, runtimeOptions) if err != nil { fmt.Println("发送短信失败", err) return err } // 调用接口成功,解析接口返回参数检查短信是否发送成功 response := make(map[string]any) err = json.Unmarshal([]byte(sendSmsResponse.String()), &response) if err != nil { fmt.Println("发送短信失败", errors.New("接口无响应")) return errors.New("接口无响应") } // 获取接口返回参数的body部分 responseBody, exist := response["body"] if !exist { fmt.Println("发送短信失败", errors.New("接口返回参数异常")) return errors.New("接口返回参数异常") } // 检查API错误码,错误码为OK表示发送成功 body, _ := responseBody.(map[string]any) if body["Code"] != "OK" { fmt.Println("发送短信失败", errors.New(body["Message"].(string))) return errors.New(body["Message"].(string)) } return nil } func main() { phoneNumber := "18888888888" // 接收短信手机号码 templateCode := "SMS_000000000" // 短信内容模板CODE // 短信内容模板参数 templateParam := make(map[string]any) templateParam["code"] = "123456" // 验证码 err := SendSms(phoneNumber, templateCode, templateParam) if err != nil { fmt.Println("发送短信失败") } else { fmt.Println("发送短信成功") } }
Copyright © 2024 码农人生. All Rights Reserved