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

OpenClaw调试技巧:QwQ-32B任务失败的根本原因分析

OpenClaw调试技巧&#xff1a;QwQ-32B任务失败的根本原因分析 1. 问题背景与诊断框架 上周我在尝试用OpenClaw对接本地部署的QwQ-32B模型时&#xff0c;遇到了一个典型问题&#xff1a;简单的文件整理任务总是执行到一半就中断&#xff0c;控制台只显示"模型响应超时&qu…...

让ai成为你的vue开发搭档,用快马智能优化代码性能与结构

让AI成为你的Vue开发搭档&#xff0c;用快马智能优化代码性能与结构 最近在开发一个Vue3项目时&#xff0c;遇到了几个性能瓶颈问题。作为一个前端开发者&#xff0c;性能优化是绕不开的话题。幸运的是&#xff0c;借助AI辅助开发工具&#xff0c;这些问题都能得到更高效的解决…...

从零到一:基于GitHub Pages与Jekyll搭建你的专属学术主页

1. 为什么选择GitHub Pages Jekyll搭建学术主页&#xff1f; 作为一个长期在学术界摸爬滚打的老兵&#xff0c;我见过太多同行花大价钱购买服务器和维护网站&#xff0c;结果最后因为各种技术问题半途而废。直到我发现GitHub Pages和Jekyll这对黄金组合&#xff0c;才真正找到…...

OpenClaw多设备同步:GLM-4.7-Flash配置共享方案

OpenClaw多设备同步&#xff1a;GLM-4.7-Flash配置共享方案 1. 为什么需要多设备同步配置&#xff1f; 去年冬天&#xff0c;我在办公室和家里两台MacBook上分别部署了OpenClaw对接GLM-4.7-Flash模型。很快发现一个头疼的问题&#xff1a;每次在办公室调试好的技能参数&#…...

【概率统计】从直方图到核密度估计:数据分布可视化的进阶之路

1. 直方图&#xff1a;数据可视化的第一课 第一次接触数据分布可视化时&#xff0c;大多数人都是从直方图开始的。记得我刚学数据分析时&#xff0c;导师扔给我一组销售数据说&#xff1a;"先画个直方图看看分布情况。"当时我盯着matplotlib的hist函数参数一脸茫然—…...

别再死记公式了!用Python+Matplotlib亲手仿真LC并联谐振,直观理解选频原理

用PythonMatplotlib动态仿真LC并联谐振&#xff1a;从代码到物理直觉的沉浸式探索 当教科书上的LC并联谐振公式变成屏幕上跳动的曲线&#xff0c;当抽象的Q值概念转化为滑块调节时的实时波形变化&#xff0c;电子工程的学习便从枯燥的符号演算升维为一场充满探索乐趣的科学实验…...

激活函数进化史:从Sigmoid到ELU,聊聊那些年我们踩过的‘梯度消失’和‘神经元死亡’的坑

激活函数进化史&#xff1a;从Sigmoid到ELU&#xff0c;聊聊那些年我们踩过的‘梯度消失’和‘神经元死亡’的坑 神经网络的世界里&#xff0c;激活函数就像神经元之间的"翻译官"&#xff0c;负责将输入信号转化为有意义的输出。但这位翻译官的脾气可不太好琢磨——…...

46535

4675328...

PyFluent:重构CFD仿真流程的技术赋能与效能跃迁

PyFluent&#xff1a;重构CFD仿真流程的技术赋能与效能跃迁 【免费下载链接】pyfluent 项目地址: https://gitcode.com/gh_mirrors/pyf/pyfluent 在现代工程仿真领域&#xff0c;计算流体动力学&#xff08;CFD&#xff09;技术正经历着从手动操作向自动化流程的深刻转…...

Mojo 1.2正式版发布后,Python互操作API发生3处破坏性变更——紧急迁移指南与向下兼容降级方案(含自动转换脚本)

第一章&#xff1a;Mojo 1.2互操作API破坏性变更全景概览Mojo 1.2 版本对与 Python、C/C 及系统原生库的互操作接口进行了深度重构&#xff0c;核心目标是提升类型安全性和运行时性能&#xff0c;但由此引入了多项不兼容的破坏性变更。开发者在升级至 1.2 时必须审慎评估现有绑…...