当前位置: 首页 > 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…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...