短信接口
短信接口文档
Web Service接入模式Web Service 发送短信模式Web Service 路径:/WS/LinkWS.asmx系统提供8个接口: 注册接口Reg、更改密码接口UpdPwd、修改注册信息UpdReg、查询余额接口SelSum、发送信息接口Send、群发短信接口 BatchSend 、短信报告接口 GetReportSMS、接收短信Get注册接口Reg输入参数:参数说明类型LoginName代理商账号StringLoginPwd 代理商密码StringCorpName 企业名称StringLinkMan 联系人StringTel 联系电话StringMobile 联系人手机StringEmail 邮件StringMemo 其他备注StringCorpID 用户账号StringPass 用户密码String输出参数:输出返回值参数状态说明OK 注册成功错误文本失败C# 实例:try{Dxt.LinkWS LinkWs=new dxt.LinkWS();String ReS=LinkWs.Reg(LoginName, LoginPwd, CorpName, LinkMan, Tel, Mobile, Email, CorpID, Pass);if(ReS=="OK"){MessageBox.Show("注册成功" );}else{MessageBox.Show("注册失败!" );}}catch (.WebException WebExcp){MessageBox.Show("网络错误,无法连接到服务器!" );}更改密码UpPwd输入参数参数说明类型CorpID 帐号StringPwd 密码StringNewPwd 新密码String输出参数:输出返回值参数状态说明0 密码修改成功–1 账号未注册–2 其他错误–3 密码错误C# 实例:try{Dxt.LinkWS LinkWs=new Dxt.LinkWS();intUpdPwd=LinkWs.Reg(CorpID.Text.Trim(),Pwd.Text.Trim(),NewPwd.Text.Trim());if(ReS==0){MessageBox.Show("密码修改成功" );}else if(ReS==-1){MessageBox.Show("账号未注册" );}else if(ReS==-2){MessageBox.Show("其他错误!" );}else if(ReS==-3){MessageBox.Show("密码错误!" );}}catch (.WebException WebExcp){MessageBox.Show("网络错误,无法连接到服务器!" );修改注册信息 UpdReg输入参数:参数说明类型CorpID 账号String Pwd 密码String CorpName 企业名称String LinkMan 联系人String Tel 联系电话String Mobile 联系人手机String Email 邮件String Memo 其他备注String输出参数:输出返回值参数状态说明0 修改成功–1 账号未注册–2 其他错误–3 密码错误C# 实例:try{Dxt.LinkWS LinkWs=new dxt.LinkWS();ReS=LinkWs.UpdReg(CorpID.Text.Trim(),Pwd.Text.Trim(),CorpName.Text.Trim(),LinkMan.Text.Tr im(),Tel.Text.Trim(),Mobile.Text.Trim(),Email.Text.Trim(),Memo.Text.Trim());if(ReS==0){MessageBox.Show("成功修改注册信息" );}else if(ReS==-1){MessageBox.Show("帐号未注册!" );}else if(ReS==-2){MessageBox.Show("其他错误!" );}else if(ReS==-3){MessageBox.Show("帐号密码不匹配!" );}}catch (.WebException WebExcp){MessageBox.Show("网络错误,无法连接到服务器!" );查询余额SelSum输入参数参数说明类型CorpID 帐号StringPwd 密码String输出参数:输出返回值参数状态说明0 剩余条数–1 账号未注册–2 其他错误–3 密码错误C# 实例:try{Dxt.LinkWS LinkWs=new dxt.LinkWS();int ReS=LinkWs.SelSum(CorpID.Text.Trim(),Pwd.Text.Trim());if(ReS>=0)MessageBox.Show("还剩"+ReS.ToString()+"条" );}else if(ReS==-1){MessageBox.Show("帐号未注册!" );}else if(ReS==-2){MessageBox.Show("其他错误!" );}else if(ReS==-3){MessageBox.Show("帐号密码不匹配!" );}}catch (.WebException WebExcp){MessageBox.Show("网络错误,无法连接到服务器!" );}发送短信 Send(返回状态报告ID)输入参数:参数说明类型CorpID 账号StringPwd 密码StringMobile 发送手机号码StringContent 发送内容(需要UrlEncode)StringCell 子号StringSendTime 定时发送时间String 2012/2/6 17:02:00 输出参数:输出返回值参数状态说明大于0的数字发送成功(得到大于0的数字、作为取报告的id)–1 账号未注册–2 其他错误–3 密码错误–4 手机号格式不对–5 余额不足–6 定时发送时间不是有效的时间格式–7 禁止10小时以内向同一手机号发送相同短信-10 需要审核的信息C# 实例:try{Dxt.LinkWS LinkWs=new Dxt.LinkWS();intReS=LinkWs.Send2(CorpID.Text.Trim(),Pwd.Text.Trim(),SendMobile.Text.ToString().Trim(),Sen dContent.Text.ToString().Trim(),"",SendTime.Text.ToString().Trim());if (ReS == 0){MessageBox.Show("发送成功!" );}else if(ReS==-1){MessageBox.Show("帐号未注册!") ;}else if(ReS==-2){MessageBox.Show("其他错误!") ;}else if(ReS==-3){MessageBox.Show("帐号密码不匹配!") ;}else if(ReS==-4){MessageBox.Show("手机号码不正确!") ;}else if(ReS==-5){MessageBox.Show("余额不足!") ;}else if(ReS==-6){MessageBox.Show("定时发送时间不是有效时间!") ;}else if(ReS==-7){MessageBox.Show("禁止10小时之内向同一手机发送相同内容") ;}}catch (.WebException WebExcp){MessageBox.Show("网络错误,无法连接到服务器!" );}群发短信 BatchSend(返回状态报告ID)输入参数:备注:相同内容的号码尽量一个包提交(一次性最多支持600个号码)。
快速上手短信服务——榛子云短信接口
快速上⼿短信服务——榛⼦云短信接⼝前⾔ ⼤家第⼀次使⽤短信服务应该都是⽤于学习,⽽阿⾥云、腾讯云...等⼤⼚的云服务审核⽐较严格,对于学习者⼤概率⽆法通过,于是在此提供⼀个⽆需审核即可使⽤的短信服务接⼝⽤于学习 —— 。
使⽤步骤1.注册账号2.创建短信模板注意:创建短信模板是⼈⼯审核,不会写可参考腾讯云、阿⾥云短信模板,由于是⼩公司,审核较慢,建议尽早创建。
创建完成后会⽣成⼀个模板 ID(templateId) 这就是本模板的标识,通过 templateId 使⽤该模板发送短信。
3.查看 AppId 和AppId 和 AppSecret ⽤于标识发送⽤户,注意不要泄露,防⽌被⾮法使⽤。
4.封装短信服务导⼊所需要的依赖1<dependency>2<groupId>com.zhenzikj</groupId>3<artifactId>zhenzisms</artifactId>4<version>2.0.2</version>5</dependency>封装 Sms ⼯具类1public class SendSms {2public static void send(String phoneNumber, String code) {3// 使⽤⾃⼰的 AppId 和 AppSecret4ZhenziSmsClient client = new ZhenziSmsClient("https://sms_", "XXXXXX", "XXXX-XXX-XXXX");5Map<String, Object> params = new HashMap<>();6params.put("number", phoneNumber);7// 修改为⾃⼰的templateId8params.put("templateId", "XXXX");9String[] templateParams = new String[1];10templateParams[0] = code;11params.put("templateParams", templateParams);12try {13String result = client.send(params);14System.out.println(result);15} catch (Exception e) {16e.printStackTrace();17}18}19}5.测试使⽤短信服务。
短信查询API接口
统计记录ID
back_number
下行发送是返回业务编号(20位数字)
item_len
长短信拆分条数(默认为1)
total
总发送条数(实际发送手号数量*长短信拆分条数。如给两个手机发送120字短信,总发条数就为4条)
success
成功发送条数(网关实成功发送条数。注意因发送时间差问题,此什不是发送后立刻就能反馈的。)
send_time
网关实际发送时间
3、短信变化明细查询接口
/api.html?a=change&number=扩展号&key=识别码
state
查询状态:true成功,false查询失败
error
查询失败原因。查询成功时为空。
result
数组,发送统计查询结果记录集。
sms_item
剩余短信条数
members
下级会员数量
2、短信发送统计查询接口
/api.html?a=send&number=扩展号&key=识别码
state
查询状态:true成功,false查询失败
error
查询失败原因。查询成功时为空。
result
数组,发送统计查询结果记录集。
id
变化记录ID
sms_change_item
短信变化条数
business
业务名称
business_number
业务编号
operational_time
操作时间
notes
备注
sms_original_item
短信原条数
sms_item
短信变化后余量
operator操作人调Fra bibliotek示例(php版):
新95105187接口说明
短信内容
短信内容长度70-400,根据不同的通道有变化
每个英文或阿拉伯字符也算1个汉字
说明:发送速度:接口的访问间隔是0.1秒,最快访问速度是每秒十次。建议每个包号码数量不超过100条,并把timeout定为10分钟以上。
接口编码格式:UTF-8
3发送返回参数说明:
返回代码
代码说明
100
发送成功
101
您的账户余额不足
102
短信内容长度超过最大允许字数
103
用户名不存在或者密码错误或者帐号属性错误
104
号码出错
105
短信内容为空
109
系统异常提示
110
号码数量超出
111
系统异常
112
手机号不能为空
113
关键字
常见问题说明:1长短信:对于长短信,扣费按照7ห้องสมุดไป่ตู้ –通道签名长度- 3来计算。
2109错误:确认接口编码格式是否正确,测试标准是发送带有“%”的短信看是否能成功发送
余额查询
1接口地址:/HttpPostGetBalance.aspx
2短信发送参数:
参数名称
参数说明
备注
userid
用户id
由系统管理员开通
pwd
用户密码
由系统管理员设定,可改
网关短信点告平台HTTP POST接口说明
短信发送
1接口地址:/HttpPostSendSms.aspx
2短信发送参数:
参数名称
参数说明
备注
userid
用户id
由系统管理员开通
pwd
用户密码
由系统管理员设定,可改
短信MO、MR接口
短信上行接口
一、程序调用地址:合作方提供
二、调用方式:
MO接口采用HTTP GET方式
IP:61.135.159.23和61.135.159.155和61.135.158.233(如需IP鉴权用此ip) 参数说明:字段及解释
1.mobile------手机号
2.send_time------用户上行时间(YYYY-MM-DD HH:MM:SS)
3.msg------------用户发送内容 (会做urlencode,GB2312)
4.linkid-----------内部参数,关联上下行的(如需要则提供,否则可以不用)
5.longnum---------上行长代码
6.feecode------------------- 资费(资费,以分为单位)
注:URLEncode:一般为地址栏中的中文字加密时使用,转换后,原明文的汉字将变成加密字符串,但可被浏览器识别。
因为上行内容中有可能有空格或者中文什么的,怕传输有问题,所以我们这边先做encode传输
短信MR接口
一、程序调用地址:合作方提供
二、调用方式:
MR接口采用HTTP GET方式
IP:61.135.159.23 (如需IP鉴权用此ip)
传递参数包括三个:
1. linkid 匹配下行用的linkid
2.mobile 手机号
3. status 状态报告(0成功,1失败) 成功入库返回OK。
短信接口收费标准
专业 稳定 快捷 优惠短信接口收费标准现如今,大数据时代的到来为我们的生活了便捷。
我们在享受信息的方便时是否会问到,我们的信息是如何发送出去的?短信接口就起到了作用,那么,短信接口收费标准是什么?为此,安徽德能信息科技有限公司为大家总结了相关信息,希望能够为大家带来帮助。
首先让我们了解一下什么是短信接口,标准化SDK 软件开发包(短信接口)适应Basic 、C 、Java 等多种主流开发语言,适应Windows 、Linux 、Unix 等运行环境,彻底解决各个合作伙伴不同开发语言及开发环境的需求。
短信接口有两个方面的功能,一个是向SDK 二次开发的系统提供SDK 函数,这些函数包括及时发送短信函数、定时发送短信函数、接收短信函数、接收发送状态报告函数等,另一个是与短信群发平台通讯,收发短信息。
二次开发,简单的说就是在现有的软件上进行定制修改,功能的专业 稳定 快捷 优惠扩展,然后达到自己想要的功能,一般来说都不会改变原有系统的内核。
根据不同的客户的需要,一些中小公司为客户根据需求在该平台上进行第二次有针对性的开发。
实现短信息的收发;与不同移动运营商系统的连接,由移动运营商将短信息发送到用户的手机。
专门为行业大中型企业定制,以数据库操作为基础,支持Oracle 、SQL Server 、DB2、Mysql 、Sybase 等目前主流数据库,方便快捷的与企业现有的CRM 、OA 、ERP 等业务应用系统无缝对接,封装了 CMPP2.0的短消息通讯协议,提高企业资料的安全性,降低开发周期和开发成本,轻松实现短消息网关的连接和企业的移动商务应用。
目前来说,短信平台的收费没一个统一的标准,各家公司的体制不一样,对外报价也不尽相同,合理的市场价格是在5分-7分。
安徽德能信息科技有限公司是移动、联通、电信三大运营商的战略合作伙伴,致力于为客户提供企业信息手机媒体应用服务,是移动商务服务商公司。
公司业务主要包括:手机移动营销发送、互动、二次接口开发!为平台提供内部信息的共享、交流、数据管理和挖掘等各类解决方案,包括:自动发送、订单提醒等!平台致力于开发通信、INTERNET等领域的信息服务项目,面向无线运营商、企业、及无线终端用户提供全套应用服务和技术解决方案,相继推出一系列无线互联应用产品及应用服务。
用于发短信,拨打电话的网站接口
⽤于发短信,拨打电话的⽹站接⼝我使⽤了云之讯来作为我的通讯第三⽅,平台提供了详细的接⼝说明和资费说明。
到他们官⽹可以下载到C#的demo,在我开发的过程中发现他们的demo缺少了⼀个语⾳电话,根据他们的协议要,写了⼀个《云之讯语⾳通知协议》///<summary>///电话语⾔提醒///</summary>///<param name="toPhone">被叫号码,可以是正常⼿机号码、固定号码,被叫为座机时需要添加区号,如:0755********。
</param>///<param name="toSerNum">语⾳通知的被叫侧显⽰的号码。
可显⽰⼿机号码、400号码或固话。
查阅显号规则。
</param>///<param name="type">内容类型:0:⽂本;1:语⾳ID</param>///<param name="content">当type为0时:⽂本内容,平台负责将该内容转成语⾳,呼通指定号码后,播放该语⾳⽂件;当type为1时:表⽰语⾳ID(语⾳⽂件必须先上传)。
</param> ///<param name="playTimes">循环播放次数,1-3次,默认播放1次。
</param>///<returns>包体内容</returns>public string CallUpSomebody( string toPhone, string toSerNum,string type,string content,string playTimes){if (toPhone == null){throw new ArgumentNullException("toPhone");}try{string date = DateTime.Now.ToString("yyyyMMddHHmmss");// 构建URL内容string sigstr = MD5Encrypt(m_mainAccount + m_mainToken + date);string uriStr;string xml = (m_bodyType == EBodyType.EType_XML ? ".xml" : "");uriStr = string.Format("https://{0}:{1}/{2}/Accounts/{3}/Calls/voiceNotify{4}?sig={5}", m_restAddress, m_restPort, softVer, m_mainAccount, xml, sigstr);Uri address = new Uri(uriStr);WriteLog("CallBack url = " + uriStr);// 创建⽹络请求HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;setCertificateValidationCallBack();// 构建Headrequest.Method = "POST";Encoding myEncoding = Encoding.GetEncoding("utf-8");byte[] myByte = myEncoding.GetBytes(m_mainAccount + ":" + date);string authStr = Convert.ToBase64String(myByte);request.Headers.Add("Authorization", authStr);// 构建BodyStringBuilder data = new StringBuilder();if (m_bodyType == EBodyType.EType_XML){request.Accept = "application/xml";request.ContentType = "application/xml;charset=utf-8";data.Append("<?xml version='1.0' encoding='utf-8'?><voiceNotify>");data.Append("<appId>").Append(m_appId).Append("</appId>");data.Append("<to>").Append(toPhone).Append("</to>");data.Append("<type>").Append(type).Append("</type>");data.Append("<content>").Append(content).Append("</content>");data.Append("<toSerNum>").Append(toSerNum).Append("</toSerNum>");data.Append("<playTimes>").Append(playTimes).Append("</playTimes>");data.Append("</voiceNotify>");}else{request.Accept = "application/json";request.ContentType = "application/json;charset=utf-8";data.Append("{");data.Append("\"voiceNotify\":{");data.Append("\"appId\":\"").Append(m_appId).Append("\"");data.Append(",\"to\":\"").Append(toPhone).Append("\"");data.Append(",\"type\":\"").Append(type).Append("\"");data.Append(",\"content\":\"").Append(content).Append("\"");data.Append(",\"toSerNum\":\"").Append(toSerNum).Append("\"");data.Append(",\"playTimes\":\"").Append(playTimes).Append("\"");data.Append("}}");}byte[] byteData = UTF8Encoding.UTF8.GetBytes(data.ToString());WriteLog("CreateSubAccount requestBody = " + data.ToString());// 开始请求using (Stream postStream = request.GetRequestStream()){postStream.Write(byteData, 0, byteData.Length);}// 获取请求using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) {// Get the response streamStreamReader reader = new StreamReader(response.GetResponseStream());string responseStr = reader.ReadToEnd();WriteLog("CreateSubAccount responseBody = " + responseStr);if (responseStr != null && responseStr.Length > 0){return responseStr;}}return null;}catch (Exception e){throw e;}}以上都提供了demo。
短信接口防刷思路
短信接口防刷思路
1. 记录发送短信的手机号码和发送时间,建立一个黑名单机制。
当某个手机号码发送短信的次数达到一定阈值或在短时间内发送短信的频率过高时,将该手机号码加入黑名单,禁止其继续发送短信。
2. 设置短信发送频率限制。
通过限制每个手机号码在一定时间内只能发送一定数量的短信,防止恶意刷短信。
对于频繁发送短信的手机号码,可以暂时禁止其继续发送短信,并进行人工审核。
3. 引入验证码验证。
在进行短信发送前,要求用户进行验证码验证,确保发送短信的是一个有效的用户。
验证码可以通过图形验证码、短信验证码等形式进行,提高安全性。
4. 加入IP地址筛选机制。
根据IP地址进行筛选,如果某个IP
地址频繁发送短信,则将该IP地址列入黑名单,禁止其继续
发送短信。
5. 引入机器学习和模型预测。
通过分析历史数据,训练机器学习模型来判断短信是否为垃圾短信或恶意刷短信,进一步提高短信防刷的准确性。
短消息接口WS开发说明
WEBSERVICES 接口说明1接口说明集团客户应用系统和应用插件通过此接口收发短消息。
WebService方式通信适配插件收到应用插件的发送请求后,通过MAS服务器基座中的SMS通信协议模块发送SMS;当从SMS通信协议模块收到SMS后,通过此接口将短消息发送给集团客户应用系统和应用插件。
2流程说明短消息接口包括发送和接收两个流程。
图5-4短消息发送流程示意图发送短信由应用系统或应用插件发起,通过sendSms操作实现。
在提交短信发送请求之后,应用侧可以主动获取短信发送状态(getSmsDeliveryStatus操作),或由WebService 方式通信适配插件通知应用侧短信发送状态(notifySmsDeliveryStatus操作)。
图5-5短消息接收流程示意图接收短信可以通过两种方式,一种是由应用侧发起(GetReceivedSms操作),WebService方式通信适配插件将所接收到的发往该应用的短信在响应中提交;第二种是由WebService方式通信适配插件通知应用侧有短信到达(notifySmsReception操作),短信内容包含在请求中。
3数据类型Deliverystatus含义:传送状态数据类型:枚举,定义如下:DeliveryI nformatio n含义:传送消息数据类型:结构。
定义如下:SMSMessage含义:短消息信息数据类型:结构。
定义如下:MessageFormat含义:消息编码类型数据类型:枚举。
定义如下:Sen dMethodType含义:发送选项数据类型:枚举。
定义如下:4接口定义4.1发送短消息操作:sen dSmssen dSms调用是由应用系统或插件发起,请求发送一条短消息到一个指定地址(或地址集合),该短消息由Message描述,目的地址由DestinationAddress描述。
对于可任意扩展服务代码的应用,应用可以通过ExtendCode填写应用内部的扩展码,MAS服务器需自动在其前面补充为该业务分配的长服务号码。
php与阿里云短信接口接入
php与阿⾥云短信接⼝接⼊使⽤阿⾥云短信API,需要在控制台获取以下必要参数,其中需要⾃⼰⼿机验证+官⽅审核多次,尤其审核需要保持耐⼼。
1. accessKeyId 相当于你的个⼈账户密钥;2. accessKeySecret 与上是成对的;3. SignName 个⼈签名,在发出去的短信中,这个签名会显⽰在开头,类似【签名】亲爱的⽤户...... 这种格式,SignName需要通过提交审核;4.TemplateCode 模板代码,阿⾥云短信是⽆法完全⾃定义短信的,需要通过审核的模板,然后⾃⼰再替换掉模板中的变量,如模板:“您的验证码是${code}” ,code就是变量,使⽤时需设置变量值{"code":"12345"}(设置变量值的过程在demo中实现),短信发出去后变成:“您的验证码是12345”,每个通过审核的模板会提供⼀个模板代码;最新的阿⾥云短信接⼝,适⽤于阿⾥⼤于搬家以后的情况。
之前⼀直⽤阿⾥⼤于的短信接⼝,最近上项⽬时发现阿⾥⼤于悄悄地搬家到了阿⾥云!阿⾥云的SDK⽂件繁多,看得⼀头雾⽔!下⾯代码是最新的可适⽤于阿⾥云短信服务的类,亲测成功!<?php/*** 阿⾥云短信验证码发送类* @author Administrator**/class Sms {// 保存错误信息public $error;// Access Key IDprivate $accessKeyId = '';// Access Access Key Secretprivate $accessKeySecret = '';// 签名private $signName = '';// 模版IDprivate $templateCode = '';public function __construct($cofig = array()) {$cofig = array ('accessKeyId' => 'xxxxxxxxxxx','accessKeySecret' => 'xxxxxxxxxx','signName' => '你的签名','templateCode' => 'SMS_76510109');// 配置参数$this->accessKeyId = $cofig ['accessKeyId'];$this->accessKeySecret = $cofig ['accessKeySecret'];$this->signName = $cofig ['signName'];$this->templateCode = $cofig ['templateCode'];}private function percentEncode($string) {$string = urlencode ( $string );$string = preg_replace ( '/\+/', '%20', $string );$string = preg_replace ( '/\*/', '%2A', $string );$string = preg_replace ( '/%7E/', '~', $string );return $string;}/*** 签名** @param unknown $parameters* @param unknown $accessKeySecret* @return string*/private function computeSignature($parameters, $accessKeySecret) {ksort ( $parameters );$canonicalizedQueryString = '';foreach ( $parameters as $key => $value ) {$canonicalizedQueryString .= '&' . $this->percentEncode ( $key ) . '=' . $this->percentEncode ( $value ); }$stringToSign = 'GET&%2F&' . $this->percentencode ( substr ( $canonicalizedQueryString, 1 ) );$signature = base64_encode ( hash_hmac ( 'sha1', $stringToSign, $accessKeySecret . '&', true ) );return $signature;}/*** @param unknown $mobile* @param unknown $verify_code**/public function send_verify($mobile, $verify_code) {$params = array ( //此处作了修改'SignName' => $this->signName,'Format' => 'JSON','Version' => '2017-05-25','AccessKeyId' => $this->accessKeyId,'SignatureVersion' => '1.0','SignatureMethod' => 'HMAC-SHA1','SignatureNonce' => uniqid (),'Timestamp' => gmdate ( 'Y-m-d\TH:i:s\Z' ),'Action' => 'SendSms','TemplateCode' => $this->templateCode,'PhoneNumbers' => $mobile,//'TemplateParam' => '{"code":"' . $verify_code . '"}''TemplateParam' => '{"time":"1234"}' //更换为⾃⼰的实际模版);//var_dump($params);die;// 计算签名并把签名结果加⼊请求参数$params ['Signature'] = $this->computeSignature ( $params, $this->accessKeySecret );// 发送请求(此处作了修改)//$url = 'https:///?' . http_build_query ( $params );$url = '/?' . http_build_query ( $params );$ch = curl_init ();curl_setopt ( $ch, CURLOPT_URL, $url );curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, FALSE );curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, FALSE );curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );curl_setopt ( $ch, CURLOPT_TIMEOUT, 10 );$result = curl_exec ( $ch );curl_close ( $ch );$result = json_decode ( $result, true );//var_dump($result);die;if (isset ( $result ['Code'] )) {$this->error = $this->getErrorMessage ( $result ['Code'] );return false;}return true;}/*** 获取详细错误信息** @param unknown $status*/public function getErrorMessage($status) {// 阿⾥云的短信乱⼋七糟的(其实是⽤的阿⾥⼤于)// https:///doc2/apiDetail?spm=a3142.7629140.1.19.SmdYoA&apiId=25450 $message = array ('InvalidDayuStatus.Malformed' => '账户短信开通状态不正确','InvalidSignName.Malformed' => '短信签名不正确或签名状态不正确','InvalidTemplateCode.MalFormed' => '短信模板Code不正确或者模板状态不正确','InvalidRecNum.Malformed' => '⽬标⼿机号不正确,单次发送数量不能超过100','InvalidParamString.MalFormed' => '短信模板中变量不是json格式','InvalidParamStringTemplate.Malformed' => '短信模板中变量与模板内容不匹配','InvalidSendSms' => '触发业务流控','InvalidDayu.Malformed' => '变量不能是url,可以将变量固化在模板中');if (isset ( $message [$status] )) {return $message [$status];}return $status;}}调⽤⽅法://⽣成验证码$mobile = 'xxxxxxx';$code = rand ( 1000, 9999 );//发送短信$sms = new Sms();//测试模式$status = $sms->send_verify($mobile, $code); if (!$status) {echo$sms->error;}。
中国移动短信网关接口协议(CMPP-mark)V
中国移动通信企业标准QB-╳╳-╳╳╳-╳╳╳╳中国移动通信互联网短信网关接口协议C h i n a M o b i l e P o i n t t o P o i n t版本号: 3.0.0╳╳╳╳-╳╳-╳╳发布╳╳╳╳-╳╳-╳╳实施中国移动通信集团公司发布目录1 范围 (1)2 引用标准 (1)3 术语和定义 (1)4 网络结构 (2)5 CMPP功能概述 (3)6 协议栈 (3)7 通信方式 (3)7.1 长连接 (4)7.2 短连接 (6)7.3 本协议涉及的端口号 (6)7.4 交互过程中的应答方式 (7)8 消息定义 (7)8.1 基本数据类型 (7)8.2 消息结构 (7)8.3 消息头格式(Message Header) (8)8.4 业务提供商(SP)与互联网短信网关(ISMG)间的消息定义 (8)8.4.1 SP请求连接到ISMG(CMPP_CONNECT)操作 (8)8.4.1.1 CMPP_CONNECT消息定义(SP→ISMG) (8)8.4.1.2 CMPP_CONNECT_RESP消息定义(ISMG → SP) (9)8.4.2 SP或ISMG请求拆除连接(CMPP_TERMINATE)操作 (9)8.4.2.1 CMPP_TERMINATE消息定义(SP→ISMG或ISMG → SP) (9)8.4.2.2 CMPP_TERMINATE_RESP消息定义(SP→ISMG或ISMG → SP)98.4.3 SP向ISMG提交短信(CMPP_SUBMIT)操作 (10)8.4.3.1 CMPP_SUBMIT消息定义(SP→ISMG) (10)8.4.3.2 CMPP_SUBMIT_RESP消息定义(ISMG → SP) (11)8.4.4 SP向ISMG查询发送短信状态(CMPP_QUERY)操作 (12)8.4.4.1 CMPP_QUERY消息的定义(SP→ISMG) (12)8.4.4.2 CMPP_QUERY_RESP消息的定义(ISMG →SP) (13)8.4.5 ISMG向SP送交短信(CMPP_DELIVER)操作 (13)8.4.5.1 CMPP_DELIVER消息定义(ISMG→SP) (13)8.4.5.2 CMPP_DELIVER_RESP消息定义(SP → ISMG) (16)8.4.6 SP向ISMG发起删除短信(CMPP_CANCEL)操作 (17)8.4.6.1 CMPP_CANCEL消息定义(SP → ISMG) (17)8.4.6.2 CMPP_CANCEL_RESP消息定义(ISMG → SP) (17)8.4.7 链路检测(CMPP_ACTIVE_TEST)操作 (17)8.4.7.1 CMPP_ACTIVE_TEST定义(SP → ISMG或ISMG→SP) (17)8.4.7.2 CMPP_ACTIVE_TEST_RESP定义(SP → ISMG或ISMG→SP) (17)8.5 互联网短信网关(ISMG)之间的消息定义 (17)8.5.1 源ISMG请求连接到目的ISMG(CMPP_CONNECT)操作 (17)8.5.2 源ISMG请求拆除到目的ISMG的连接(CMPP_TERMINATE)操作 (18)8.5.3 链路检测(CMPP_ACTIVE_TEST)操作 (18)8.5.4 源ISMG向目的ISMG转发短信(CMPP_FWD)操作 (18)8.5.4.1 CMPP_FWD定义(ISMG→ ISMG) (18)8.5.4.2 CMPP_FWD_RESP定义(ISMG→ ISMG) (21)8.6 互联网短信网关(ISMG)与汇接网关(GNS)之间的消息定义 (22)8.6.1 ISMG请求连接到GNS或GNS请求连接到ISMG(CMPP_CONNECT)操作228.6.2 ISMG请求拆除到GNS的连接或GNS请求拆除到ISMG的连接(CMPP_TERMINATE)操作 (22)8.6.3 ISMG向汇接网关查询MT路由(CMPP_MT_ROUTE)操作 (22)8.6.3.1 CMPP_MT_ROUTE消息定义(ISMG→GNS) (22)8.6.3.2 CMPP_MT_ROUTE_RESP消息定义(GNS → ISMG) (22)8.6.4 ISMG向汇接网关查询MO路由(CMPP_MO_ROUTE)操作 (23)8.6.4.1 CMPP_MO_ROUTE消息定义(ISMG→GNS) (23)8.6.4.2 CMPP_MO_ROUTE_RESP消息定义(GNS → ISMG) (23)8.6.5 ISMG向汇接网关获取MT路由(CMPP_GET_MT_ROUTE)操作 (24)8.6.5.1 CMPP_GET_MT_ROUTE消息定义(ISMG→GNS) (24)8.6.5.2 CMPP_GET_ ROUTE_RESP消息定义(GNS → ISMG) (25)8.6.6 SMG向汇接网关获取MO路由(CMPP_GET_MO_ROUTE)操作 (25)8.6.6.1 CMPP_GET_MO_ROUTE消息定义(ISMG→GNS) (25)8.6.6.2 CMPP_GET_MO_ROUTE_RESP消息定义(GNS → ISMG) (26)8.6.7 ISMG向汇接网关更新MT路由(CMPP_MT_ROUTE_UPDATE)操作 (27)8.6.7.1 CMPP_MT_ROUTE_UPDATE消息定义(ISMG→GNS) (27)8.6.7.2 CMPP_MT_ROUTE_UPDATE_RESP消息定义(GNS → ISMG) (27)8.6.8 ISMG向汇接网关更新MO路由(CMPP_MO_ROUTE_UPDATE)操作288.6.8.1 CMPP_MO_ROUTE_UPDATE消息定义(ISMG→GNS) (28)8.6.8.2 CMPP_MO_ROUTE_UPDATE_RESP消息定义(GNS → ISMG) (29)8.6.9 汇接网关向ISMG更新MT路由(CMPP_PUSH_MT_ROUTE_UPDATE)操作298.6.9.1 CMPP_PUSH_MT_ROUTE_UPDATE消息定义(GNS→ISMG) (29)8.6.9.2 CMPP_PUSH_MT_ROUTE_UPDATE_RESP消息定义(ISMG →GNS)308.6.10 汇接网关向ISMG更新MO路由(CMPP_PUSH_MO_ROUTE_UPDATE)操作 (30)8.6.10.1 CMPP_PUSH_MO_ROUTE_UPDATE消息定义(GNS→ISMG) (30)8.6.10.2 CMPP_PUSH_MO_ROUTE_UPDATE_RESP消息定义(ISMG →GNS)318.7 系统定义 (31)8.7.1 Command_Id定义 (31)8.7.2 错误码使用说明 (32)8.7.3 ISMG与GNS之间消息使用的错误码定义 (33)8.7.4 GNS上路由信息的Route_Id的编号规则 (34)9 附录1 短信群发功能的实现 (35)10 附录2 GNS协议目前实现说明 (35)11 修订历史 (37)前言本规范规定了移动梦网短信业务开展过程中各网元(包括ISMG、GNS和SP)之间的消息类型和定义,目前为3.0.0版本,是在原来2.1.0版本的基础上进行修订而成。
http短信接口 (2)
http短信接口
HTTP短信接口是一种通过HTTP协议发送和接收短信的方式。
它可以实现在互联网上用HTTP通信协议发送短信,并且可以接收短信服务商返回的状态报告。
使用HTTP短信接口发送短信,通常需要提供以下参数:
1. 请求URL:短信服务商提供的API接口地址。
2. 账号和密码:短信服务商提供的账号和密码,用于进行身份验证。
3. 手机号码:短信的接收者手机号码。
4. 短信内容:需要发送的短信内容。
发送短信时,需要将以上参数以指定的格式组装成HTTP 请求,发送到短信服务商的接口地址。
短信服务商接收到请求后,会根据提供的账号和密码进行身份验证,并将短
信内容发送给指定的手机号码。
发送成功后,短信服务商会返回一个接口响应,通知发送结果。
需要注意的是,不同的短信服务商可能有不同的HTTP请求参数和参数格式,具体使用方法需要参考短信服务商提供的接口文档或示例代码。
畅卓chanzor短信接口说明
客户接口说明客户接口说明 1第一章发送接口 21.1 请求地址 21.2参数说明 21.3返回值 2第二章余额及已发送量查询接口 32.1 请求地址 32.2参数说明 32.3返回值 3第三章非法关键词查询 43.1 请求地址 43.2参数说明 43.3返回值 4第四章状态报告接口 54.1 请求地址 54.2参数说明 54.3返回值 54.4错误返回值——状态报告请求错误返回格式及对应值 6第五章上行接口 65.1 请求地址 65.2参数说明 65.3返回值 75.4错误返回值——回复请求错误返回格式及对应值 7接口说明:客户接口部分提供http url方式的接口,根据客户需求可以提供相应接口,接口编码方式采用统一的UTF-8接口地址 :8001第一章发送接口1.1 请求地址请求地址是客户接口程序调用时请求的url地址,采用的是http post 接口,地址是:8001/sms.aspx 对应UTF-8:8001/smsGBK.aspx 对应GB2312入口地址一般不会发生变化,当发生变化的时候,会通知接口用户1.2参数说明:8001/sms.aspx:8001/smsGBK.aspx例如::8001/sms.aspx?action=send&account=账号&password=密码&mobile=手机号&content=内容&sendTime=1.3返回值在接收到客户端发送的http请求后,返回以xml的方式返回处理结果。
格式为:<?xml version="1.0" encoding="utf-8" ?><returnsms><returnstatus>status</returnstatus> ---------- 返回状态值:成功返回Success 失败返回:Faild<message>message</message> ---------- 返回信息:见下表<remainpoint> remainpoint</remainpoint> ---------- 返回余额<taskID>taskID</taskID> ----------- 返回本次任务的序列ID<successCounts>successCounts</successCounts> --成功短信数:当成功后返回提交成功短信数</returnsms>第二章余额及已发送量查询接口2.1 请求地址请求地址是客户接口程序调用的时候请求的url地址,采用的是http post 接口,地址是:8001/sms.aspx:8001/smsGBK.aspx入口地址一般不会发生变化,当发生变化的时候,会通知接口用户2.2参数说明例如:action=overage&userid=&account=账号&password=密码2.3返回值<?xml version="1.0" encoding="utf-8" ?><returnsms><returnstatus>status</returnstatus>-------返回状态值:成功返回Success 失败返回:Faild<message>message</message>--------------返回信息提示:见下表<payinfo>payinfo</payinfo>--------------返回支付方式后付费,预付费<overage>overage</overage>-------------返回余额<sendTotal>sendTotal</sendTotal>----返回总点数当支付方式为预付费是返回总充值点数</returnsms>第三章非法关键词查询3.1 请求地址请求地址是客户接口程序调用的时候请求的url地址,采用的是http post 接口,地址是:8001/sms.aspx:8001/smsGBK.aspx入口地址一般不会发生变化,当发生变化的时候,会通知接口用户3.2参数说明例如:action=checkkeyword&userid=&account=账号&password=密码&content=内容3.3返回值<?xml version="1.0" encoding="utf-8" ?><returnsms><message>message</message>--------------返回信息提示:见下表</returnsms>第四章状态报告接口4.1 请求地址请求地址是客户接口程序调用的时候请求的url地址,采用的是http post 接口,地址是:8001/statusApi.aspx入口地址一般不会发生变化,当发生变化的时候,会通知接口用户4.2参数说明例如:action=query&userid=&account=账号&password=密码4.3返回值<?xml version="1.0" encoding="utf-8" ?><returnsms><statusbox><mobile>134********</mobile>-------------对应的手机号码<taskid>1212</taskid>-------------同一批任务ID<status>10</status>---------状态报告----10:发送成功,20:发送失败<receivetime>2011-12-02 22:12:11</receivetime>-------------接收时间<errorcode>DELIVRD</errorcode>-上级网关返回值,不同网关返回值不同,仅作为参考</statusbox>。
短信接口的接口标准
短信接口的接口标准
短信接口的接口标准主要包括以下几种:
1. CMPP:这是中国移动的短信通信协议,采用短信网关向中国移动发送短消息。
2. SMGP:这是中国电信的短信通信协议,采用短信网关向中国电信发送短消息。
3. SGIP:这是中国联通的短信通信协议,采用短信网关向中国联通发送短消息。
4. SMPP:这是一种通用的短信通信协议,可以用于向任何移动网络发送短消息。
5. ISAGM:这是中国联通的一种高级短信通信协议,可以实现点对点、企业级应用等高级功能。
这些接口标准都是基于短信网关和移动网络之间的通信协议,用于实现短信的发送和接收。
具体使用哪种接口标准,需要根据不同的需求和场景选择。
对接阿里云短信接口
对接阿⾥云短信接⼝阿⾥云短信服务简单说明之前使⽤过阿⾥的阿⾥⼤于这个短信代发服务,今天使⽤的是阿⾥云最新的⼀个短信代发服务,⽂档真的有点不详细,加上⽹上的博客也太少了,⼏经蹉跎还是把它给搓出来了,供⼤家学习阿⾥云短信⾸先没⽤过的玩家需要去阿⾥云注册账户,然后开启两个私钥,这两个密钥是我们的必需品然后去申请签名和模版,这个也是我们的必需品现在不怎么好申请了,建议申请理由都写成个⼈项⽬测试啥的,过不了就多申请⼏次,我申了三次才ojbk!上⾯两个环境已经装备好了的你,怎么可以吃霸王餐呢?当然是充钱进去呀,找到充值⼊⼝,随便充点钱进去 (⼀块钱其实就可以了!哭)官⽅⽂档阅读官⽅提供了⽂档说明、ApiDemo、⼊参出参说明,这个还是⽐较详细的,但你以为你就能跑起来的话,我信你个⿁哦!唯⼀需要注意的地⽅就是上图中我圈出来的这个地⽅,它的值是我们发送验证码的值,是⼀个Json格式:{"code":"值"}⾄于⼊参和出参可以参考官⽅⽂档,很多Api都变化了,其实我也记不起以前的api了,哈哈哈哈.....Java⼯程创建⼀个SpringBoot⼯程,按部就班。
最终的项⽬⽬录结构为:pom.xml<dependencies><!--@ConfigurationProperties 注解所需,不给报错--><dependency><groupId> org.springframework.boot </groupId><artifactId> spring-boot-configuration-processor </artifactId><optional> true </optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.1.6.RELEASE</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--阿⾥短信官⽹提供的依赖--><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.0.3</version></dependency><!--MQ的依赖,本列⼦不是⽤MQ--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><!--Json转换⼯具类--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.30</version></dependency></dependencies>⽇志的配置⽂件,这就不放了,SpringBoot的配置⽂件为application.yml server:port: 8888spring:application:name: sms_testccl:sms:accessKeyId: LTAI4Fh****X41J5UxcrBA7A # accessKeyIdaccessKeySecret: qnF****mF4aM4f2aNoCOzLxkzyNRP8 # AccessKeySecret signName: 个⼈博客 # 签名名称verifyCodeTemplate: SMS_175051234 # 模板编号.springframework.boot.autoconfigure: ERROR配置类package com.test.sms.config;import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import ponent;/***@*************************** @Description //装载配置⽂件的属性类* @Date 2019/10/7* @Param* @return**/@Data@Component@ConfigurationProperties(prefix = "ccl.sms")public class SmsConfig {String accessKeyId;String accessKeySecret;String signName;String verifyCodeTemplate;}被封装的阿⾥云短信接⼝package com.test.sms.utils;import monRequest;import monResponse;import com.aliyuncs.DefaultAcsClient;import com.aliyuncs.IAcsClient;import com.aliyuncs.exceptions.ClientException;import com.aliyuncs.exceptions.ServerException;import com.aliyuncs.http.MethodType;import com.aliyuncs.profile.DefaultProfile;import com.test.sms.config.SmsConfig;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.context.properties.EnableConfigurationProperties;import ponent;/***@*************************** @Description 封装阿⾥提供的短信发送接⼝* @Date 2019/10/7* @Param* @return**/@Component@EnableConfigurationProperties(SmsConfig.class)public class SendUtils {@Autowiredprivate SmsConfig smsConfig;//发送短信的⽅法public CommonResponse send(String phone,String code)throws ClientException {//可⾃助调整超时时间System.setProperty(".client.defaultConnectTimeout", "10000");System.setProperty(".client.defaultReadTimeout", "10000");DefaultProfile profile = DefaultProfile.getProfile("default",smsConfig.getAccessKeyId() , smsConfig.getAccessKeySecret()); IAcsClient client = new DefaultAcsClient(profile);//封装请求对象CommonRequest request = new CommonRequest();request.setDomain("");request.setAction("SendSms");request.setVersion("2017-05-25");request.setMethod(MethodType.POST);//确定发送的电话号码和验证码request.putQueryParameter("PhoneNumbers", phone); //这⾥也得注意,对应的值是Json格式的字符串,不然就是⼀杯茶⼀根烟,⼀个bug玩⼀天request.putQueryParameter("TemplateParam", "{\"code\":\"" + code + "\"}");//确定是的模版和签名request.putQueryParameter("SignName", smsConfig.getSignName());request.putQueryParameter("TemplateCode", smsConfig.getVerifyCodeTemplate());//发起调⽤try {CommonResponse response = client.getCommonResponse(request);return response;} catch (ServerException e) {e.printStackTrace();} catch (ClientException e) {e.printStackTrace();}return null;}}servicepackage com.test.sms.service;import com.alibaba.fastjson.JSON;import monResponse;import com.aliyuncs.exceptions.ClientException;import com.test.sms.utils.SendUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.util.Map;@Servicepublic class SmsService {static final Logger LOGGER = LoggerFactory.getLogger(SendUtils.class);@Autowiredprivate SendUtils sendUtils;public CommonResponse send(String phone,String code) throws ClientException {CommonResponse response = sendUtils.send(phone,code);if (response != null && response.getHttpStatus() == 200){String data = response.getData();Map map = JSON.parseObject(data, Map.class);("短信发送状态:{}" + phone + "=====" + code + "=====" + map.get("Message"));}//以下为Api的测试代码,不做理会即可boolean success = response.getHttpResponse().isSuccess(); //trueint status = response.getHttpResponse().getStatus(); //200int httpStatus = response.getHttpStatus(); //200return response;}}SpringMVCpackage com.test.sms.controller;import monResponse;import com.aliyuncs.exceptions.ClientException;import com.test.sms.service.SmsService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.util.Random;/***@*************************** @Description* @Date 20:09 2019/10/7* @Param* @return**/@RestController@RequestMapping("/sms")public class cmsController {@Autowiredprivate SmsService smsService;@GetMapping("/send/{number}")public CommonResponse cmsSend(@PathVariable String number) throws ClientException {//随机产⽣6位验证码StringBuffer code = new StringBuffer();Random random = new Random();for (int i = 0; i<6; i++){int j = random.nextInt(10);code.append(j);}return smsService.send(number,code.toString());}}postman启动更多的数据我们就不看,我们看⼀下关键部位响应结果即可:完!。
22发送短信接口+短信登录接口
22发送短信接⼝+短信登录接⼝⼀、发送短信接⼝user/views.py#django的缓存===直接⽤就可以了===默认缓存到内存中from django.core.cache import cacheclass UserView(ViewSet):@action(methods=['GET'], detail=False, )def send_sms(self, request):phone = request.query_params.get('phone')sms_code = gen_code()#需要保存起来,以后还能拿到===》放到缓存中# res = send_sms_v2(phone, sms_code)res = send_sms_v3(phone, sms_code)print(sms_code)if res:return APIResponse()else:return APIResponse(code=101, msg='发送失败,请稍后再试')补充保存code:⼆、短信登录接⼝# 前端传⼊(post):{mobile:1892322345,code:1234}user/serializer.pyclass MobileSerializer(serializers.ModelSerializer):# code字段不是表的字段,所以需要重写code = serializers.CharField(max_length=5, min_length=4)mobile = serializers.CharField()class Meta:model = Userfields = ['mobile', 'code']def validate(self, attrs):# 1 校验code是否正确self._check_code(attrs)# 2 根据⼿机号查到⽤户user = self._get_user_by_mobile(attrs)# 3 签发tokentoken = self._get_token(user)# 4 把给view⽤的放到context中self.context['token'] = tokenself.context['username'] = ername# self.context['icon']=user.icon # icon的有点问题# 这个地址是服务端地址,服务端地址从request对象中可以取出request.META['HTTP_HOST']request = self.context.get('request')self.context['icon'] = 'http://%s/media/' % request.META['HTTP_HOST'] + str(user.icon)return attrsdef _check_code(self, attrs):code = attrs.get('code')# 取出该⼿机号对应的codemobile = attrs.get('mobile')old_code = cache.get(settings.SMS_CODE_CACHE % mobile)# cache.set(settings.SMS_CODE_CACHE % mobile,'')# 如果是调试模式,有个万能验证码if not old_code == code:raise ValidationError('验证码错误')def _get_user_by_mobile(self, attrs):mobile = attrs.get('mobile')user = User.objects.filter(mobile=mobile).first()if user:return userelse:raise ValidationError('⽤户不存在')def _get_token(self, user):# 根据user获取payloadpayload = jwt_payload_handler(user)# 根据payload得到tokentoken = jwt_encode_handler(payload);return tokenuser/views.pyclass LoginView(GenericViewSet):queryset = User.objects.all()serializer_class = LoginSerializerdef get_serializer_class(self):print(self.action)if self.action == 'mul_login':return self.serializer_classelse:return MobileSerializer@action(methods=['POST'], detail=False, ) # user/login/mobile_logindef mobile_login(self, request):return self._login(request)def _login(self, request):try:# ⽅式⼀# ser=MobileSerializer(data=request.data, context={'request': request})# ⽅式⼆(重写get_serializer_class)ser = self.get_serializer(data=request.data, context={'request': request})ser.is_valid(raise_exception=True) # ⾛序列化类的字段⾃⼰的规则,局部钩⼦和全局钩⼦ token = ser.context.get('token')username = ser.context.get('username')icon = ser.context.get('icon')except Exception as e:raise APIException(str(e))return APIResponse(token=token, username=username, icon=icon)#settings/common_settings.pySMS_CODE_CACHE='sms_code_mobile_%s'cache的使⽤from django.core.cache import cachecache.set(key,value)cache.get(key)。
短信验证码接口服务平台
短信验证码接口服务平台短信接口使用场景:【志晴网络】注册验证码:2511,十分钟有效。
【志晴网络】登录验证码:9803,十分钟有效。
【志晴网络】你正在重置密码,验证码:7525,十分钟有效。
【志晴网络】验证码:526455,十分钟有效。
【志晴网络】尊敬的志晴网络客户:您好!您的订单85678766552已安排顺丰次日达为您配送,快递单号9635433377302,请您保持手机畅通【志晴网络】亲爱的用户,您的包裹已到达广州市,请注意查收。
【志晴网络】登录提醒:你的帐号于2018年9月15日23时13分在上海市尝试登录,已被拦截。
【志晴网络】尊敬的志晴网络用户,您的100元优惠券还有两天即将到期,请及时使用。
短信服务优势:1.稳定安全,多点部署,主力通道+备份通道,规避突发风险,确保发送顺畅;2.拥有一手资源,自主开发的分发系统和资源配置系统,智能路由,高达99%的到达率;3.高性价比,按需付费,无网络及硬件维护成本。
短信验证码/接口:适用于手机APP验证码、订单通知、物流提醒等触发类短信应用。
会员短信平台:CRM客户管理与短信群发短信平台完美结合,提供通讯录管理功能,适用于客户的通知,回访等。
电商短信平台:专门针对移动电子商务,淘宝,天猫,京东,苏宁等产品促销发布。
志晴网络先后获得了由工信部颁发的“中华人民和共国增值电信业务经营许可证”、“中华人民共和国电信与信息服务业务经营许可证”和由工信部批准的“全国三网合一短消息类服务第三方短信平台接入代码使用证书”,不断提升和拓展了志晴网络移动增值服务服务范围和空间,不断为广大中小型企业客户及个人提供方便快捷的短信平台服务。
凌凯 短信接口测评报告
一使用指南
1.在浏览器中输入地址:/
2.输入用户名和密码登录
3.登录成功后进入后台。
4.发送短信
填写发送的号码
写人发送内容
点击提交
短信就发送出去了。
二对凌凯短信接口测评如下:
1.这个接口的代码说前两个基本上是一样的,只是改了类名。对外发布的服务接口都是WebService,对外函数的名称、功能都是一样的。
2.服务器地址都是北京的。
凌凯短信接口服务器地址
3.短信发送速度
凌凯短信接口
发送时间段
条数
收到
时间(秒)
04-07-17:00
1
1
38
04-07-17:10
1
1
46
04-07-17:20
1
1
48
04-07-17:30
1
1
42
04-07-17:40
1
1
43
04-07-17:50
1
1
47
4.发送字数的限制
凌凯短信接口
字数没有上限,但是计费是长短信是67字短信接口
发送10条全部收到,无丢失
避免短信接口被黑客盗刷攻击的方法
避免短信接口被黑客盗刷攻击的方法随着短信应用越来越普及,短信接口被黑客盗刷攻击的情况也屡有
发生。
为了保护用户的安全、防止账号被盗刷,需要采取相应措施来
保障短信接口的安全性。
以下是一些有效的方法:
1.采用高强度密码
短信接口的密码必须是高强度的,密码长度应该至少为8位,包含大
写字母、小写字母、数字和特殊字符,尽可能复杂。
此外,密码应该
经常更换,至少每三个月更换一次。
2.加强管理
所有操作人员应该经过必要的培训,加强对账号管理的监控。
为了避
免泄漏,不要随便将密码告诉其他人。
3.控制访问权限
为不同的人员设置不同的访问权限,限制其对短信接口的使用。
同时
要定期检查账号的使用情况,如果发现异常情况及时处理。
4.使用身份认证技术
可以把短信接口与身份证件一起使用,在发送短信之前进行身份认证,这样可以有效地避免黑客盗刷攻击。
5.使用SSL加密技术
SSL加密技术可以确保短信信息的安全传输,可以有效地防止黑客对
短信接口进行攻击。
总之,短信接口的安全防护工作需要全方位、多角度考虑,只有采用多种措施建立起完善的安全机制,才能够有效地避免黑客盗刷攻击的风险。
PB调用短信接口
pb调用短信接口
一般短信接口有http,webservice,db,api等几种格式,他用的是http。
感觉很简单,他说用ole容器,插入对象,调用,可惜,在PB9下,总是非法退出,闹的想装个PB11看看。
至少5年没用过PB了。还真得想想。
http的接口只要在浏览器中输入对应的url,就已经调用成功,那就是执行一次对应url的过程,也没必要非用ole。况且,ole这东西在pb下很不稳定。
ls_url = "http://ip:port/sms/http/SendSms?Account=004&Password=33c678db81ecd3daed05bb4520a59f13&Content=这是个测试的短信&Phone=13012345678"
li_rc = linet_base.GetURL(ls_url, iir_msgbox)
பைடு நூலகம்
如果按我所想,无论什么方式,只要有一次url的访问就可以。考虑下用pb的internetresult 这个内置对象,并测试如下:
建个对象n_ir_msgbox,继承自internetresult,直接在internetdata函数中返回1(这一步很关键,必须有个返回值)
建立窗口,定义实例变量n_ir_msgbox iir_msgbox
增加按钮,click事件中:
inet linet_base
String ls_url
integer li_rc
iir_msgbox = CREATE n_ir_msgbox
if GetContextService("Internet", linet_base) = 1 THEN
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中国移动通信
互联网短信网关接口协议
C h i n a M o b i l e P o i n t t o P o i n t
版本号:3.0.0
1通信方式 (3)
2消息定义 (4)
2.1 基本数据类型 (4)
2.2 消息结构 (4)
2.3 消息头格式(Message Header) (4)
2.4 集团用户(EC)与短信服务平台(SSP)间的消息定义 (4)
2.4.1 EC请求连接到SSP(SSP_CONNECT)操作 (4)
2.4.2 EC或SSP请求拆除连接(SSP_TERMINATE)操作 (6)
2.4.3 EC向SSP提交短信(SSP_SUBMIT)操作 (6)
2.4.4 SSP向EC提交短信(SSP_DELIVER)操作 (8)
2.4.5 SSP向EC提交账户余额(SSP_REMAIN_NOTIFY)操作 (9)
2.4.6 SSP向EC送交状态报告(SSP_REPORT )操作 (9)
2.4.7 链路检测(SSP_ACTIVE_TEST)操作 (11)
3 Command_Id定义 (11)
4API说明 (12)
1通信方式
通信双方以客户-服务器方式建立TCP连接,用于双方信息的相互提交。
当信道上没有数据传输时,通信双方应每隔时间C发送链路检测包以维持此连接,当链路检测包发出超过时间T后未收到响应,应立即再发送链路检测包,再连续发送N-1次后仍未得到响应则断开此连接。
参数C、T、N原则上应可配置,现阶段建议取值为:C=3分钟,T=60秒,N=3。
网关与EC之间、网关之间的消息发送后等待T秒后未收到响应,应立即重发,再连续发送N-1次后仍未得到响应则停发。
现阶段建议取值为:T=60秒,N=3。
消息采用并发方式发送,加以滑动窗口流量控制,窗口大小参数W可配置,现阶段建
议为16,即接收方在应答前一次收到的消息最多不超过16条。
拆除TCP连接
2消息定义
2.1 基本数据类型
2.2 消息结构
2.3 消息头格式(Message Header)
2.4 集团用户(EC)与短信服务平台(SSP)间的消息定义
EC为客户端,向作为服务器端的SSP发起连接请求,在通过身份验证之后EC与SSP 之间方可进行数据传输。
2.4.1 EC请求连接到SSP(SSP_CONNECT)操作
SSP_CONNECT操作的目的是EC向SSP注册作为一个合法EC身份,若注册成功后即建立了应用层的连接,此后EC可以通过此连接发送短信。
SSP以SSP_CONNECT_RESP消息响应SP的请求。
2.4.1.1 SSP_CONNECT消息定义(EC→SSP)
2.4.1.2 SSP_CONNECT_RESP消息定义(SSP→ EC)
2.4.2 EC或SSP请求拆除连接(SSP_TERMINATE)操作
SSP_TERMINATE操作的目的是EC或SSP基于某些原因决定拆除当前的应用层连接而发起的操作。
此操作完成后EC与SSP之间的应用层连接被释放,此后EC若再要与ISMG通信时应发起SSP_CONNECT操作。
SSP或EC以SSP_TERMINATE_RESP消息响应请求。
2.4.2.1 SSP_TERMINATE消息定义(EC→SSP或SSP → EC)
无消息体。
2.4.2.2 SSP_TERMINATE_RESP消息定义(EC→SSP或SSP → EC)
无消息体。
2.4.3 EC向SSP提交短信(SSP_SUBMIT)操作
SSP_SUBMIT操作的目的是EC在与ISMG建立应用层连接后向ISMG提交短信。
ISMG以SSP_SUBMIT_RESP消息响应。
2.4.
3.1 SSP_SUBMIT消息定义(EC→SPP)
2.4.
3.2 SSP_SUBMIT_RESP消息定义(SSP EC)
2.4.4 SSP向EC提交短信(SSP_DELIVER)操作
SSP_DELIVER操作的目的是SSP把从行业网关转发来的短信送交EC,EC以SSP_DELIVER_RESP消息回应。
2.4.4.1 SSP_DELIVER消息定义(SSP→EC)
2.4.4.2 SSP_DELIVER_RESP消息定义(EC → SSP)
2.4.5 SSP向EC提交账户余额(SSP_REMAIN_NOTIFY)操作
2.4.5.1 SSP_REMAIN_NOTIFY消息定义(SSP→EC)
2.4.5.2 SSP_REMAIN_NOTIFY_RESP消息定义(EC → SSP)
2.4.6 SSP向EC送交状态报告(SSP_REPORT )操作
2.4.6.1 SSP_REPORT消息定义(SSP→EC)
状态报告表示SSP已提交信息到行业网关
Stat字段定义
2.4.6.2 SSP_REPORT_RESP消息定义(EC→ SSP)
2.4.7 链路检测(SSP_ACTIVE_TEST)操作
本操作仅适用于通信双方采用长连接通信方式时用于保持连接。
2.4.7.1 SSP_ACTIVE_TEST定义(EC→ SSP或SSP→EC)
无消息体。
2.4.7.2 SSP_ACTIVE_TEST_RESP定义(EC → SSP或SSP→EC)无消息体。
3 Command_Id定义
中国移动通信集团公司发布
4API说明
详见API测试代码
中国移动通信集团公司发布。