阿里云短信服务使用

2 篇文章 0 订阅

这是用go语言实现的,但说实话,其实没啥影响,不管什么语言都是这个套路,所以无论你是学什么语言或者是用什么语言的都好,看看总不亏。

22年7.14下午14:38,我完成了第一版项目使用的阿里云短信包功能需求

但是呢!因为项目负责人和需求方对接问题,具体的短信模板并没有对接好,某种程度上可以说是只是我自己运行成功,发送短信成功,而暂时没有实际投入项目中(鬼知道一星期能不能对接好),所以这篇文档就是我的总结文档,会放在平台给大家作为借鉴学习。
一、准备阶段

准备阶段纯属废话,可以直接跳过

看了下时间,实际开始做,还不是真的做,只是要我先跑通测试的api。时间是7.12中午,其实是下午,毕竟中午要去吃饭睡觉了。

然后是7.12晚上,开日会,豪哥说把accessKey放在服务器相关的那个文档里边了。所以从这一刻开始我可以真正的测试了。为什么说是真正的测试呢?

因为12日中午到晚上这段时间,我需要跑通阿里云测试短信,这个签名,其实就只能是验证码

准备测试:

https://dysms.console.aliyun.com/quickstart


能做的就如图所示,太少了。

操作步骤:

我在我的阿里云主账号去申请一个accessKey

把阿里云给的短信代码下载或者复制粘贴后导入个包和依赖

ok,改代码为如下:(任何代码还是每一行都要看,看不懂可以过)

package main

import (
    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"
    "os"
)

/**
 * 使用AK&SK初始化账号Client
 * @param accessKeyId
 * @param accessKeySecret
 * @return Client
 * @throws Exception
 */
func CreateClient(accessKeyId *string, accessKeySecret *string) (_result *dysmsapi20170525.Client, _err error) {
    // 我多加的
    // 因为accessKeyId *string,传的是地址,所以有了如下四行
    aki := "申请的accessKeyID"
    aks := "申请的accessKeySecret"
    accessKeyId = &aki
    accessKeySecret = &aks
    // 我多加的
    config := &openapi.Config{
        // 您的 AccessKey ID
        AccessKeyId: accessKeyId,
        // 您的 AccessKey Secret
        AccessKeySecret: accessKeySecret,
    }
    // 访问的域名dysmsapi.aliyuncs.com
    config.Endpoint = tea.String("dysmsapi.aliyuncs.com")
    _result = &dysmsapi20170525.Client{}
    _result, _err = dysmsapi20170525.NewClient(config)
    return _result, _err
}

func _main(args []*string) (_err error) {
    client, _err := CreateClient(tea.String("accessKeyId"), tea.String("accessKeySecret"))
    if _err != nil {
        return _err
    }
    // 准备测试阶段,格式基本就是下边的,除了电话号码改改,code六位可以改改,别的动不了
    sendSmsRequest := &dysmsapi20170525.SendSmsRequest{
        SignName:      tea.String("阿里云短信测试"),
        TemplateCode:  tea.String("SMS_154950909"),
        PhoneNumbers:  tea.String("电话号码,拿自己的测试"),
        TemplateParam: tea.String("{\"code\":\"3456\"}"),
    }

    runtime := &util.RuntimeOptions{}
    tryErr := func() (_e error) {
        defer func() {
            if r := tea.Recover(recover()); r != nil {
                _e = r
            }
        }()
        // 复制代码运行请自行打印 API 的返回值
        _, _err = client.SendSmsWithOptions(sendSmsRequest, runtime)
        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())
        }
        // 如有需要,请打印 error
        util.AssertAsString(error.Message)
    }
    return _err
}

func main() {
    err := _main(tea.StringSlice(os.Args[1:]))
    if err != nil {
        panic(err)
    }
}


然后,嗯,运行它,然后你会发现失败(没有发送到你手机上)。然后就去线上:OpeanAPI调用,发现是因为余额为0,(那是当然的,因为咱们压根没买短信包,怎么可能有余额)

总结,测个der,还是得先买。

二、真正的测试开始

嗯,到了这一步,咱们买了短信包:购买地址,欸,这就代表咱有余额了嘿嘿。


并且拿到了四个东西。就可以真正的测试了

四个东西

accessKey,分为accessKeyID和accessKeySecret
短信签名
短信模板
以上四个
先来个分离测试
1、验证码测试操作步骤:

和上边代码一样

填入accessKey

填入短信签名和短信模板,

ok,改代码为如下:(任何代码还是每一行都要看,看不懂可以过)

package main

import (
    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"
    "os"
)

/**
 * 使用AK&SK初始化账号Client
 * @param accessKeyId
 * @param accessKeySecret
 * @return Client
 * @throws Exception
 */
