send-sms.md 4.9 KB
Newer Older
W
wanganxp 已提交
1
**短信发送**
雪洛's avatar
雪洛 已提交
2

W
wanganxp 已提交
3
uniCloud内置了短信发送API。给开发者提供更方便、更便宜的短信发送能力。
W
wanganxp 已提交
4 5 6 7 8 9 10 11 12 13

目前仅提供短信发送验证码能力,提供了2个模板可选,类似小程序的模板消息,在一个固定模板格式的文字里自定义某些字段,而不是所有文字都可以随便写。

后续视需求提供自助申请更多短信模板。

使用本功能需要在[DCloud开发者中心](https://dev.dcloud.net.cn/uniSms)开通并充值,教程参考[短信服务开通指南](https://ask.dcloud.net.cn/article/37534)

因涉及费用,为保障安全,本能力应该在云函数中调用,而不是在前端调用。

云函数API名称:`uniCloud.sendSms`
雪洛's avatar
雪洛 已提交
14 15 16

**参数说明**

W
wanganxp 已提交
17 18 19 20 21 22
参数结构体为json格式。

|参数名		|类型	|必填	|说明															|
|:-:		|:-:	|:-:	|:-:															|
|smsKey		|String	|是		|调用短信接口的密钥key,从 dev.dcloud.net.cn/uniSms 后台获取		|
|smsSecret	|String	|是		|调用短信接口的密钥secret,从 dev.dcloud.net.cn/uniSms 后台获取	|
W
wanganxp 已提交
23
|phone		|String	|是		|发送目标手机号,暂仅支持中国大陆手机号,不能填写多个手机号|
W
wanganxp 已提交
24 25
|templateId	|String	|是		|模版Id,短信内容为固定模板,详见下方说明						|
|data		|Object	|是		|模版里的各个字段,json格式										|
雪洛's avatar
雪洛 已提交
26

雪洛's avatar
雪洛 已提交
27
**参数templateId说明**
雪洛's avatar
雪洛 已提交
28

W
wanganxp 已提交
29
目前短信功能包括两个模版,暂不可自定义新模版,模版形式如下。参数data内的字段会填充到模版内容里。
雪洛's avatar
雪洛 已提交
30

W
wanganxp 已提交
31 32 33 34 35 36 37 38
|模版Id				|模板内容																							|
|:-:				|:-:																								|
|`uniID_code`		|【uniID】“${name}”验证码:${code},用于${action},${expMinute}分钟内有效,请勿泄露并尽快验证。	|
|`uni_verify_code`	|【uni验证】“${name}”验证码:${code},用于${action},${expMinute}分钟内有效,请勿泄露并尽快验证。	|

`uniID_code`模板为uni-ID业务专用。`uni_verify_code`模板为开发者自定义使用,比如在支付等高安全要求场景中使用。

模板中`${}`中的内容为自定义字段,在data中填写每个自定义字段后拼接成完整的短信内容。
雪洛's avatar
雪洛 已提交
39 40 41

**上述模版对应的data结构为**

雪洛's avatar
雪洛 已提交
42 43
|参数名		|类型		|必填	|长度限制		|说明																															|
|:-:			|:-:		|:-:	|:-:			|:-:																															|
雪洛's avatar
雪洛 已提交
44 45 46
|name			|String	|是		|长度最大15	|应用名称,不可包含“【“或”】”																												|
|code			|String	|是		|长度最大6	|验证码串,注意一般需要自行提供随机数并在数据库中存储以方便校验,只允许使用字母或数字		|
|action		|String	|是		|长度最大6	|验证码用途,不可包含“【“或”】”																												|
雪洛's avatar
雪洛 已提交
47
|expMinute|String	|是		|长度最大2	|验证码过期时间,单位分钟,即不超过99分钟。过期校验逻辑需自行开发	|
W
wanganxp 已提交
48

雪洛's avatar
雪洛 已提交
49 50 51

**返回值**

W
wanganxp 已提交
52 53 54
接口调用失败时会直接抛出错误,调用成功时才会有返回值。

注意接口调用成功不代表短信发送成功,比如目标手机关机会导致短信发送失败。真实的短信发送成功与否请在[https://dev.dcloud.net.cn/uniSms](https://dev.dcloud.net.cn/uniSms)后台查看报表。
雪洛's avatar
雪洛 已提交
55

W
wanganxp 已提交
56 57
|参数名	|类型	|说明			|
|:-:	|:-:	|:-:			|
雪洛's avatar
雪洛 已提交
58 59 60 61 62 63 64 65 66 67
|errCode|Number|成功返回0,调用失败错误码见下表	|
|errMsg|String|错误描述,调用失败时返回	|

**错误码说明**

|错误码	|错误																	|
|:-:		|:-:																	|
|10001	|参数校验未通过,errMsg内会给出详细信息|
|10002	|校验未通过,errMsg内会给出详细信息		|
|10003	|其他错误															|
雪洛's avatar
雪洛 已提交
68 69 70 71

**调用示例**

```js
雪洛's avatar
雪洛 已提交
72 73
'use strict';
exports.main = async (event, context) => {
雪洛's avatar
雪洛 已提交
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
  try {
    const res = await uniCloud.sendSms({
      smsKey: '****************',
      smsSecret: '****************',
      phone: '188********',
      templateId: 'uniID_code',
      data: {
        name: 'DCloud',
        code: '123456',
        action: '注册',
        expMinute: '3',
      }
    })
    // 调用成功,请注意这时不代表发送成功
    return res
  } catch(err) {
    // 调用失败
雪洛's avatar
雪洛 已提交
91 92
    console.log(err.errCode)
    console.log(err.errMsg)
雪洛's avatar
雪洛 已提交
93
    return {
雪洛's avatar
雪洛 已提交
94 95
      code: err.errCode
      msg: err.errMsg
雪洛's avatar
雪洛 已提交
96 97
    }
  }
雪洛's avatar
雪洛 已提交
98
};
雪洛's avatar
雪洛 已提交
99

雪洛's avatar
雪洛 已提交
100 101
```

W
wanganxp 已提交
102 103 104 105 106
本示例发送的短信,在手机上将显示为:
```
【uniID】“DCloud”验证码:123456,用于注册,3分钟内有效,请勿泄露并尽快验证。
```

雪洛's avatar
雪洛 已提交
107 108
**注意事项**

hbcui1984's avatar
hbcui1984 已提交
109 110
- data内如果有`测试``test`等字样,系统可能会被判定为测试用途,不会真正把短信下发到对应手机(此行为由运营商控制,可能真实发送,也可能不发送)
-[DCloud开发者中心](https://dev.dcloud.net.cn/uniSms)绑定`uniCloud`服务空间后,将会只允许绑定的服务空间调用此接口,绑定列表为空时表示不限制服务空间
雪洛's avatar
雪洛 已提交
111
- 短信内容不可包含★、 ※、 →、 ●等特殊符号,可能会导致短信乱码