Java+Demo对接中国移动 云MAS短信发送(http协议详解,新测成功!)

news2024/11/24 13:40:14

一.登录官网,下载http接入文档(随着官网不断更新,可参考官网的文档)

官网地址为:云mas业务平台

在这里插入图片描述

 进入云MAS管理平台,找到 管理-接口管理 的列表页。

(必读:本文对接方式是 java引用jar包,进行sdk协议对接,后台java代码是引用jar包,调用短信服务的http接口,所以你创建的短信接口协议必须是SDK2.0,这样后台才能接口调用成功。)

进入这个短信接口的详情页,查看一下配置项。

 二.代码示范(亲测成功,先附上成功图片)

 成功示范图

添加依赖jar包

Java+Demo对接中国移动 云MAS短信发送-Jar,点击0积分获取!!!

创建 MmsSend.java

package demo;

import com.umpay.masmgc.sdk.mms.compat.core.message.ap.ApMmsSubmitReq;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import com.bsi.api.client.Client;
import com.bsi.api.client.MmsClient;
import com.bsi.api.pojo.MM7;
import com.bsi.api.pojo.MM7Frame;
import com.cmcc.mm7.vasp.message.MM7DeliveryReportReq;

public class MmsSend {

	// 1 组装无模板彩信
	private MM7 createMM7_1( ) throws Exception {
		String subject = "";// 主题
		String signa = "sss"; // 签名
		String[] mobiles = new String[]{ "***" };
		MM7 mm7 = Client.getInstance( ).createMM7( subject, mobiles, signa );
		List<MM7Frame> frames = new ArrayList<MM7Frame>( );
		MM7Frame frame1 = mm7.addFrame( 15 );// 添加一帧
		frame1.addImage( createByteByFileName( "./data/zq/1.jpg" ) );// byte[]类型参数
		frame1.addText( createByteByFileName( "./data/zq/a.txt" ) );
		frames.add( frame1 );// 添加到List<MM7Frame>

		MM7Frame frame2 = mm7.addFrame( 15 );
		frame2.addImage( createByteByFileName( "./data/zq/2.jpg" ) );
		frame2.addText( createByteByFileName( "./data/zq/b.txt" ) );
		frames.add( frame2 );

		MM7Frame frame3 = mm7.addFrame( 15 );
		frame3.addImage( createByteByFileName( "./data/zq/3.jpg" ) );
		frame3.addText( createByteByFileName( "./data/zq/c.txt" ) );
		frames.add( frame3 );
//
//		MM7Frame frame4 = mm7.addFrame( 15 );
//		frame4.addText( createByteByFileName( "./data/temp/4.txt" ) );
//		frames.add( frame4 );
//
//		MM7Frame frame5 = mm7.addFrame( 15 );
//		frame5.addText( createByteByFileName( "./data/temp/5.txt" ) );
//		frames.add( frame5 );
//
//		MM7Frame frame6 = mm7.addFrame( 15 );
//		frame6.addImage( createByteByFileName( "./data/temp/1490952420.jpg" ) );
//		frames.add( frame6 );
//
//		MM7Frame frame7 = mm7.addFrame( 15 );
//		frame7.addAudio( createByteByFileName( "./data/temp/FFX61N8X.mid" ) );
//		frames.add( frame7 );
//
//		MM7Frame frame8 = mm7.addFrame( 15 );
//		frame8.addImage( createByteByFileName( "./data/temp/riben_175.jpg" ) );
//		frame8.addText( createByteByFileName( "./data/temp/riben_175.txt" ) );
//		frames.add( frame8 );
		return mm7;
	}

	// 2组装无模板定时彩信
	private MM7 createMM7_2( ) throws Exception {
		String subject = "test_subject";// 主题
		String signa = "Vj7nlgsne"; // 签名
		String[] mobiles = new String[]{ "15718861521","15718861521" };
		SimpleDateFormat timer1 = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );
		Date timer = timer1.parse( "2016-10-26 18:40:00" );
		MM7 mm7 = Client.getInstance( ).createMM7( subject, mobiles, signa, timer );
		List<MM7Frame> frames = new ArrayList<MM7Frame>( );
		MM7Frame frame1 = mm7.addFrame( 15 );// 添加一帧
		frame1.addText( createByteByFileName( "./data/temp/1.txt" ) );// byte[]类型参数
		frames.add( frame1 );// 添加到List<MM7Frame>

		MM7Frame frame2 = mm7.addFrame( 15 );
		frame2.addText( createByteByFileName( "./data/temp/2.txt" ) );
		frames.add( frame2 );

		MM7Frame frame3 = mm7.addFrame( 15 );
		frame3.addText( createByteByFileName( "./data/temp/3.txt" ) );
		frames.add( frame3 );

