当前位置: 首页 > news >正文

短信平台(电信)

通信方式

       采用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)

 见附表

  1. 成功;

其他失败

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

描述:客户平台 ==> 大业务平台

  1. 查询当前账户套餐余量
  2. 客户通过接口调用主动查询方式,获取数据,
  3. 如实现【回调报告接口2】可不实现该接口。
  4. 请求数据 JSONObject
  5. 响应数据 JSONObject
  6. 每次接口调用都是获得最新的数据,旧数据不再缓存。
  7. 请求:

    字段

    名称

    类型

    说明

    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

    }

回调报告接口

描述:大业务平台 ==> 客户平台

  1. 平台根据send接口reportUrl字段设定的URL地址,提交报告数据给客户
  2. 请求数据JSONArray
  3. 响应数据 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…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...