## 短信API服务 ![](https://img.kancloud.cn/3f/1f/3f1f30dde33bba9a259a7e418a1f10df_160x133.png) > 支持三网合一短信通道,仅可用于验证码短信 · 短信通知 >[danger] 禁止用于金融类、区块链、房产、医疗、中奖以及其它非法内容发送。 ## 功能介绍 1. 支持国内快速发送验证码、短信通知,服务范围覆盖全国。 2. 支持三网合一专属通道,与工信部携号转网平台实时互联。 3. 电信级运营保障,到达率高达99%,支持大容量高并发。 4. 超低资费,多种阶梯套餐任意选择 ### 内置安全策略 1. 限制每天单个号码的发送次数,默认为10条,可根据业务自行调整。 2. 限制单个号码一分钟内不超过1条,一小时内不超过5条,可以根据业务自行调整。 ### 短信防轰炸建议 1. 有效的图片验证(图形、滑动拼图验证码、减少被轰炸机识别的可能性)及不低于60S倒计时。 2. 设置IP白名单。(可绑定多个IP地址) 3. 设置短信预警提醒功能。 4. APP端建议采用秘钥签名校验请求合法性。 5. 由于短信轰炸机可以模拟IP且取用随机号码,所以在进行整改时不要只限制IP和单号码发送次数,因为这样无法限制大量号码异常下发。 ## 签名及模板审核要求 短信发送审核要求大致包括: > 1、短信模板需明确表述短信发送的实际内容。 > 2、所有模板均禁止发送金融相关的所有内容。 > 3、不支持发送未经许可的发送行为,主要指邀请注册、邀请成为会员的商业性信息 。 > 4、禁止发送涉及:色情、赌博、毒品、党政、法律维权、众筹、慈善募捐、宗教、迷信、股票、留学移民、面试招聘、博彩、贷款、催款还款、信用卡提额、投资理财、中奖、抽奖、一元夺宝、一元秒杀、一元云购、二类电商、A货、整形、烟酒、交友、暴力、恐吓、皮草、返现返利、代开发票、运营商禁止发送的信息、代理注册、代办证件、加群、加QQ或者加微信、贩卖个人信息、运营商策反、流量营销、违反广告法用语、殡葬、刷单、空包网、邀请好评、转店类业务等信息的短信。 > 5、禁止在关键字或关键信息中出现错别字、变体字、异体字、各类干扰符号等;禁止出现各类非正常混合字以及非常用的表达法。 > 6、不支持内容中含有直接或间接访问应用内测分发平台的行为。 ## 接口费用( [点击购买](https://market.topthink.com/product/395)) > 最低 0.035元/次 ### 计费规则 >[danger] 短信最终是否成功的确认是运营商异步确认的,所以需要在我的服务->短信服务->发信记录里面确认,最终的计费也是以发信记录里面的成功次数来计费,如果短信内容长度超过70个字符可能会造成多次计费,请悉知。 短信字数=短信模版内容字数 + 签名字数 短信字数≤70个字数,按照70个字数一条短信计算 短信字数>70个字数,即为长短信,按照67个字数记为一条短信计算。客户感知还是一条短信。 >[danger] 在统计短信字数时,小数点、字母、汉字以及其他符号、空格均按照一个字符位进行统计。最终按照实际发送成功的短信条数计费。 ## 接口调用([调用须知](https://docs.topthink.com/think-api/1835086)) ### 调用步骤:申请签名-> 申请模板(如果使用系统自带模板可跳过)->调用接口 短信发送之前,首先要完成模板和签名的申请,登录市场后点击右上角用户头像选择“我的服务->短信服务”,在签名管理和模板管理里面申请即可,审核通过后才可以进行短信发送调用。一旦检查发现有任何违规内容发送的话,我们将会对签名和模板进行冻结,已购买的套餐资费不退,并且保留追究相关责任的权利。开发对接测试的时候,也不要使用带有测试字样的内容(如果产品尚未上线,可以先申请一个公司简称用于测试对接,后续再申请产品相关签名)。 ### 签名提交注意事项 >[danger] 签名的规范建议使用公司名(通常是简写)、品牌名(或商标)、网站名称、产品名、公众号名称等,尽量避免使用生僻字,会比较容易通过审核。签名中不要包含任何特殊字符,包括【】、[],不要使用带有测试字样的签名,申请签名的时候务必注明你的使用场景,便于快速完成审核。为了企业安全考虑,签名使用公司名或简称的话,请先完成企业认证。 ### 模板提交注意事项 >[danger] 模板内容里面如果需要使用变量,变量定义格式为 `${变量名}`,其中变量名规范为英文大小写字母及下划线(请避免包含数字和特殊符号,并且不能使用系统内置变量,包括`id`、`email`、`mobile`、`nick`、`site`)。并且模板内容里面不要包含【】符号,否则会误判为签名,导致发送较慢或者拦截,如非必要,避免在模板中使用特殊字符,并且单个变量不能超过50个字符(如果你要在变量中传URL地址 尽可能使用短网址)。 ## 接口1:发送短信 ``` GET https://api.topthink.com/sms/send ``` ### 请求参数 | 参数名称 | 类型 | 必须 | 描述 | | --- | --- | --- | --- | --- | | appCode| string| 是 | 用户授权码,参考[API调用](https://docs.topthink.com/think-api/1835086) | | signId | Number | 是 | 签名id,在我的服务->短信服务->签名管理里面查看 | | templateId | Number | 是 | 模板id,在我的服务->短信服务->模板管理里面查看 | | phone| String | 是 | 要发送的国内手机号码 | | params| Json | 否 | 模板变量 使用Json对象格式 | ### 返回`data`参数 | 名称 | 类型 | 说明 | |---|---|---| |id|String|短信发送任务id| ## SDK调用 ``` $client = new Client("YourAppCode"); $result = $client->smsSend() ->withSignId('78') ->withTemplateId('234') ->withPhone('15687902345') ->withParams('{"code": "7865"}') ->request(); dump($result); ``` >[danger] 注意:如果你的模板没有变量,请不要传任何变量参数,否则会提示变量错误。 返回结果示例: ``` { "code": 0, "message": "发送成功", "data":{ "id": "6055df2f45e10" } } ``` ## 接口2:查询短信发送状态 短信最终是否成功的确认是运营商异步确认的,你可以在**我的服务->短信服务->发信设置**里面设置数据推送的回调地址,用于支持短信发送回执的推送。 回调请求类型为`POST`, 请求的头部包含 ~~~ X-ThinkPHP-Event: sms ~~~ 请求的数据为`json`格式的 ~~~ { 'action' : 'report', 'sms': { 'id':'6055075678d9' // 短信任务ID 'phone' : '13509898765', // 发送手机号码 'content' : '短信内容', // 短信内容 'sendDate' : '2021-04-20 04:19:33', // 发送时间 'receiveDate': '2021-04-20 04:21:30', // 接收时间 'status': 1,// 1 成功 -1 失败 0 发送中 'message':'', // 错误提示 } } ~~~ 数据推送只会推送一次,如果没有收到的话,也可以通过以下接口主动查询短信的发送状态 ``` GET https://api.topthink.com/sms/query_status ``` ### 请求参数 | 参数名称 | 类型 | 必须 | 描述 | | --- | --- | --- | --- | --- | |id|String|是|短信发送任务id| ### 返回`data`参数 | 名称 | 类型 | 说明 | |---|---|---| |id|String|短信发送任务id| | phone| Number | 发送手机号码 | | content| string| 短信内容 | | sendDate| String | 发送时间 | | reveiveDate| String| 接收时间 | | status| int | 发送状态 0 发送中 1 成功 -1 失败 | | message| String| 错误信息 | ## SDK调用 ``` $client = new Client("YourAppCode"); $result = $client->smsQueryStatus() ->withId('6055075678d9') ->request(); dump($result); ```