		MM7Frame frame4 = mm7.addFrame( 15 );
		frame4.addText( createByteByFileName( "./data/temp/4.txt" ) );
		frames.add( frame4 );

		MM7Frame frame5 = mm7.addFrame( 15 );
		frame5.addText( createByteByFileName( "./data/temp/5.txt" ) );
		frames.add( frame5 );

		MM7Frame frame6 = mm7.addFrame( 15 );
		frame6.addText( createByteByFileName( "./data/temp/6.txt" ) );
		frames.add( frame6 );

		MM7Frame frame7 = mm7.addFrame( 15 );
		frame7.addAudio( createByteByFileName( "./data/temp/FFX61N8X.mid" ) );
		frames.add( frame7 );

		MM7Frame frame8 = mm7.addFrame( 15 );
		frame8.addImage( createByteByFileName( "./data/temp/riben_175.jpg" ) );
		frame8.addText( createByteByFileName( "./data/temp/riben_175.txt" ) );
		frames.add( frame8 );
		return mm7;
	}

	private MM7 createMM7_3( ) throws Exception {
		String subject = "test_subject";
		String signa = "Vj7nlgsne";
		String[] mobiles = new String[]{ "15718861521" };
		String tempId = "bac6c06e42f34b70a8483b04591cfcc6";
		MM7 mm7 = Client.getInstance( ).createMM7( subject, mobiles, signa, tempId );
		return mm7;
	}

	private MM7 createMM7_4( ) throws Exception {
		String subject = "test_subject";
		String signa = "Vj7nlgsne";
		String[] mobiles = new String[]{ "15718861521" };
		String tempId = "bac6c06e42f34b70a8483b04591cfcc6";
		SimpleDateFormat timer1 = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );
		Date timer = timer1.parse( "2016-10-26 18:40:00" );
		MM7 mm7 = Client.getInstance( ).createMM7( subject, mobiles, signa, timer, tempId );
		return mm7;
	}

	public static void main( String[] args ) {
		MmsSend mmsSend = new MmsSend( );
		Client client = Client.getInstance( );
		boolean success = client.login("http://112.******:***", "sss","sss", "ssss");
		if( !success ) {
			return;
		}
		ApMmsSubmitReq req_1 = null;
		// ApMmsSubmitReq req_2 = null;
		// ApMmsSubmitReq req_3 = null;
		// ApMmsSubmitReq req_4 = null;
		try {
			req_1 = MmsClient.getInstance( ).MM72ApMmsSubmitReq( mmsSend.createMM7_1( ) );
			// req_2 = MmsClient.getInstance( ).MM72ApMmsSubmitReq( mmsSend.createMM7_2( ) );
			// req_3 = MmsClient.getInstance( ).MM72ApMmsSubmitReq( mmsSend.createMM7_3( ) );
			// req_4 = MmsClient.getInstance( ).MM72ApMmsSubmitReq( mmsSend.createMM7_4( ) );
			Map<String, String> result_1 = client.sendMms( req_1 );
			// Map<String, String> result_2 = client.sendMms( req_2 );
			// Map<String, String> result_3 = client.sendMms( req_3 );
			// Map<String, String> result_4 = client.sendMms( req_4 );
			System.out.println( result_1 );
			// System.out.println( result_2 );
			// System.out.println( result_3 );
			// System.out.println( result_4 );
			
			while( true ) {
//				List< SubmitReportModel > StatusReportlist = client.getSubmitReport();
				List<MM7DeliveryReportReq> StatusReportlist = client.getReport( );
				if( StatusReportlist.size( ) > 0 ) {

					for( int i = 0; i < StatusReportlist.size( ); i++ ) {
						System.out.println( "-----------------------------------------"+StatusReportlist.get( i ).getMMStatus( ) );
					}
				}
				try {
					Thread.sleep( 1000 );
				} catch( InterruptedException e ) {
				}
			}
			
		} catch( Exception e ) {
			System.out.println( e );
		}
	}

	private byte[] createByteByFileName( String path ) {
		byte[] b = null;
		try {
			b = Files.readAllBytes( Paths.get( path ) );
		} catch( IOException e ) {
			System.out.println( "文件路劲错误或者找不到该多媒体内容 {}" + e );
		}
		return b;
	}
}

创建 Sdk2SmsSend.java (测试类) 

package demo;

import java.util.List;

import com.mascloud.model.MoModel;
import com.mascloud.model.StatusReportModel;
import com.mascloud.sdkclient.Client;
import com.mascloud.util.JsonUtil;



