使用阿里云短信服务官方库

我这里使用了官方的库

driver_aliyun.go 文件,其中结果日志我是写到mysql表里了

package sms

import (
    "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"
    jsoniter "github.com/json-iterator/go"
    "github.com/sreio/gohub/app/modles/sms"
    "github.com/sreio/gohub/pkg/logger"
)

var json = jsoniter.ConfigCompatibleWithStandardLibrary

type Aliyun struct {
}

// Send 实现Driver中的Send方法
func (a *Aliyun) Send(phone string, message Message, config map[string]string) bool {
    client, err := CreateClient(tea.String(config["access_key_id"]), tea.String(config["access_key_secret"]))
    if err != nil {
        logger.ErrorString("短信[阿里云]", "解析绑定错误", err.Error())
        return false
    }
    logger.DebugJSON("短信[阿里云]", "配置信息", config)

    param, err := json.Marshal(message.Data)
    if err != nil {
        logger.ErrorString("短信[阿里云]", "短信模板参数解析错误", err.Error())
        return false
    }

    // 发送参数
    sendSmsRequest := &dysmsapi20170525.SendSmsRequest{
        SignName:      tea.String(config["sign_name"]),
        TemplateCode:  tea.String(message.Template),
        PhoneNumbers:  tea.String(phone),
        TemplateParam: tea.String(string(param)),
    }

    // 其他运行参数
    runtime := &util.RuntimeOptions{}

    _result, err := client.SendSmsWithOptions(sendSmsRequest, runtime)
    if err != nil {
        var errs = &tea.SDKError{}
        if _t, ok := err.(*tea.SDKError); ok {
            errs = _t
        } else {
            errs.Message = tea.String(err.Error())
        }

        var r dysmsapi20170525.SendSmsResponseBody
        err = json.Unmarshal([]byte(*errs.Data), &r)
        logger.LogIf(err)

        smsModel := sms.Sms{
            Phone:         phone,
            SignName:      config["sign_name"],
            TemplateCode:  message.Template,
            TemplateParam: string(param),
            RequestId:     tea.StringValue(r.RequestId),
            BizId:         "",
            Code:          tea.StringValue(r.Code),
            Message:       tea.StringValue(r.Message),
        }
        smsModel.SaveSmsLog()
        return false
    }

    smsModel := sms.Sms{
        Phone:         phone,
        SignName:      config["sign_name"],
        TemplateCode:  message.Template,
        TemplateParam: string(param),
        RequestId:     tea.StringValue(_result.Body.RequestId),
        BizId:         tea.StringValue(_result.Body.BizId),
        Code:          tea.StringValue(_result.Body.Code),
        Message:       tea.StringValue(_result.Body.Message),
    }
    smsModel.SaveSmsLog()
    return true
}

// CreateClient
/**
 * 使用AK&SK初始化账号Client
 * @param accessKeyId
 * @param accessKeySecret
 * @return Client
 * @throws Exception
 */
func CreateClient(accessKeyId *string, accessKeySecret *string) (_result *dysmsapi20170525.Client, _err error) {
    config := &openapi.Config{
        // 您的 AccessKey ID
        AccessKeyId: accessKeyId,
        // 您的 AccessKey Secret
        AccessKeySecret: accessKeySecret,
    }
    // 访问的域名
    config.Endpoint = tea.String("dysmsapi.aliyuncs.com")
    _result = &dysmsapi20170525.Client{}
    _result, _err = dysmsapi20170525.NewClient(config)
    return _result, _err
}

sms Model

package sms

import "github.com/sreio/gohub/app/modles"

type Sms struct {
    modles.BaseModel
    Phone         string `json:"phone"  gorm:"type:char(11);comment:发送手机号;default:'';index:'idx_phone_code';"`
    SignName      string `json:"sign_name" gorm:"type:varchar(255);comment:短信签名名称;default:'';"`
    TemplateCode  string `json:"template_code" gorm:"type:varchar(100);comment:短信模板Code;default:'';index:'idx_phone_code';"`
    TemplateParam string `json:"template_param" gorm:"type:text;comment:短信模板变量对应的参数(json);default:'';"`
    RequestId     string `json:"request_id"  gorm:"type:varchar(100);comment:请求ID;default:'';uniqueIndex;"`
    BizId         string `json:"biz_id"  gorm:"type:varchar(100);comment:发送回执ID;default:'';"`
    Code          string `json:"code" gorm:"type:varchar(100);comment:请求状态码;default:'';"`
    Message       string `json:"message" gorm:"type:varchar(100);comment:状态码的描述;default:'';"`
    modles.CommonTimestampsField
}

sms_util.go

package sms

import (
    "github.com/sreio/gohub/pkg/database"
)

func (sms *Sms) SaveSmsLog() {
    database.DB.Create(&sms)
}
sreio
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!