使用物联网卡发送短信
从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中的用户名密码取出,进行验证, 如果验证通过,将根据请求,发送资源给客户端
http authorization 基本认证
参数:
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
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 thenfor k,v in pairs(head) dolog.info("testHttp.cbFnc",k..": "..v)endendif result and body thenlog.info("testHttp.cbFnc","bodyLen="..body:len())end
endhttp.request("POST","appkey:appsecret@api.openluat.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命令。
使用物联网卡发送短信相关推荐
- Android双卡识别IMSI以及副卡发送短信总结
今日科技快讯 有消息称,许多乐视员工的建行龙卡信用卡额度都被调整为1元,建设银行官方给出的理由为"涉及经济案件".甚至3年前曾服务于乐视的员工,其建行信用卡额度也被调成了1元,这位 ...
- CMPP3.0实现物联网卡发短信遇到的问题
当下物联网发展迅猛,物联网卡可以接受短信指令,实现千里之外尽可掌控.本人做过一个这类项目,把相关经验记录下来,分享给需要的人. 物联网卡通讯其实跟电话卡一样,可以使用CMPP协议.不过由于物联网卡位数 ...
- Android 双卡识别Imsi以及副卡发送短信总结
本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 Android5.0系统才开始提供对双卡识别支持,提供SubscriptionManager类来完成对双卡相关设备信息的读取.在5. ...
- android sim卡 信息,android-如何使用SIM2或双SIM卡提交短信
我创建了Android短信应用程序 我已经能够顺利发送短信sim卡的短信,则没有报告. 顺利 请帮助我添加其源代码 我的密码 public class MainActivity extends Act ...
- Android 双卡发送短信
场景: 手机中有两张卡时,如何选择由哪张卡发送短信 实现代码: private void sendMessage() {String SEND = "sms_send";Pendi ...
- android stuido 如何使用SIM2或双SIM卡提交短信
Android studio 使用默认SIM卡发送短信的代码非常简单 SmsManager.getDefault().sendTextMessage("电话号码", null, & ...
- 【毕业设计教程】单片机发送短信消息(GMS模块) - 物联网 嵌入式 stm32
文章目录 1 简介 2 GMS模块 3 技术规格 3.1 适应性 4 arduino + GMS 示例代码 5 实现效果 6 最后 1 简介 Hi,大家好,这里是丹成学长,今天向大家介绍如何使用GMS ...
- [应用][AT][C++] 使用AT命令操作SIM卡进行短信发送
最近投身于某电子公司的用电信息采集终端软件重写,主要负责终端与主台的通讯功能编写.本周用到了AT命令操作SIM卡进行发送短信功能,在此做一个小小的总结,希望对有类似需求的童鞋能有所帮助. 注:由于有C ...
- 如何通过发送短信办理移动电话卡流量套餐
GPRS:2元30M,5元150M,10元300M 一:用两元开通30M流量方法.发送短信H1到10086,发H2加一个本地移动号如:(H213550471555)到10086发HjHB到10086查 ...
最新文章
- 北大青鸟广州天河中心S1T62班HTML项目答辩实录
- vue用公共组件页面传值_微信小程序页面传值、组件间通信总结
- abb限位开关已打开drv1_广告雕刻机限位开关触发
- JSP实例-彩色验证码
- Git学习系列之如何正确且高效地将本地项目上传到Github(图文详解)
- 观察者模式 - dom事件 / 自定义事件 / Promise 我的理解
- WEB后端服务第22天-Django项目第2天
- 使用IR2101半桥驱动电机的案例
- Elasticsearch 7.3.0 翻译 - 《Aggregations》 度量聚合 百分位数聚合
- 快速摆脱在线扩容难的噩梦?
- linux安装浏览器 linux本地浏览器进行访问
- MATLAB操作:从.mat中删除变量
- 嵌套/双层循环中的continue和break详解
- Python Tkinter 之Radiobutton控件(Python GUI 系列8)
- 应用全屏启动页适配小米9(水滴屏)
- OE(OSA)期刊模板下载
- 大学生没有项目经验该怎么拿测开岗位的office?来看话梅怎么说
- 宏碁Acer K50-20-55Z3拆机 +取下主板CMOS电池放电重新进入BIOS成功
- 酱狗的杂七杂八(叁)
- c语言如何判断最小公倍数,c语言如何求最大公约数和最小公倍数?
热门文章
- 008-break语句与continue语句的使用,循环嵌套
- “黄金薄膜” CPI膜 —— 折叠屏手机核心材料
- Minecraft 1.16.5模组开发(三十) 自定义成就系统(advancements)
- 计算机报刊杂志推荐,计算机优秀期刊推荐 | Journal of Cloud Computing
- oracle报错:ORA-28001: the password has expired
- CRITICAL_SECTION的使用方法——模拟售票功能
- VC++ 屏幕捕获(DirectDraw)
- 如何(以及为什么)在Word文档中使用隐藏文本
- 对于电脑命令你了解多少?电脑命令大全
- 远程超大功率森林防火喊话与应急广播系统方案