开通短信服务
- 使用阿里云服务的基本流程:
- 注册阿里云账户并开通短信服务
- 提交材料认证
- 申请短信签名
【xxx公司】,您的的验证码是....,【】内容就是签名。
- 申请短信模版
申请完等待通过即可,
可以在阿里云控制台通过群助手添加统一的定时任务,实现短信的发送。也可以通过api发送短信,api调用短信服务需要使用
AccessKey。
api调用短信服务
流程预览
操作步骤
-
通过AddSmsSign接口申请短信签名。
-
通过AddSmsTemplate接口申请短信模板。
-
通过QuerySmsSign、QuerySmsTemplate接口查看签名和模板的审核状态。
-
通过SendSms接口发送短信。
也可以通过SendBatchSms接口批量发送短信。
-
通过QuerySendDetails接口查看短信发送详情。
-
短信发送后,通过配置MNS消息队列消费模式和HTTP批量推送模式,可以接收短信发送状态的结果和用户回复的短信内容,帮助您掌握短信的发送成功率,为其他业务提供支持。
免费测试阿里云短信服务接口
审核通过需要一段时间,开发过程中可以先试用短信服务,如下
- 进入个人中心
- 展开工作台
- 选择云通讯的短信服务
打开后如下
每个新用户有100条短信服务。
- 选择快速学习和测试
使用自定义的签名需要申请资质,而阿里云测试不需要
绑定测试手机号
使用专用阿里云测试签名
- 点击调用api发送短信
点击后进入阿里云短信服务api门户,如下
前4个项必填,用户发送指定手机号的模版和验证码。
请求和返回参数在右侧文档中有介绍。
- 点击短信服务门户的发送调用
发送调用按钮在左下角,点击后会往测试手机号发送验证码,如下为调用成功的返回结果:
测试手机号接收的验证码如下:
- 赋值sdk的生成代码到开发项目中
生成代码如下:
// This file is auto-generated, don't edit it. Thanks.
package main
import (
"encoding/json"
"strings"
"fmt"
"os"
dysmsapi20170525 "github.com/alibabacloud-go/dysmsapi-20170525/v3/client"
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
util "github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea"
)
/**
* 使用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,
}
// Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
config.Endpoint = tea.String("dysmsapi.aliyuncs.com")
_result = &dysmsapi20170525.Client{}
_result, _err = dysmsapi20170525.NewClient(config)
return _result, _err
}
func _main (args []*string) (_err error) {
// 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378661.html
client, _err := CreateClient(tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")), tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")))
if _err != nil {
return _err
}
sendSmsRequest := &dysmsapi20170525.SendSmsRequest{
SignName: tea.String("阿里云短信测试"),
TemplateCode: tea.String("SMS_154950909"),
PhoneNumbers: tea.String("12345678910"),
TemplateParam: tea.String("{\"code\":\"1234\"}"),
}
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())
}
// 错误 message
fmt.Println(tea.StringValue(error.Message))
// 诊断地址
var data interface{}
d := json.NewDecoder(strings.NewReader(tea.StringValue(error.Data)))
d.Decode(&data)
if m, ok := data.(map[string]interface{}); ok {
recommend, _ := m["Recommend"]
fmt.Println(recommend)
}
_, _err = util.AssertAsString(error.Message)
if _err != nil {
return _err
}
}
return _err
}
func main() {
err := _main(tea.StringSlice(os.Args[1:]))
if err != nil {
panic(err)
}
}
使用上述代码需要自定义的地方有:
CreateClient方法调用时的AccessKey ID和AccessKey Secret可以是阿里云账号的,也可以是RAM的也可是STS的。PhoneNumbers手机号需要是动态的,如注册时动态获取手机号TemplateParam验证码是随机的,校验时也需要SignName签名是必须的,自定义的签名需要申请资质后注册TemplateCode短信模版,在注册签名是自定义的。Endpoint域名根据数据中心选择,选择可用的即可。
在上线的服务中需要申请资质,如果是他用即企业使用则需要营业执照等材料。