阿里云短信服务

349 阅读4分钟

开通短信服务

  1. 使用阿里云服务的基本流程:

image.png

  1. 注册阿里云账户并开通短信服务

image.png

  1. 提交材料认证

image.png

  1. 申请短信签名

image.png

【xxx公司】,您的的验证码是....,【】内容就是签名。

  1. 申请短信模版

image.png

申请完等待通过即可,

可以在阿里云控制台通过群助手添加统一的定时任务,实现短信的发送。也可以通过api发送短信,api调用短信服务需要使用AccessKey

api调用短信服务

流程预览

image.png

操作步骤

  1. 通过AddSmsSign接口申请短信签名。

  2. 通过AddSmsTemplate接口申请短信模板。

  3. 通过QuerySmsSignQuerySmsTemplate接口查看签名和模板的审核状态。

  4. 通过SendSms接口发送短信。

    也可以通过SendBatchSms接口批量发送短信。

  5. 通过QuerySendDetails接口查看短信发送详情。

  6. 配置回执消息

    短信发送后,通过配置MNS消息队列消费模式和HTTP批量推送模式,可以接收短信发送状态的结果和用户回复的短信内容,帮助您掌握短信的发送成功率,为其他业务提供支持。

openapi调试入口

image.png

免费测试阿里云短信服务接口

审核通过需要一段时间,开发过程中可以先试用短信服务,如下

  1. 进入个人中心

image.png

  1. 展开工作台

image.png

  1. 选择云通讯的短信服务

image.png

打开后如下

image.png

每个新用户有100条短信服务。

  1. 选择快速学习和测试

使用自定义的签名需要申请资质,而阿里云测试不需要

image.png

绑定测试手机号

image.png

使用专用阿里云测试签名

image.png

  1. 点击调用api发送短信

点击后进入阿里云短信服务api门户,如下

image.png

前4个项必填,用户发送指定手机号的模版和验证码。

请求和返回参数在右侧文档中有介绍。

  1. 点击短信服务门户的发送调用

发送调用按钮在左下角,点击后会往测试手机号发送验证码,如下为调用成功的返回结果:

image.png

测试手机号接收的验证码如下:

img_v3_027b_f4889c5b-3a74-4ff8-8da0-c2e6d16361cg.jpg

  1. 赋值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 IDAccessKey Secret可以是阿里云账号的,也可以是RAM的也可是STS的。
  • PhoneNumbers手机号需要是动态的,如注册时动态获取手机号
  • TemplateParam验证码是随机的,校验时也需要
  • SignName签名是必须的,自定义的签名需要申请资质后注册
  • TemplateCode短信模版,在注册签名是自定义的。
  • Endpoint域名根据数据中心选择,选择可用的即可。

在上线的服务中需要申请资质,如果是他用即企业使用则需要营业执照等材料。