手把手教你使用腾讯云短信服务——开发者视角

概念

首先我们先介绍下腾讯云短信服务的相关概念,便于开发者对短信服务有一个整体的认识。

SDKAPPID

SDKAPPID即短信应用ID,用以区分用户腾讯云账号下不同业务,很多用户会把这个和腾讯云账号的APPID混淆,我们这里加以区分下。

腾讯云账号的APPID是在腾讯云账号信息页中呈现的,

注意】注意图中最下方的认证信息,如果您代表的是企业或者政府机构(拥有企业营业执照或者组织机构的社会信用代码)建议您将认证方式修改为企业认证,这样您在使用腾讯云短信服务时可以使用营销类型的短信。

腾讯云短信的SDKAPPID是在短信控制台下展示的,

注意】如果您需要为多个业务接入腾讯云短信服务,那么建议您添加多个应用,这样不同业务的短信服务配置可以隔离而不会互相影响。

签名

现在手机上收到的短信一般都形如下面的格式,

代码语言:txt
复制
【腾讯云】您的验证码是 1234,请在 2 分钟内填写。

【】中的内容称为签名,代表着这条短信发出的企业或者组织机构、亦或者是产品或者服务的名称,所以当您申请签名是要么上传企业或者组织机构的营业执照要么上传代表产品或者服务的站点URL、公众号信息的截图,签名总体上就分为这两类。

模板

模板的作用是便于平台对内容进行管控,防止违规信息下发。在接入指引中您可以看到模板形如,

代码语言:txt
复制
您的验证码是 {1},请在 {2} 分钟内填写。

{1}和{2}表示模板的变量,表示可变部分,比如验证码的具体内容、客户的性别(先生和女士)、用户的手机号尾数、时间等。

注意】尽量确保可变部分简洁,不要采用极少明文信息应对复杂内容场景,这样会使模板中明文部分过于抽象而难以通过审核,这种情况可以尝试对内容进行分类然后申请不同的模板。

接入

通过上面的概念介绍和腾讯云的短信官方文档快速入门和应用管理相信开发者都能够快速地进行接入了。

开发

SDK集成

开发者如果使用的是官方SDK支持的平台进行开发那么可以直接集成进行开发。

API开发

如果开发者没有使用官方SDK所支持的平台或者官方SDK无法满足开发者要求(性能或者开发库)进行开发,那么可以按照API说明进行开发,下面进行简要说明。

协议

腾讯云的短信API使用HTTPS按照POST方法发送JSON格式内容进行请求。我们以指定模板单发短信协议为例,

HTTPS

为了保证用户的请求内容不被窃听,特别是诸如登录验证码之类的信息,腾讯云短信服务没有提供 HTTP 的协议支持。而且为了发送内容的灵活性,也只支持 POST 方法进行发送。

URL

代码语言:txt
复制
https://yun.tim.qq.com/v5/tlssmssvr/sendsms?sdkappid=xxxxx&random=xxxx

url中包含两个参数 sdkappid,random,sdkappid 上文已经提到是短信应用ID,添加和查看方式上文已经提到,random 不带0前缀的随机整数,目的是在需要排查问题时查找日志信息,所以建议开发者使用随机整数(避免重复)。

内容

代码语言:txt
复制
{
    "ext": "",
    "extend": "",
    "params": [
        "验证码",
        "1234",
        "4"
    ],
    "sig": "ecab4881ee80ad3d76bb1da68387428ca752eb885e52621a3129dcf4d9bc4fd4",
    "sign": "腾讯云",
    "tel": {
        "mobile": "13788888888",
        "nationcode": "86"
    },
    "time": 1457336869,
    "tpl_id": 19
}

可以看到内容是采用 JSON 的格式进行组织的,如果您对 JSON 不了解,可以先看下这里。这里有近乎所有语言的JSON开发库,开发者可以参考使用。

这些参数在文档中有解释,这里重点介绍下sig字段。

sig字段的构建方法如下,

代码语言:txt
复制
sha256(appkey=$appkey&random=$random&time=$time&mobile=$mobile)

用的是类似于PHP伪代码的形式,其中$打头的都是变量,代表实际使用时用的值,random的值需要注意,一定要与URL中的random参数值一致,time为请求发起时系统的UNIX时间戳,所以开发者系统时间需要经过校准或者不宜偏差过大(超过10分钟),这两个字段是为了协议的安全性而加入的,您如果有兴趣可以分别了解下唯密文攻击和重放攻击。

应答

代码语言:txt
复制
{
    "result": 0,
    "errmsg": "OK",
    "ext": "",
    "fee": 1,
    "sid": "xxxxxxx"
}

开发者一般关心的是 result 不为0的情况,一般来说如果不为0,那么在errmsg会有准确的提示信息,如果没有明确的出错信息可以查看这里,或者联系官方助手。对接完成之后,可以通过统计页面查看报表,

安全

最重要的事情在最后说——安全,这里我们主要如何防刷。短信被刷的直接危害是浪费开发者经费,另外就是运营商监管。

首先腾讯云短信业务提供了频率限制能力,

其次如果您有更加高级的需求尝试接入我们的验证码服务。

后记

如果读者看完这篇文章还有不清楚的地方,欢迎留言交流。