public class Sdk2SmsSend {
	public static void main( String[] args ) {
		Client client = Client.getInstance( );
		// 登录地址需另外提供
		boolean isLoggedin = client.login( "http://112.35.4.197:15000", "zh****", "S********", "**********有限公司" );
		if( isLoggedin ) {
			System.out.println( "Login successed" );
		} else {
			System.out.println( "Login failed" );
			return;
		}

		// 普通短信
		int rt = client.sendDSMS( new String[]{ "188******96" }, "短信内容", "123", 1, "h**********fE", null, true );
		System.out.println( rt );

		// 模板短信
		int rtm = client.sendTSMS( new String[]{ "188******96" }, "模板ID", new String[]{ "参数一", "参数二" }, "123", 0, "hWYR8VBfE", null );
		System.out.println( rtm );

		// 获取状态报告——开始
		List<StatusReportModel> statusReportlist = client.getReport( );
		System.out.println( "getReport : " + JsonUtil.toJsonString( statusReportlist ) );
		// 获取状态报告——结束

		// 获取上行短信——开始
		List<MoModel> deliverList = client.getMO( );
		System.out.println( "getMO : " + JsonUtil.toJsonString( deliverList ) );
		// 获取上行短信——结束



	}
}

 修改你自己对应的:账号、密码、短信签名编码

账号      对应  userAccount  

密码      对应  password

企业名称  对应  ecname  

接口URL   对应  url     

----------------------------------------------------------------------
解释:
Http协议的Url参考:

1.http下login方法调用的接口:http://112.35.4.197:15000
2.http下sendMsg方法调用接口:http://112.35.1.155:1992/sms/norsubmit 



Https协议的Url参考:

二平台
https	普通短信	https://112.35.10.201:28888/sms/submit
https	模板短信	https://112.35.10.201:28888/sms/tmpsubmit

五平台
https	普通短信	https://112.35.10.201:58888/sms/submit
https	模板短信	https://112.35.10.201:58888/sms/tmpsubmit

.完整Demo

链接还未审核通过,稍后更新,点击0积分获取!!!

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

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

相关文章

【MYSQL篇】一文弄懂mysql中redo log、binlog

前言 今天想跟大家聊聊关于 mysql 中的两个小的知识点&#xff1a;redo log 和 binlog 。 redo log &#xff1a;InnoDB 存储引擎层方面的日志&#xff0c;所以如果你使用的存储引擎不是 InnoDB 的话&#xff0c;那就根本谈不上 redo log。 binlog &#xff1a; MySQL Serve…

SpringBoot整合模板引擎Thymeleaf(2)

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 概述 Thymeleaf十分类似于JSP中使用的EL表达式。整体而言&#xff0c;Thymeleaf简洁、优雅、高效&#xff1b;非常适合小型项目的快速开发。 Thymeleaf常用标签简述 在此…

多商户商城开发功能清单

电商时代下&#xff0c;传统企业商家急需拓展业务规模&#xff0c;向线上拓展&#xff0c;而多商户小程序造价低&#xff0c;效应高&#xff0c;自然就成为了很多企业商家拓展线上营销渠道的首要选择,那么多商户小程序商城涵盖哪些功能呢?下面小编就来详细为大家解答&#xff…

每日学术速递6.8

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.BundleSDF: Neural 6-DoF Tracking and 3D Reconstruction of Unknown Objects(CVPR 2023) 标题&#xff1a;BundleSDF&#xff1a;未知对象的神经 6-DoF 跟踪和 3D 重建 作者&am…

5年功能测试,“我“一进阶自动化测试拿到了24k的offer...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 什么&#xff1f;…

Linux下工作常用命令

Linux系统下常用的查找文件命令&#xff0c;可以方便地根据文件名、文件类型、文件大小等条件来查找指定文件。以下是一些常用的find示例&#xff1a; 1. 根据文件名查找文件 find / nsme “*.log”目录下查找所有以.log结尾的文件 [rootlocalhost ~]# find / -name "…

vite vs babel+webpack | 创建一个简单的vite项目打包运行

有babel、webpack这些优秀的框架&#xff0c;为什么使用vite? 因为vite编译快&#xff0c;启动快&#xff0c;使用简单&#xff0c;还自带一个热更新重启的服务器&#xff0c;vite能够自动的帮我打包所用到的依赖&#xff0c;有些依赖只有用到才会导入&#xff0c;不用到不会…

卷起来了,阿里最新出品“微服务全阶笔记”,涵盖微服务全部操作

近两年&#xff0c;“大厂裁员”总是凭实力冲上各大媒体头条&#xff0c;身在局中的我们早已习以为常。国内的京东&#xff0c;阿里&#xff0c;腾讯&#xff0c;字节&#xff0c;快手&#xff0c;小米等互联网公司都以不同程度的裁员比例向社会输送人才。大量有大厂经验的卷王…

C++基础(7)——类和对象(继承)

前言 本文主要介绍C中的继承 4.6.1&#xff1a;继承和继承方式&#xff08;公有、保护、私有&#xff09; 4.6.2&#xff1a;继承中的对象模型&#xff0c;sizeof()求子类对象大小 4.6.3&#xff1a;子类继承父类后&#xff0c;两者构造和析构顺序 父类先构造、子类先析构 如…

