阿里云短信服务使用

4 篇文章 0 订阅

说明

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

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

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

一、准备阶段

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EsowqQMp-1657790621605)(../my_images/image-20220714150110717.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vI0zrx5r-1657790621606)(../my_images/image-20220714150549343.png)]

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

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

准备测试:

https://dysms.console.aliyun.com/quickstart
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UEj8lLXW-1657790621607)(../my_images/image-20220714151315605.png)]

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

操作步骤:
  1. 我在我的阿里云主账号去申请一个accessKey

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

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

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

二、真正的测试开始

嗯,到了这一步,咱们买了短信包:购买地址,欸,这就代表咱有余额了嘿嘿。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4NqlvqSp-1657790621607)(../my_images/image-20220714153504079.png)]

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

四个东西

  1. accessKey,分为accessKeyID和accessKeySecret
  2. 短信签名
  3. 短信模板
  4. 以上四个

先来个分离测试

1、验证码测试操作步骤:

和上边代码一样

  1. 填入accessKey

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

  3. 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)
    	}
    }
    
    
  4. 然后,嗯,运行它,你会发现欸,成了

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QHWzhl0g-1657790621608)(../my_images/image-20220714172145752.png)]

2、实际需求短信测试。

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

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

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

思路-业务逻辑

  1. 先在utils工具类包下新建一个short_message.go(或者AliSms.go)

  2. 引入阿里云代码

    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(为了在别的包可见)

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

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

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

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bJCsq3HL-1657790621609)(../my_images/image-20220714172118473.png)]

这个使用比较多的是什么快递通知,以及注册验证码啥的。但是别的也可以用上,例如咱这个。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不之道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值