使用移动云短信服务发送普通短信与模板短信

今天使用到了用移动云短信服务发送短信功能,顺便记录下

apid,secretKey和集团名称分别为如下图用户名,密码,所属分组

package com.keyou.proj.authentication.service.utils;import cn.hutool.crypto.SecureUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import java.io.IOException;
import java.util.*;/*** 移动云短信发送* @author huwenjie* @Date 2024-03-07*/
@Slf4j
public class MasSmsUtil {private static String apId="*******"; //用户名private static String secretKey="********"; //密码private static String ecName = "**************"; //集团名称private static String sign = "**********"; //网关签名编码private static String addSerial = ""; //拓展码 填空private static String templateId = "cdd39593dd954bca9a2a13907e4e15a3"; //模板idpublic static String url = "http://112.35.1.155:1992/sms/norsubmit"; //http请求 发送普通短信public static String tmpUrl = "http://112.35.1.155:1992/sms/tmpsubmit"; //http请求 发送模板短信/*** 多用户发送普通短信信息* @param mobiles 手机号码逗号分隔* @param content 短信内容* @throws Exception*/public static void sendMsg(String mobiles, String content) throws Exception {HashMap<String, Object> params = new HashMap<>();params.put("ecName",ecName);params.put("apId",apId);params.put("secretKey",secretKey);params.put("mobiles",mobiles);params.put("content",content);params.put("sign",sign);params.put("addSerial",addSerial);String str = ecName + apId + secretKey  + mobiles + content + sign + addSerial;String mdSe = SecureUtil.md5(str).toLowerCase();params.put("mac",mdSe);String reqText = JSON.toJSONString(params);String encode = Base64.encodeBase64String(reqText.getBytes("UTF-8"));String body = HttpRequest.post(url).body(encode).execute().body();Map map = JSONUtil.toBean(body, Map.class);Boolean success = (Boolean)map.get("success");if (!success){log.error("模板短信发送失败,错误码: " + map.get("rspcod"));}}/*** 多用户发送模板短信信息* @param mobiles 手机号码逗号分隔* @param par 参数* @throws Exception*/public static void sendTmpMsg(String mobiles, List<String> par) throws Exception {HashMap<String, Object> params = new HashMap<>();params.put("ecName",ecName);params.put("apId",apId);params.put("secretKey",secretKey);params.put("templateId",templateId);params.put("mobiles",mobiles);params.put("params",par);params.put("sign",sign);params.put("addSerial",addSerial);String str = ecName + apId + secretKey + templateId + mobiles + JSONUtil.toJsonStr(par) + sign + addSerial;String mdSe = SecureUtil.md5(str).toLowerCase();params.put("mac",mdSe);String reqText = JSON.toJSONString(params);String encode = Base64.encodeBase64String(reqText.getBytes("UTF-8"));String body = HttpRequest.post(tmpUrl).body(encode).execute().body();Map map = JSONUtil.toBean(body, Map.class);Boolean success = (Boolean)map.get("success");if (!success){log.error("模板短信发送失败,错误码: " + map.get("rspcod"));}}public static void main(String[] args) throws Exception {
//        sendMsg("182****076","这是一个测试短信哦");sendTmpMsg("182******076",new ArrayList<String>());}}

结束........

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/726692.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue.js+SpringBoot开发天然气工程业务管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、使用角色3.1 施工人员3.2 管理员 四、数据库设计4.1 用户表4.2 分公司表4.3 角色表4.4 数据字典表4.5 工程项目表4.6 使用材料表4.7 使用材料领用表4.8 整体E-R图 五、系统展示六、核心代码6.1 查询工程项目6.2 工程物资…

JuiceSSH结合Cpolar实现公网远程SSH访问内网Linux系统

文章目录 1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? cpolarJuiceSSH 实现手机端远程连接Linux虚拟机(内网穿透,手机端连接Linux虚拟机) …

【Python】新手入门(8):什么是迭代?迭代的作用是什么?

【Python】新手入门&#xff08;8&#xff09;&#xff1a;什么是迭代&#xff1f;迭代有什么应用&#xff1f; &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】…

Android如何对应用进行系统签名

一、使用命令 获取签名文件 从系统源码环境中获取签名相关文件&#xff1a; platform.x509.pem、platform.pk8 、signapk.jar platform.x509.pem、platform.pk8 位于 ../build/target/product/security 目录下。signapk.jar 位于 ../out/host/linux-x86/framework 目录下。 …

RocketMQ详解

文章目录 概述RocketMQ 特点RocketMQ 优势RocketMq特点rocketmq发送消息的三种方式RocketMQ为什么要放弃ZookeeperRocketMQ怎么保证集群高可用性RocketMQ如何保证全链路消息零丢失RocketMQ如何解决消息幂等性问题RocketMQ的事务消息机制有什么用RocketMQ如何提升客户端负载均衡…

SpringBoot集成ElasticSearch(ES)

ElasticSearch环境搭建 采用docker-compose搭建&#xff0c;具体配置如下&#xff1a; version: 3# 网桥es -> 方便相互通讯 networks:es:services:elasticsearch:image: registry.cn-hangzhou.aliyuncs.com/zhengqing/elasticsearch:7.14.1 # 原镜像elasticsearch:7.…

基于Mindspore,通过Resnet50迁移学习实现猫十二分类

使用平台介绍 使用平台&#xff1a;启智AI协作平台 使用数据集&#xff1a;百度猫十二分类 数据集介绍 有cat_12_train和cat_12_test和train_list.txt train_list.txt内有每张图片所对应的标签 Minspore部分操作科普 数据集加载 Mindspore加载图片数据集就直接调整成这种…

python的运算符种类及应用

Python中有多种运算符&#xff0c;用于执行各种操作。以下是一些常见的运算符及其应用&#xff1a; 1. 算术运算符&#xff1a; &#xff1a;加法 -&#xff1a;减法 *&#xff1a;乘法 /&#xff1a;除法 //&#xff1a;整除 %&#xff1a;取余 **&#xff1a;幂运算 a 10 …

什么?!你居然连个内存泄漏都排查不出来

公众号&#xff1a;程序员白特&#xff0c;欢迎一起交流学习~ 在日常的业务开发中&#xff0c;偶尔会出现内存泄漏的情况&#xff0c;那么我们该怎么排查呢&#xff1f;现在跟着文章一起学习下吧~ 使用Chrome devTools查看内存情况 打开Chrome的无痕模式&#xff0c;以屏蔽Ch…

列表解析扩展使用

合并列表创建字典 >>> lista["name","age","gender"] >>> listb["zhangsan",99,"wu"] >>> dict1{lista[i]:listb[i] for i in range(len(lista))} >>> dict1 {name: zhangsan, age: 9…

养成游戏开发详细流程说明:游戏源代码交付,专业游戏开发公司

养成类游戏的魅力在于培养、收集和成就感的满足。要开发一款成功的养成游戏&#xff0c;需要经历一系列关键步骤。以下是养成游戏开发的详细流程&#xff1a; 第一阶段&#xff1a;游戏概念与策划 在这个阶段&#xff0c;开发团队将确定游戏的基本概念和设计方向。 确定游戏…

【Unity】【VR开发】写一个用手枪发射子弹的脚本

【背景】 用Unity XR Interaction Toolkits做VR开发,需要Grab手枪后按下Trigger按键发射子弹。 【分析】 为了能够使用Unity提供的VR开发包,需要在引用部分追加:Using unityengin.xr.interaction.toolkit在这个脚本中,我们需要三个公共变量。 第一个公共变量命名为bullet…

k个一组反转链表

题目 题目链接 . - 力扣&#xff08;LeetCode&#xff09; 题目描述 代码实现 class Solution { public:ListNode* reverseKGroup(ListNode* head, int k) {if(k 1) return head;//特殊情况ListNode *cur head;for(int i 1; i < k; i){if(cur nullptr ||cur->nex…

Seurat 中的数据可视化方法

本文[1]将使用从 2,700 PBMC 教程计算的 Seurat 对象来演示 Seurat 中的可视化技术。您可以从 SeuratData[2] 下载此数据集。 SeuratData::InstallData("pbmc3k")library(Seurat)library(SeuratData)library(ggplot2)library(patchwork)pbmc3k.final <- LoadData(…

[创业之路-96/管理者与领导者-138] :研发与生产的比较,一个是技术、设计、功能、性能,一个是流程、效率、成本和质量、供应链

目录 前言&#xff1a; 一、概述 二、研发与生产在目标和职责的区别 三、研发与生产在关注重点的区别 四、设计与制造的区别 五、研发与生产在时间范围的区别 六、研发与生产在人才技能的区别 七、研发与生产在风险管理的区别 前言&#xff1a; 看到一个奇怪的现象&am…

【wine】解决 0024:fixme:msctf:KeystrokeMgr_TestKeyUp STUB:(00A3D508)

故障日志 0024:fixme:msctf:KeystrokeMgr_TestKeyUp STUB:(00A3D508) AI分析 这些消息表示Wine对IE内核组件以及IME&#xff08;Input Method Editor&#xff0c;输入法编辑器&#xff09;的支持不完全。特别是涉及文本输入、拖放事件、属性变化通知等功能。 解决 winetrick…

【论文阅读】单词级文本攻击TAAD2.2

TAAD2.2论文概览 0.前言1-101.Bridge the Gap Between CV and NLP! A Gradient-based Textual Adversarial Attack Frameworka. 背景b. 方法c. 结果d. 论文及代码 2.TextHacker: Learning based Hybrid Local Search Algorithm for Text Hard-label Adversarial Attacka. 背景b…

python爬虫(一)

一、python中的NumPy模块&#xff08;数据的存储和处理&#xff09; 这里是下载完成之后的表现 &#xff08;1&#xff09;创建数组 1、使用array&#xff08;&#xff09;函数创建数组 使用array函数可以创建任意维度的的数组 下面是一个创建二维数组的代码示例 下面是代码…

java集合(泛型数据结构)

1.泛型 1.1泛型概述 泛型的介绍 泛型是JDK5中引入的特性&#xff0c;它提供了编译时类型安全检测机制 泛型的好处 把运行时期的问题提前到了编译期间 避免了强制类型转换 泛型的定义格式 <类型>: 指定一种类型的格式.尖括号里面可以任意书写,一般只写一个字母.例如: …

【力扣 - 三数之和】

题目描述 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。…