golang使用阿里短信服务

一、话不多说,先上精华

package tools

import (
    "errors"
    "github.com/aliyun/alibaba-cloud-sdk-go/sdk"
    "github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
    "github.com/go-kratos/kratos/pkg/log"
)

// todo: 替换为公司账号
const (
    SignName          = "--------------------------"
    REGION_ID         = "cn-shenzhen"
    ACCESS_KEY_ID     = "------------------------------------"
    ACCESS_KEY_SECRET = "------------------------------"
)

func SendSms(phone string, code string) (err error) {

    client, err := sdk.NewClientWithAccessKey(REGION_ID, ACCESS_KEY_ID, ACCESS_KEY_SECRET)
    if err != nil {
        log.Error("ali ecs client failed, err:%s", err.Error())
        return
    }

    request := requests.NewCommonRequest()                           // 构造一个公共请求
    request.Method = "POST"                                          // 设置请求方式
    request.Product = "Ecs"                                          // 指定产品
    request.Scheme = "https"                                         // https | http
    request.Domain = "dysmsapi.aliyuncs.com"                         // 指定域名则不会寻址,如认证方式为 Bearer Token 的服务则需要指定
    request.Version = "2017-05-25"                                   // 指定产品版本
    request.ApiName = "SendSms"                                      // 指定接口名
    request.QueryParams["RegionId"] = "cn-hangzhou"                  // 地区
    request.QueryParams["PhoneNumbers"] = phone                      //手机号
    request.QueryParams["SignName"] = SignName                       //阿里云验证过的项目名 自己设置
    request.QueryParams["TemplateCode"] = "SMS_175543553"            //阿里云的短信模板号 自己设置
    request.QueryParams["TemplateParam"] = "{\"code\":" + code + "}" //短信模板中的验证码内容 自己生成

    response, err := client.ProcessCommonRequest(request)
    if err != nil {
        log.Error("ali ecs client failed, err:%s", err.Error())
        return
    }
    log.Info(response.String())
var message Message //阿里云返回的json信息对应的类
//记得判断错误信息
_ := json.Unmarshal(response.GetHttpContentBytes(), &message)
if message.Message != "OK" {
    错误处理
    return
}
    return nil
}
//json数据解析
type Message struct {
    Message   string
    RequestId string
    BizId     string
    Code      string
}

二、参数解析

名称 类型 是否必选 示例值 描述
PhoneNumbers String 15900000000 接收短信的手机号码。
SignName String 阿里云 短信签名名称。请在控制台签名管理页面签名名称一列查看。
AccessKeyId String LTAIP00vvvvvvvvv 主账号AccessKey的ID。
Action String SendSms 系统规定参数。取值:SendSms。
OutId String abcdefgh 外部流水扩展字段。
SmsUpExtendCode String 90999 上行短信扩展码,无特殊需要此字段的用户请忽略此字段。
TemplateParam String {"code":"1111"} 短信模板变量对应的实际值,JSON格式。

手机号码格式:
国内短信:11位手机号码,例如15951955195。
国际/港澳台消息:国际区号+号码,例如85200000000。
支持对多个手机号码发送短信,手机号码之间以英文逗号(,)分隔。上限为1000个手机号码。批量调用相对于单条调用及时性稍有延迟。
说明 验证码类型短信,建议使用单独发送的方式。

短信签名名称说明 必须是已添加、并通过审核的短信签名。
TemplateCode String 是 SMS_153055065
短信模板ID。请在控制台模板管理页面模板CODE一列查看。

说明 必须是已添加、并通过审核的短信签名;且发送国际/港澳台消息时,请使用国际/港澳台短信模版。

|短信模板变量对应的实际值说明 如果JSON中需要带换行符,请参照标准的JSON协议处理。

三、获取参数

1. SignName

获取SignName

2. REGION_ID

地域和可用区

image.png

3. ACCESS_KEY_ID

  1. 登录阿里云管理控制台。
  2. 查看accessKey

    3.
    获取ACCESS_KEY_ID&&ACCESS_KEY_SECRET

你可能感兴趣的:(golang使用阿里短信服务)