短信平台(电信)
通信方式
采用http1.1通信方式,数据以post方式提交
http 头设置:application/json
签名
采用MD5加密方式, 源字符串采用字段拼接方式
签名中appSecret是平台分配密码
签名方法:
如:String sign=md5(param1param2param3…paramN)
发送接口
地址: http://ip:port/api/sms/air/send
描述: 客户平台==>大业务平台
1. 请求方式post; http头设置application/json; 字符集UTF-8
2. http响应数据为json格式
请求参数:
字段 | 名称 | 类型 | 说明 |
appKey | 账户名 | String(32) | 统一分配 |
timestamp | 时间戳 | long | 毫秒值 自UTC时间1970-1-1起的毫秒值 |
mobile | 用户号码 | String(11,11999) | 多个提交逗号分隔; 一次最多1000个号码 |
content | 内容长度 | String(402) | 短消息内容长度,67*6条 |
spNumber | 扩展号码 | String(10) | 扩展长号码 |
sendTime | 定时时间 | String(0,14) | yyyyMMddHHmmss 定时发送时间, 默认为空值 |
reportUrl | 报告回调地址 | String(100) | 状态报告回调的URL地址 默认为空 若使用查询接口(接口6)方式,为空值 |
moUrl | 上行地址 | String(100) | 用户上行URL地址 默认空 |
attach | 附加值字段 | String(100) | 附加数据, 客户根据自身业务逻辑添加 默认为空值 |
sign | 数字签名 | String(32) | sign=MD5(appKey+timestamp+mobile+content+spNumber+sendTime+appSecret) 顺序以此为准 其中appSecret为平台分配账户时提供 |
响应参数:
字段 | 名称 | 类型 | 说明 |
status | 状态码 | int(4) | 见附表
其他失败 |
message | 消息描述 | String(32) | |
taskId | 任务ID | long(8) |
数据样例:
请求json:
{ "appKey": "10001", "timestamp": "1546589422955", "mobile": "13800138001", "content": "【签名测试】这是一条测试短信", "spNumber": "234", "sendTime": "", "reportUrl": "", “moUrl”:””, "attach": "", "sign": "4b38b34fb70fcc4c49e180fbd5a9854b" } |
响应Json:
{ "message": "提交成功", "taskId": 6468846578735812608, "status": 1 } 或失败 { "message": "提交数据错误", "status": 2 } |
/*** 发送短信** @param smsModule 模块名称* @param phone 手机号* @param receiveName 接收人姓名* @param message 发送内容* @return*/public ActionResult sendSms(String smsModule, String phone, String receiveName, String message) {Request request = null;ActionResult actionResult = ActionResult.fail("发送短信失败");LogSmsMessageVo logSmsMessageVo = new LogSmsMessageVo();String status = "1";try {//平台提供的appKey appKey = x.getDictValue();//平台提供的appSecret appSecret = x.getDictValue();//平台提供的发送短信urlsendUrl = x.getDictValue();} catch (Exception e) {log.error("查询发送短信参数异常,异常信息" + e);}Response resp = null;String taskId = "";String sendStat = "";try {request = Request.newHttpRequestBuilder().uri(sendUrl).timeout(5000).charset("utf-8").method(Request.POST).contentType(Request.ContentType.JSON).build();//1. 构建数据包对象SendSmsEntity sendEntity = this.buildSendEntity(phone, message);//2. 转化对象为json字符串数据String data = JSONObject.toJSONString(sendEntity);//3. 字符串url编码,防止特殊字符被客户端强行改变,譬如+会被浏览器或者其他客户端变更为空格String encodeData = URLEncoder.encode(data, "UTF-8");//4. 发送resp = request.send(sendUrl, encodeData);log.info("发送短信,手机号:" + phone + ",发送内容:" + message + ",返回结果:" + resp.content());JSONObject jsonObject = JSONObject.parseObject(resp.content());if (ObjectUtils.isNotEmpty(jsonObject)) {actionResult.setMsg(jsonObject.get("message") + "");actionResult.setData(jsonObject.get("message") + "");}//解析发送结果if (200 == resp.status()) {if ("1".equals(jsonObject.get("status") + "")) {log.info("发送短信成功");status = "0";sendStat = "2";taskId = jsonObject.get("taskId") + "";actionResult.setCode(200);} else {//数据提交失败,发送必然失败sendStat = "0";log.info("发送短信失败,失败原因" + jsonObject.get("message"));}} else {if (resp.content() != null) {taskId = jsonObject.get("taskId") + "";log.info("发送短信返回失败,返回内容" + resp.content());} else {log.info("发送短信失败,返回响应内容为空");}sendStat = "0";}} catch (Exception e) {log.error("发送短信异常,异常信息" + e.getMessage());} finally {request.release();}return actionResult;}
查询报告接口
地址: http://ip:port/api/sms/air/report
描述:客户平台 ==> 大业务平台
- 查询当前账户套餐余量
- 客户通过接口调用主动查询方式,获取数据,
- 如实现【回调报告接口2】可不实现该接口。
- 请求数据 JSONObject
- 响应数据 JSONObject
- 每次接口调用都是获得最新的数据,旧数据不再缓存。
-
请求:
字段
名称
类型
说明
appKey
接入账户
String(32)
平台分配
sign
签名
String(32)
md5(appKey+ appSecret)
appSecret为平台分配接入账户的密钥
数据响应:
字段
名称
类型
说明
status
状态码
int(4)
1 – 提交成功;其他-失败
message
错误描述
String(32)
错误描述
data
数据字段
JSONArray
报告数据放入此字段中
data内容描述:
字段
名称
类型
说明
id
数据包标识
String(20)
固定值:report
taskId
任务ID
long(8)
任务ID+用户号码=唯一性
batchNo
批次序号
int
默认1,
当提交的为长短信时,该字段匹配内容序号;如一条短信分隔为3条,该字段范围1,2,3
mobile
用户号码
String(20)
用户号码
stat
状态码
int(4)
1 – 成功;其他-失败
statMsg
状态描述
String(32)
状态描述
attach
附加值字段
数据样例:
请求:
{
"appKey": "90001",
"sign": "2cff25eaa14b0f5c54a4f56e26e7c517"
}
响应:
{
"data": [
{
"batchNo": 1,
"stat": 1,
"statMsg": "成功",
"mobile": "13800138000",
"id": "report",
"attach": "",
"taskId": 6479258452121862144
},
{
"batchNo": 1,
"stat": 1,
"statMsg": "成功",
"mobile": "13800138000",
"id": "report",
"attach": "",
"taskId": 6479266612358397952
}],
"message": "提交成功",
"status": 1
}
回调报告接口
描述:大业务平台 ==> 客户平台
- 平台根据send接口reportUrl字段设定的URL地址,提交报告数据给客户
- 请求数据JSONArray
- 响应数据 JSONObject
请求接口:
字段 | 名称 | 类型 | 说明 |
id | 数据包标识 | String(20) | 固定值:report |
taskId | 任务ID | long(8) | 任务ID+用户号码=唯一性 |
batchNo | 批次序号 | int | 默认1, 当提交的为长短信时,该字段匹配内容序号;如一条短信分隔为3条,该字段范围1,2,3 |
mobile | 用户号码 | String(20) | 用户号码 |
stat | 状态码 | int(4) | 1 – 成功;其他-失败 |
statMsg | 状态描述 | String(32) | 状态描述 |
attach | 附加值字段 | String(100) | 请求时携带客户数据字段 |
响应:
字段 | 名称 | 类型 | 说明 |
status | 状态码 | int(4) | 1 – 成功接收;其他-失败 失败尝试3次发送,超过3次放弃 |
数据样例:
请求:
[ { "batchNo": 1, "stat": 1, "statMsg": "成功", "mobile": "13800138000", "id": "report", "attach": "", "taskId": 6479258452121862144 }, { "batchNo": 1, "stat": 1, "statMsg": "成功", "mobile": "13800138000", "id": "report", "attach": "", "taskId": 6479266612358397952 }] |
响应:
{ "status": 1, //状态成功 } |
相关文章:
短信平台(电信)
通信方式 采用http1.1通信方式,数据以post方式提交 http 头设置:application/json 签名 采用MD5加密方式, 源字符串采用字段拼接方式 签名中appSecret是平台分配密码 签名方法: 如:String signmd5(param1param2param3…paramN) …...
11.STM32F4 输入捕获
一、输入捕获概念 输入捕获模式可以用来测量脉冲宽度或者测量频率。我们以测量脉宽为例,用一个简图来说明输入捕获的原理,如图1所示: 图1:输入捕获脉宽测量原理图 STM32F4的输入捕获,简单的说就是通过检测TIMx_CHx上的…...
opencv#30 线性滤波
均值滤波原理 均值滤波步骤 Step1:求和。 Step2:计算平均值。 所谓均值滤波,就是求平均值的意思。我们假设在一个3*3的范围内有一个图像,其中这个图像每一个像素可能含有噪声,也可能不含噪声,我们是不知道的,因此通…...
如何使用iPhone或iPad上的二维码共享Wi-Fi密码?这里有详细步骤
你有没有想过在不泄露网络密码的情况下与客人共享你的家庭或工作Wi-Fi?你肯定不是第一个这样想的人,我们很高兴地通知你,多亏了以下这个的变通方法,你现在可以使用iPhone或iPad做到这一点。 通常,如果你想让其他人访问网络,你需要共享你的Wi-Fi密码。苹果通过引入与任何…...
在游戏里开公司!基于ERNIE SDK的多智能体游戏应用
在虚拟世界有一座神奇的办公室,当你输入你的创业方向,办公室的智慧打工人们将团结合作,为你的项目勤劳奔走,并在过程中,把日报周报都写好,让你随时掌握项目进度和最终成果!该项目基于ERNIE SDK开…...
【SpringCloud Nacos】 微服务治理介绍及Nacos引入初体验
文章目录 前言服务治理介绍什么是服务治理1、服务发现2、服务配置3、服务健康检测 常见的注册中心ZookeeperEurekaConsulNacos Nacos 简介Nacos 实战入门搭建nacos环境1、安装nacos2、配置nacos3、访问nacos 将商品微服务注册到 nacos1、在 pom. xml 中添加 nacos 的依赖2、在主…...
JavaEE进阶(6)SpringBoot 配置文件(作用、格式、properties配置文件说明、yml配置文件说明、验证码案例)
接上次博客:JavaEE进阶(5)Spring IoC&DI:入门、IoC介绍、IoC详解(两种主要IoC容器实现、IoC和DI对对象的管理、Bean存储、方法注解 Bean)、DI详解:注入方式、总结-CSDN博客 目录 配置文件作用 Sprin…...
面包屑是什么
面包屑是网站导航中的一种可视化路径提示,通常以层次结构显示用户当前页面的位置,帮助用户了解他们在网站上的位置和浏览历史。这个术语来源于童话故事《汉赛尔与格莱特》中的面包屑小径,代表着一种追踪轨迹的方法。 假设你在一个电子商务网站…...
C++ 设计模式之责任链模式
【声明】本题目来源于卡码网(卡码网KamaCoder) 【提示:如果不想看文字介绍,可以直接跳转到C编码部分】 【设计模式大纲】 【简介】 --什么是责任链模式(第21种设计模式) 责任链模式是⼀种行为型设计模式&am…...
HTML5与App封装技术将网站一键打包成App
HTML5:跨平台的利器HTML5作为一种先进的网页标记语言,其最大的优势在于跨平台性。开发者仅需编写一次代码,即可在各种操作系统和设备上运行,无需为每个平台单独开发App。这种“编写一次,运行处处”的模式,大…...
openssl3.2/test/certs - 060 - any.bad.com is excluded by CA2.
文章目录 openssl3.2/test/certs - 060 - any.bad.com is excluded by CA2.概述笔记END openssl3.2/test/certs - 060 - any.bad.com is excluded by CA2. 概述 openssl3.2 - 官方demo学习 - test - certs 笔记 /*! * \file D:\my_dev\my_local_git_prj\study\openSSL\test…...
SpringBoot整理-数据库操作
在 Spring Boot 中进行数据库操作是一项常见的任务。Spring Boot 提供了多种方式来集成和操作数据库,使得与数据库的交互更为简便和高效。以下是在 Spring Boot 中进行数据库操作的几种主要方式: 1. Spring Data JPA 介绍: Spring Data JPA 是 Spring Data 的一部分,它简化了…...
IP被封怎么办?访问网站时IP被阻止?解决IP禁令全方法
相信很多人遇到过IP禁令:比如你在访问社交媒体、搜索引擎或电子商务网站时会被限制访问,又或者你的的账号莫名被封,这些由于网络上的种种限制我们经常会遭遇IP被封的情况,导致无法使用继续进行网络行动。在本文中,我们…...
利用aiohttp异步爬虫实现网站数据高效抓取
前言 大数据时代,网站数据的高效抓取对于众多应用程序和服务来说至关重要。传统的同步爬虫技术在面对大规模数据抓取时往往效率低下,而异步爬虫技术的出现为解决这一问题提供了新的思路。本文将介绍如何利用aiohttp异步爬虫技术实现网站数据抓取&#x…...
navicat连接postgresql、人大金仓等数据库报错
navicat连接postgresql、人大金仓数据库报错问题是一个偶现的问题,需要我们特别关注: 1、客户端连接人大金仓数据库 这里注意:navicat连接postgresql、人大金仓数据库时均选择postgresql类型,因为人大金仓数据库底层和psql数据库…...
AUTOSAR看门狗篇 -看门狗驱动(Wdg)
文章目录 功能介绍通用设计规则外部看门狗驱动内部看门狗驱动支持窗口看门狗的触发概念模块API介绍类型定义Wdg_ConfigType函数定义Wdg_InitWdg_SetModeWdg_SetTriggerConditionWdg_GetVersionInfo时序图看门狗初始化、设置触发条件...
数字图像处理:图像内插
图像内插 内插通常在图像放大、缩小旋转和几何校正等任务中使用。内插是用已知数据来估计未知位置的值的过程下面用—个简单的例子开始这—主题的探讨。假设大小为500500像素的—幅图像要放大1.5倍即放大到750750像素。一种简单的放大方法是,创建—个大小为750750像…...
Cantor表(刷题)(C语言)
个人博客主页:https://blog.csdn.net/2301_79293429?typeblog 专栏:https://blog.csdn.net/2301_79293429/category_12545690.html 题目描述 现代数学的著名证明之一是 Georg Cantor 证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的&…...
linux install nvm
官网地址:https://github.com/nvm-sh/nvm 1、wget https://codeload.github.com/nvm-sh/nvm/tar.gz/refs/tags/v0.39.7 tar -zxvf v0.39.7 2、vim ~/.bashrc $HOMEroot export NVM_DIR"$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \…...
HTML 炫酷进度条
下面是代码 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>Light Loader - CodePen</title><style> html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr…...
Windows10上使Git Bash支持rsync命令操作步骤
rsync命令是linux上常用的工具之一,用于远程以及本地系统中拷贝/同步文件和文件夹。 Windows Git Bash默认并不支持rsync,如下图所示: 使Git Bash支持rsync命令操作步骤: 1.从https://repo.msys2.org/msys/x86_64/ 下…...
rust for循环里的所有权 - into_iter / iter / iter_mut
文章目录 1 遍历对象实质为 .into_iter() 生成的迭代器2 避免转移 .iter() / .iter_mut()3 for循环里自变量为什么不用加mut // for循环语法糖 for loop_variable in iterator {code() } // 解糖 {let result match IntoIterator::into_iter(iterator) {mut iter > loop {m…...
GitHub README-Template.md - README.md 模板
GitHub README-Template.md - README.md 模板 1. README-Template.md 预览模式2. README-Template.md 编辑模式References A template to make good README.md. https://gist.github.com/PurpleBooth/109311bb0361f32d87a2 1. README-Template.md 预览模式 2. README-Templat…...
【文本到上下文 #6】Word2Vec、GloVe 和 FastText
一、说明 欢迎来到“文本到上下文”博客的第 6 个系列。到目前为止,我们已经探索了自然语言处理的基础知识、应用和挑战。我们深入研究了标记化、文本清理、停用词、词干提取、词形还原、词性标记和命名实体识别。我们的探索包括文本表示技术,如词袋、TF…...
yolov5 opencv dnn部署自己的模型
yolov5 opencv dnn部署自己的模型 github开源代码地址使用github源码结合自己导出的onnx模型推理自己的视频推理条件c部署c 推理结果 github开源代码地址 yolov5官网还提供的dnn、tensorrt推理链接本人使用的opencv c github代码,代码作者非本人,也是上面作者推荐的…...
Cortex-M4处理器 电源管理
Cortex-M4处理器的休眠模式可以降低功耗。 模式可以是以下一种或两种: 休眠模式停止处理器时钟深度睡眠模式停止系统时钟,关闭锁相环和闪存。 如果设备实现了两种提供不同级别省电的睡眠模式,那么SCR的SLEEPDEEP位将选择使用哪种睡眠模式。…...
Linux 驱动开发基础知识——编写LED驱动程序(三)
个人名片: 🦁作者简介:一名喜欢分享和记录学习的在校大学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:V…...
YOLOv8 视频识别
YOLOv8 是一种目标检测算法,用于识别视频中的物体。要控制视频识别中的帧,可以通过以下方式来实现: 设置帧率:可以通过设置视频的帧率来控制视频的播放速度,从而影响视频识别的速度。 跳帧处理:可以通过跳…...
elementplus Dialog 对话框设置距离页面顶部的距离
默认为 15vh,当弹窗过于高的时候,这个距离其实是不合适的 <el-dialogv-model"dialogVisible"title"Tips"width"30%":before-close"handleClose"top"6vh"><span>This is a message</s…...
便捷接口调测:API 开发工具大比拼 | 开源专题 No.62
hoppscotch/hoppscotch Stars: 56.1k License: MIT Hoppscotch 是一个开源的 API 开发生态系统,主要功能包括发送请求和获取实时响应。该项目具有以下核心优势: 轻量级:采用简约的 UI 设计。快速:实时发送请求并获得响应。支持多…...
网站建设公司的职责/软文广告经典案例100字
rsyslog分为服务端和客户端客户端rsyslog配置文件配置一下几条比较有用$ActionQueueType LinkedList # use asynchronous processing 开启缓存队列$ActionQueueFileName backup_local # set file name, also enables disk mode 如果客户端挂了,缓存队列写到本地ba…...
南昌网站建设设计/广告策划方案范文
仅作为记录,大佬请跳过。 用a.isdigit() 如 ar resulta.isdigit() # Falsea1 resulta.isdigit() # True参考 传送门...
网站做app开发工具/南宁seo
剑指offer 35.复杂链表的复制 class Solution {public Node copyRandomList(Node head) {if(head null){return null;}//使cur指向原链表的头节点Node cur head;//创建哈希表//<原链表节点, 新的链表节点>Map<Node, Node> map new HashMap<>();while(cur…...
传媒免费网站建设/如何优化seo关键词
断言(assertion)是指在开发期间使用的、让程序在运行时进行自检的代码(通常是一个子程序或宏)。断言为真,则表明程序运行正常,而断言为假,则意味着它已经在代码中发现了意料之外的错误。断言对于…...
五道口网站建设/郴州网站seo
转载http://www.cnblogs.com/bxm0927/p/7346270.html...
石家庄城市建设档案馆网站/成都网站建设公司
有时,使用临时的windows机子,要进行ftp简单操作,但又不想装其它的ftp-client,可以直接使用windows command中的命令ftp来操作。 通常,ftp服务器按标准,使用utf8编码格式发送文件名,而widows自带…...