使用物联网卡发送短信
从2015年9月1日起 ,购买电话卡需要实名制,也就是说需要本人使用身份证才能购买。但是随着物联网的迅速发展,需要联网的终端逐渐增多。在此环境下,诞生了一种不能电话,不能短信,不需要实名制,只能上网的物联网卡。但是在某些场合,需要用到短信功能。本教程使用合宙的API发送短信,一条短信只需要4分钱。
1、购买短信
注册短信中心账号,并登陆。
进入账户管理->充值, 选择您要购买短信的规格,付款
2、新建签名
进入签名管理->签名管理->新建, 签名创建完成之后,在签名管理页面查看签名状态,签名审核通过之后就可以用来发送短信。
发送短信之前,客户首先需要在公司平台对签名进行备案,备案时需要提供签名的文本。
提交的短信签名 2-10 个字符; 建议全用中文。
-
其中“梅云飞”就是签名,如果没有签名就不能发送短信 。
3、新建模版
进入签名管理->模版管理->新建, 模版创建成功之后,在模版管理页面查看模版状态,模版审核通过之后就可以用来发送短信, 如果没有通过的模版就不能发送短信
注:
-
发送新短信内容之前,客户首先需要在我公司平台对模板进行备案,备案时需要提供模板的文本。后面发送已通过模版的内容就不用申请模版了。
提交报备模板规范:
提交短信模板的内容规则,例
例 1:您的验证码是????,请在 5 分钟内使用。
例 2:%先生,欢迎您光临%店铺,祝您购物愉快。
? 和 % 表示通配符,?匹配 1 个字符,%匹配 N 个字符。
说明:
其中N匹配0到多个字符
发送提交短信的内容:
通过短信发送页面发送短信,短信的内容规则为:
例:您的验证码是 1234,请在 5 分钟内使用。
4、创建应用
进入应用管理->创建应用,填写您要创建的应用名称,应用描述,然后创建。
创建应用成功后在应用管理->应用列表里面查看自己的应用,应用的appkey,appsecret用于下面API接口的调用
至此,可以通过短信平台发送短信了。
可以在发送记录中查看发送状态
除了使用短信平台发送短信,还可以使用API发送短信。
短信API
请求URL :
-
api.openluat.com/sms/send
请求方式:POST
认证:
- 在headers中增加Basic auth的认证,填入(appkey, appsecret)
- 认证方式为HTTP Basic Authorization,认证信息为appkey:appsecret,详细调用请参考各个语言的HTTP Basic Authorization
以下补充关于Basic Authorization相关知识:
在HTTP中,基本认证(Basic access authentication)是一种用来允许网页浏览器或其他客户端程序在请求时提供用户名和口令形式的身份凭证的一种登录验证方式。
在发送之前是以用户名追加一个冒号然后串接上口令,并将得出的结果字符串再用Base64算法编码。例如,提供的用户名是Aladdin
、口令是open sesame
,则拼接后的结果就是Aladdin:open sesame
,然后再将其用Base64编码,得到QWxhZGRpbjpvcGVuIHNlc2FtZQ==
。最终将Base64编码的字符串发送出去,由接收者解码得到一个由冒号分隔的用户名和口令的字符串。(摘自*)
服务器将Authorization header中的用户名密码取出,进行验证, 如果验证通过,将根据请求,发送资源给客户端
参数:
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
content | 是 | string | 短信内容 |
phone | 是 | string | 被叫号码,多个被叫号码用英文的逗号分隔,最多支持 100 个被叫号码。 |
sign | 是 | string | 签名 |
返回示例
{
"code": 0,
"msg": '',
"msgid":'592FAC0300000D70'
}
返回参数说明:
参数名 | 类型 | 说明 |
---|---|---|
code | int | 状态码,0:成功;1:失败 |
msg | string | 错误提示: code为1时才有 |
msgid | string | 消息id:用于匹配回调中的 msgid |
下面提供几个实际操作示例
python
import requests
from requests.auth import HTTPBasicAuth
url = 'https://api.openluat.com/sms/send'
payload = {
'content': '您的验证码是1234,请在5分钟内使用。',
'phone': '手机号',
'sign': '签名', #sign是在 http://sms.openluat.com/temp 创建的
}
appkey = 'appkey'
appsecret = 'appsecret'
#appkey,appsecret是在 http://sms.openluat.com/establish 创建的
#在 http://sms.openluat.com/establog 查看自己的appkey,appsecret。
auth = HTTPBasicAuth(appkey, appsecret)
r = requests.post(url, data=payload, auth=auth)
print(r.json())
以下示例使用Air202模块,Air202模块可以同时采用Lua语言进行二次开发和AT命令开发。
luat
module(...,package.seeall)
require"http"
--HTTP发送后的回调函数
local function cbFnc(result,prompt,head,body)
log.info("testHttp.cbFnc",result,prompt)
if result and head then
for k,v in pairs(head) do
log.info("testHttp.cbFnc",k..": "..v)
end
end
if result and body then
log.info("testHttp.cbFnc","bodyLen="..body:len())
end
end
http.request("POST","appkey:aaa@qq.com/sms/send",
nil,{['Content-Type']="application/x-www-form-urlencoded"},"content=您的验证码为:882474,请尽快确认!&phone=18680841753&sign=测试使用",nil,cbFnc)
从trace输出看到已经发送成功
AT
使用AT命令也可以通过调用API发送短信
-> AT+SAPBR=3,1,"CONTYPE","GPRS" #设置HTTP功能的承载类型SAPBR是为了**PDP上下文,**PDP上下位是为了使用UDP协议,从而可以解析域名。
<- OK
-> AT+SAPBR=3,1,"APN","CMNET" #设置HTTP功能的APN
<- OK
-> AT+SAPBR=5,1 #保存cid=1的承载的相关参数(CONTYPE,APN)到NV,这样关机不消失,并且开机后自动恢复为保存的取值。
<- OK
-> AT+SAPBR=1,1 #**该承载的GPRSPDP上下文
<- OK
-> AT+SAPBR=2,1 #查询下承载的状态
<- OK
<- +SAPBR: 1,1,"10.153.61.216" #第一个参数1表示cid,第二个参数1表示已经连接,第三个参数表示模块获取的IP地址
-> AT+HTTPINIT #HTTP协议栈初始化
<- OK
-> AT+HTTPPARA="CID",1 #设置HTTP会话参数:CID
<- OK
-> AT+HTTPPARA="URL","api.openluat.com/sms/send" #设置HTTP会话参数:URL
<- OK
-> AT+HTTPPARA="USER_DEFINED","Content-Type: application/x-www-form-urlencoded" #设置自定义参数
<- OK
-> AT+HTTPPARA="USER_DEFINED","Authorization: Basic appsecret:appsecret base64编码后的数据" #设置auth认证
<- OK
-> AT+HTTPDATA=191,100000 #191为post内容的长度,输入时间要设定的足够大以保证数据输入
DOWNLOAD #出现download开始输入post内容
content=%E6%82%A8%E7%9A%84%E9%AA%8C%E8%AF%81%E7%A0%81%E4%B8%BA123456%EF%BC%8C%E8%AF%B7%E5%B0%BD%E5%BF%AB%E7%A1%AE%E8%AE%A4%EF%BC%81&phone=18680841753&sign=%E6%B5%8B%E8%AF%95%E4%BD%BF%E7%94%A8
<- OK
-> AT+HTTPACTION=1 #POST开始
<- OK
+HTTPACTION: 1,200,62 #POST结束
-> AT+HTTPREAD #读取返回内容
<- +HTTPREAD: 62
{
"code": 0,
"msg": "",
"msgid": "5B5809F9000022C7"
}
OK
可以看到已经成功发送出去。需要注意的是post的内容需要对中文进行utf-8的url编码 。
从上面Luat和AT的例子可以看出,在完成较复杂逻辑的时候,Luat明显优于AT命令。
上一篇: 数据库的数据抽象有几个级别