在vue3中使用pinia完整流程图文

1.准备 使用vite创建好一个vue3项目&#xff0c;开发语言选择ts使用 npm i pinia -s 安装最新版本的pinia 这里我的版本安装的是 2.1.4 2.注册pinia 1.在main中注册pinia import { createApp, createApp } from "vue"; import "./style.css"; import App…

Contrastive Representation Learning 对比表征学习(三)视觉:图像嵌入(1)

原文翻译自这里 视觉&#xff1a;图像嵌入&#xff08;Image Embedding&#xff09; 图像增强 在视觉领域&#xff0c;大多数面向对比表征学习的方案均依赖于通过应用数据增强技术的序列组合来创建样本的噪声形式。而这种增强需要满足保持语义不变的同时极大的改变其视觉外观…

既有内销又有外贸,多样性外贸业务管理解决方案

随着外贸数字化贸易全球化的深入发展&#xff0c;出口、进口、内销业务越来越受到关注。外贸业务是企业在海外市场进行商品贸易&#xff0c;而内销业务是企业在国内市场进行商品贸易。在管理这种业务时&#xff0c;想要实现降本增效&#xff0c;企业需要有一套成熟的管理解决方…

Redis什么是缓存穿透、击穿、雪崩?如何解决

缓存与后端系统 通常后端会采用Mysql等磁盘数据库&#xff0c;可以持久化但是访问慢&#xff0c;高并发时性能差&#xff0c;需要设置Nosql内存型数据库缓存&#xff1a;Redis等 但缓存可能出现&#xff1a;缓存穿透、缓存击穿、缓存雪崩等问题 认识缓存穿透、击穿、雪崩 热点…

Vue2:怎么实现响应式双向绑定?

一、vue2怎么实现双向绑定原理 在Vue2中&#xff0c;双向绑定的实现是通过Vue2的响应式系统和数据绑定机制来完成的。下面是Vue2实现双向绑定的简要原理&#xff1a; 数据劫持&#xff1a;当创建Vue实例时&#xff0c;Vue2会对data选项中的所有属性进行数据劫持。这通过使用Ob…

【单元测试】Junit 4教程(一)--白盒测试方法

目录 1.0 流程图标识 1.1 语句覆盖法&#xff08;C0标准&#xff09; 1.2 判定/分支覆盖法&#xff08;C1标准&#xff09; 1.3 条件覆盖法&#xff08;C2标准&#xff09; 1.4 判定条件覆盖法&#xff08;C1C2标准&#xff09; 1.5 条件组合覆盖法&#xff08;C3标准&am…

【ESP8266】基础AT指令和常用WIF指令

【ESP8266 &#xff08;12F&#xff09;】硬件参数 以及 固件烧录 文章目录 一、常用AT命令1.1 基础1.2 WiFi相关1.21 ATCWMODE&#xff1a;查询/设置 Wi-Fi 模式 (Station/SoftAP/StationSoftAP)1.22 ATCWJAP&#xff1a;连接 AP1.23 ATCWLAP&#xff1a;扫描当前可用的 AP1.2…

容器JVM内存配置最佳实践

背景信息 当您的业务是使用Java开发&#xff0c;且设置的JVM堆空间过小时&#xff0c;程序会出现系统内存不足OOM&#xff08;Out of Memory&#xff09;的问题。事件中心的OOM事件是指系统内存不足时&#xff0c;触发了Linux的内存回收&#xff08;OOM Killer&#xff09;机制…

7D性能工程初级班第一期开班了!

Slogan&#xff1a;领略性能艺术的壮阔、感受性能测试的博大精深 课程大纲见&#xff1a;【7D-RESAR 性能工程初级班大纲】 报名流程 讲师介绍 高楼老师&#xff1a; 性能领域公认的具有匠心的技术专家。架构级性能解决方案资深专家。性能测试调优分析18年经验&#xff0c;…

Java中的实体类为什么要 implements Serializable?

1. 序列化和反序列化 首先来解释一下什么是序列化和反序列化&#xff1a; 序列化&#xff1a;把对象转换为字节序列的过程称为对象的序列化。 反序列化&#xff1a;把字节序列恢复为对象的过程称为对象的反序列化。 在 Java 和其他语言进行通信的时候&#xff0c;需要将对象…

安卓手机ROOT和刷机基本操作——以红米Note7刷安卓原生系统并Root为例

文章目录 前言一.简介1. 安卓权限2. 安卓分区Boot分区System分区Data分区Cache分区Recovery分区 3. Fastboot 二.前置准备1. Android SDK 工具2. 解BL锁 三. ROOT1.Fastboot线刷(推荐)获取系统boot镜像修补boot.img刷入boot 2. Recovery卡刷(可以尝试) 四. 红米Note7刷安卓原生…