func CreateClient(accessKeyId *string, accessKeySecret *string) (_result *dysmsapi20170525.Client, _err error) {
    // 我多加的
    // 因为accessKeyId *string,穿的是地址,所以有了如下四步
    aki := "申请的accessKeyID"
    aks := "申请的accessKeySecret"
    accessKeyId = &aki
    accessKeySecret = &aks
    // 我多加的
    config := &openapi.Config{
        // 您的 AccessKey ID
        AccessKeyId: accessKeyId,
        // 您的 AccessKey Secret
        AccessKeySecret: accessKeySecret,
    }
    // 访问的域名dysmsapi.aliyuncs.com
    config.Endpoint = tea.String("dysmsapi.aliyuncs.com")
    _result = &dysmsapi20170525.Client{}
    _result, _err = dysmsapi20170525.NewClient(config)
    return _result, _err
}

func _main(args []*string) (_err error) {
    client, _err := CreateClient(tea.String("accessKeyId"), tea.String("accessKeySecret"))
    if _err != nil {
        return _err
    }
    // 准备测试阶段,格式基本就是下边的,除了电话号码改改,code六位可以改改,别的动不了
    sendSmsRequest := &dysmsapi20170525.SendSmsRequest{
        SignName:      tea.String("阿里云短信测试"),
        TemplateCode:  tea.String("SMS_154950909"),
        PhoneNumbers:  tea.String("电话号码,拿自己的测试"),
        TemplateParam: tea.String("{\"code\":\"98765\"}"),
    }

    runtime := &util.RuntimeOptions{}
    tryErr := func() (_e error) {
        defer func() {
            if r := tea.Recover(recover()); r != nil {
                _e = r
            }
        }()
        // 复制代码运行请自行打印 API 的返回值
        _, _err = client.SendSmsWithOptions(sendSmsRequest, runtime)
        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())
        }
        // 如有需要,请打印 error
        util.AssertAsString(error.Message)
    }
    return _err
}

func main() {
    err := _main(tea.StringSlice(os.Args[1:]))
    if err != nil {
        panic(err)
    }
}


然后,嗯,运行它,你会发现欸,成了

2、实际需求短信测试。

到了这一步说明我们就要真的往项目实际需求走了。
还不能大意,因为这是短信需求最重要,也是最重要的一步(虽然整体难度不大)

那么先说需求背景-我们的这个项目就是给场所负责人发送提醒短信(如果有红码或者黄码或者未按时做核酸人员的话)

因为这是政府项目不便于向大家展示代码,我就尽可能把逻辑思路,注意点说清楚。

思路-业务逻辑
先在utils工具类包下新建一个short_message.go(或者AliSms.go)

引入阿里云代码

import (
    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"
    "os"
)
func CreateClient(accessKeyId *string, accessKeySecret *string) (_result *dysmsapi20170525.Client, _err error) {
    // 我多加的
    // 因为accessKeyId *string,穿的是地址,所以有了如下四步
    aki := "申请的accessKeyID"
    aks := "申请的accessKeySecret"
    accessKeyId = &aki
    accessKeySecret = &aks
    // 我多加的
    config := &openapi.Config{
        // 您的 AccessKey ID
        AccessKeyId: accessKeyId,
        // 您的 AccessKey Secret
        AccessKeySecret: accessKeySecret,
    }
    // 访问的域名dysmsapi.aliyuncs.com
    config.Endpoint = tea.String("dysmsapi.aliyuncs.com")
    _result = &dysmsapi20170525.Client{}
    _result, _err = dysmsapi20170525.NewClient(config)
    return _result, _err
}

func _main(args []*string) (_err error) {
    client, _err := CreateClient(tea.String("accessKeyId"), tea.String("accessKeySecret"))
    if _err != nil {
        return _err
    }
    // 
    phone := 拿到电话号码变量
    m := make(map[string]interface{})
    m["参数1"] = 参数1
    m["参数2"] = 参数2
    m["参数3"] = 参数3
    mjson, _ := json.Marshal(m)
    mString := string(mjson) // 把map型切片改为string
    sendSmsRequest := &dysmsapi20170525.SendSmsRequest{
        SignName:      tea.String("阿里云短信测试"),
        TemplateCode:  tea.String("SMS_154950909"),
        PhoneNumbers:  tea.String(phone),
        TemplateParam: tea.String(mstring),
    }

    runtime := &util.RuntimeOptions{}
    tryErr := func() (_e error) {
        defer func() {
            if r := tea.Recover(recover()); r != nil {
                _e = r
            }
        }()
        // 复制代码运行请自行打印 API 的返回值
        _, _err = client.SendSmsWithOptions(sendSmsRequest, runtime)
        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())
        }
        // 如有需要,请打印 error
        util.AssertAsString(error.Message)
    }
    return _err
}

_mian改一个首字母大写的名字。例如AliSms(为了在别的包可见)

填入需要的签名和模板,以及这里实际需求的变量,例如电话号码变量。多个模板参数变量

注意这个mstring怎么来的,其他就好说

根据实际需求嵌入到查的函数代码里

在定时任务中调用这个查的函数代码就可以了

(如果写的比较模糊,见谅见谅,有什么问题可以私信。)

这个使用比较多的是什么快递通知,以及注册验证码啥的。但是别的也可以用上,例如咱这个。
————————————————
版权声明:本文为CSDN博主「景行三千」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/EGXXM/article/details/125789100

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值