云开发 /sendSms

# cloudbase.sendSms

> 本接口应在服务器端调用,详细说明参见[服务端API](https://developers.weixin.qq.com/miniprogram/dev/framework/server-ability/backend-api.html)。

> 本接口支持[云调用](https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/openapi/openapi.html)。需开发者工具版本 >= `1.02.1904090`(最新[稳定版下载](https://developers.weixin.qq.com/miniprogram/dev/devtools/stable.html)),`wx-server-sdk` >= `0.4.0`

发送支持打开云开发静态网站的短信,该 H5 可以打开小程序。详情可[参考静态网站 H5 跳小程序](https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/staticstorage/jump-miniprogram.html)

**短信内容**

短信由签名和正文内容组成:

短信签名是位于短信正文前【】中的署名,小程序发送短信时,签名为小程序名称。

- 正文内容是由短信模板和变量构成,例:{1},跳转小程序 {2} 回 T 退订,模板参数中 {1},{2} 是变量:
- {1} :用户可自定义传入的内容,当前最长为30个字。
- {2} :用户传入的静态托管的地址,例如 /action/index.html?action=double12。 示例:【云开发】能力上新,跳转小程序 https://tcbe.cn/VcdrUJK0 回 T 退订

**短信资源包**

前往“开发者工具 - 云开发 - 设置 - 环境设置 - 资源包”中购买。

**第三方代开发**

小程序需要将【短信服务】或【云开发】权限集授权给第三方,第三方才可代小程序调用此接口。第三方在调用接口时,可选择使用第三方的环境或小程序的环境,默认使用小程序的环境。在resource_appid填入第三方的appid,在 env 填入第三方账号下的环境,即可使用第三方的环境。

调用方式:

- [HTTPS 调用](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/cloudbase/cloudbase.sendSms.html#method-http)
- [云调用](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/cloudbase/cloudbase.sendSms.html#method-cloud)



## HTTPS 调用

### 请求地址

```text
POST https://api.weixin.qq.com/tcb/sendsms?access_token=TOKEN
```

### 请求参数

| 属性                                  | 类型           | 默认值    | 必填 | 说明                                                         |
| :------------------------------------ | :------------- | :-------- | :--- | :----------------------------------------------------------- |
| access_token / cloudbase_access_token | string         |           | 是   | [接口调用凭证](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/access-token/auth.getAccessToken.html) |
| env                                   | string         |           | 是   | [环境 ID](https://developers.weixin.qq.com/miniprogram/dev/wxcloud/basis/quickstart.html#_2-开通云开发、创建环境) |
| phone_number_list                     | Array.<string> |           | 是   | 手机号列表,单次请求最多支持 1000 个境内手机号,**手机号必须以`+86`开头** |
| sms_type                              | string         | Marketing | 是   | 短信类型,营销类短信:Marketing;通知类短信:Notification    |
| content                               | string         |           | 是   | sms_type="Marketing" 时必填,自定义短信内容,一条短信最多为70个字。可自定义内容最多为 30 个字符,详情参考[短信规则](https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/staticstorage/msg-miniprogram.html) |
| path                                  | string         |           | 是   | sms_type="Marketing" 时必填,云开发静态网站 path,**不需要指定域名**,例如`/index.html` |
| template_id                           | string         |           | 是   | sms_type="Notification" 时必填,模版 ID                      |
| template_param_list                   | Array.<string> |           | 是   | sms_type="Notification" 时必填,短信模版变量数组             |
| use_short_name                        | bool           | false     | 否   | 是否使用小程序简称                                           |
| resource_appid                        | string         |           | 否   | 资源方appid,第三方代开发时可填第三方 appid 或小程序appid,应为所填环境所属的账号APPID |

### 返回值

### Object

返回的 JSON 数据包

| 属性             | 类型           | 说明         |
| :--------------- | :------------- | :----------- |
| errcode          | number         | 错误码       |
| errmsg           | string         | 错误信息     |
| send_status_list | Array.<Object> | 开放数据列表 |

**errcode 的合法值**

| 值      | 说明                           | 最低版本 |
| :------ | :----------------------------- | :------- |
| 0       | 请求成功                       |          |
| -1      | 系统繁忙,此时请开发者稍候再试 |          |
| -501007 | 参数有误,具体原因参考 errmsg  |          |
| -601027 | 无效的环境                     |          |
| -601032 | 小程序昵称不能为空             |          |
| -601033 | 仅支持非个人主体小程序         |          |
| -607004 | 无效的 URL Link                |          |

**send_status_list 的结构**

| 属性         | 类型   | 说明               |
| :----------- | :----- | :----------------- |
| serial_no    | string | 发送流水号         |
| phone_number | string | 手机号码           |
| code         | string | 短信请求错误码     |
| message      | string | 短信请求错误码描述 |
| iso_code     | string | 国家码或地区码     |

### 营销类短信请求数据示例

```json
{
  "env":"online-12345678910",
  "phone_number_list":[
     "+8612345678910"
  ],
  "sms_type": "Marketing",
  "content":"发布了新的能力",
  "path":"/index.html",
  "use_short_name": true
}
```

### 通知类短信请求数据示例

```json
{
  "env":"online-12345678910",
  "phone_number_list":[
     "+8612345678910"
  ],
  "sms_type": "Notification",
  "template_id": "923584",
  "template_param_list": ["商品", "/index.html"]
}
```

### 返回数据示例

```json
{
  "errcode":0,
  "send_status_list":[
     {
        "serial_no":"8:gFIqWUHzllUyOFRHgeu20201231",
        "phone_number":"+8612345678910",
        "code":"Ok",
        "message":"send success",
        "iso_code":""
     }
  ]
}
```



## 云调用

> [云调用](https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/openapi/openapi.html)是微信云开发提供的在云函数中调用微信开放接口的能力,需要在云函数中通过 `wx-server-sdk` 使用。

### 接口方法

```js
openapi.cloudbase.sendSms
```

> 需在 `config.json` 中配置 `cloudbase.sendSms` API 的权限,[详情](https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/openapi/openapi.html#usage-3)

### 请求参数

| 属性              | 类型           | 默认值    | 必填 | 说明                                                         |
| :---------------- | :------------- | :-------- | :--- | :----------------------------------------------------------- |
| env               | string         |           | 是   | [环境 ID](https://developers.weixin.qq.com/miniprogram/dev/wxcloud/basis/quickstart.html#_2-开通云开发、创建环境) |
| phoneNumberList   | Array.<string> |           | 是   | 手机号列表,单次请求最多支持 1000 个境内手机号,**手机号必须以`+86`开头** |
| smsType           | string         | Marketing | 是   | 短信类型,营销类短信:Marketing;通知类短信:Notification    |
| content           | string         |           | 是   | sms_type="Marketing" 时必填,自定义短信内容,一条短信最多为70个字。可自定义内容最多为 30 个字符,详情参考[短信规则](https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/staticstorage/msg-miniprogram.html) |
| path              | string         |           | 是   | sms_type="Marketing" 时必填,云开发静态网站 path,**不需要指定域名**,例如`/index.html` |
| templateId        | string         |           | 是   | sms_type="Notification" 时必填,模版 ID                      |
| templateParamList | Array.<string> |           | 是   | sms_type="Notification" 时必填,短信模版变量数组             |
| useShortName      | bool           | false     | 否   | 是否使用小程序简称                                           |
| resourceAppid     | string         |           | 否   | 资源方appid,第三方代开发时可填第三方 appid 或小程序appid,应为所填环境所属的账号APPID |

### 返回值

### Object

返回的 JSON 数据包

| 属性           | 类型           | 说明         |
| :------------- | :------------- | :----------- |
| errCode        | number         | 错误码       |
| errMsg         | string         | 错误信息     |
| sendStatusList | Array.<Object> | 开放数据列表 |

**errCode 的合法值**

| 值   | 说明 | 最低版本 |
| :--- | :--- | :------- |
| 0    | 成功 |          |

**sendStatusList 的结构**

| 属性        | 类型   | 说明               |
| :---------- | :----- | :----------------- |
| serialNo    | string | 发送流水号         |
| phoneNumber | string | 手机号码           |
| code        | string | 短信请求错误码     |
| message     | string | 短信请求错误码描述 |
| isoCode     | string | 国家码或地区码     |

### 异常

### Object

抛出的异常

| 属性    | 类型   | 说明     |
| :------ | :----- | :------- |
| errCode | number | 错误码   |
| errMsg  | string | 错误信息 |

**errCode 的合法值**

| 值      | 说明                           | 最低版本 |
| :------ | :----------------------------- | :------- |
| -1      | 系统繁忙,此时请开发者稍候再试 |          |
| -501007 | 参数有误,具体原因参考 errmsg  |          |
| -601027 | 无效的环境                     |          |
| -601032 | 小程序昵称不能为空             |          |
| -601033 | 仅支持非个人主体小程序         |          |
| -607004 | 无效的 URL Link                |          |

### 营销类短信请求数据示例

```js
const cloud = require('wx-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV,
})
exports.main = async (event, context) => {
  try {
    const result = await cloud.openapi.cloudbase.sendSms({
        "env": 'online-12345678910',
        "content": '发布了新的能力',
        "path": '/index.html',
        "phoneNumberList": [
          "+8612345678910"
        ],
        "smsType": 'Marketing',
        "useShortName": true
      })
    return result
  } catch (err) {
    return err
  }
}
```

### 通知类短信请求数据示例

```js
const cloud = require('wx-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV,
})
exports.main = async (event, context) => {
  try {
    const result = await cloud.openapi.cloudbase.sendSms({
        "env": 'online-12345678910',
        "phoneNumberList": [
          "+8612345678910"
        ],
        "smsType": 'Notification',
        "templateId": '923584',
        "templateParamList": [
          "商品",
          "/index.html"
        ]
      })
    return result
  } catch (err) {
    return err
  }
}
```

### 返回数据示例

```json
{
  "errCode": 0,
  "sendStatusList": [
    {
      "code": "Ok",
      "message": "send success",
      "serialNo": "8:gFIqWUHzllUyOFRHgeu20201231",
      "phoneNumber": "+8612345678910",
      "isoCode": ""
    }
  ],
  "errMsg": "openapi.cloudbase.sendSms:ok"
}
```