额,我也不知道弄撒类,移动短信和我这么有缘,对接完http的后来又说因为种种原因不能用,又要重新对接过webservice版本的,没办法,谁叫咱是打工人呢,话不多说,直接开整

一.登录官网,下载webservice接入文档

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

打开文档,我们可以看到整整12页,真的是头大,好吧直接挑重点

根据文档可以总结一下几点:

  1. 发送短信方法为sendSms
  2. 所需的参数需要拼接成一个xml
  3. xml中的mac参数要根据特定规则拼接并计算md5
  4. 响应结果中success值为true即可判定短信发送成功

二.根据文档中的wsdl地址生成客户端代码

  1. 直接在项目存放代码的目录下打开cmd窗口执行以下代码:

    wsimport -keep http://112.35.10.201:1999/smsservice?wsdl
    
  2. 生成好的客户端代码长这样:

三.接下来就可以写咱们自己的对接业务代码了

  1. SmsUtils.java
package com.krt.common.util;import com.umpay.mascloud.mgw.service.webservice.server.WsSmsService;
import com.umpay.mascloud.mgw.service.webservice.server.WsSmsServiceService;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;import java.io.IOException;
import java.io.StringWriter;/*** @author: lyp* @Date: 2021/9/27 09:27* @Description: sms移动短信接口(webservice方式调用)*/
public class SmsUtils {private static Logger logger = Logger.getLogger(SmsUtils.class);/*** 账号*/private static String apId = "";/*** 密码*/private static String secretKey = "";/*** 集团名称*/private static String ecName = "";/*** 网关签名编码*/private static String sign = "";/*** 拓展码(可以为空)*/private static String addSerial = "";/*** 按EcName、apId、secretKey、mobiles* (拼起来,中间无空格如1380013800013800138001)、* content、sign、addSerial顺序拼接得到的字符串计算md5** @param phone* @param content* @return*/public static String getMac(String phone, String content) {// 按规则拼接macStringBuffer stringBuffer = new StringBuffer();stringBuffer.append(ecName);stringBuffer.append(apId);stringBuffer.append(secretKey);stringBuffer.append(phone);stringBuffer.append(content);stringBuffer.append(sign);stringBuffer.append(addSerial);// 按移动对接文档对mac进行加密return Md5Util2.MD5(stringBuffer.toString()).toLowerCase();}/*** <WsSubmitReq>* <apId>apId13</apId>* <secretKey>123</secretKey>* <ecName>测试</ecName>* <mobiles>* <string>13800138000</string>* <string>13800138001</string>* </mobiles>* <content>测试内容</content>* <sign>mysign</sign>* <addSerial>2134</addSerial>* <mac> 242c191105bbe62b203caf7a57afe7c6 </mac>* </WsSubmitReq>* 生成移动webservice想要的xml* todo 有待改进 后期可以根据需求决定是否支持短信和号码一对多** @return*/public static String genXmlStr(String mac, String phone, String content) {// 创建一个完整的节点Document doc = DocumentHelper.createDocument();Element wsSubmitReqElement = doc.addElement("WsSubmitReq");Element apIdElement = wsSubmitReqElement.addElement("apId");Element secretKeyElement = wsSubmitReqElement.addElement("secretKey");Element ecNameElement = wsSubmitReqElement.addElement("ecName");Element mobilesElement = wsSubmitReqElement.addElement("mobiles");Element stringElement = mobilesElement.addElement("string");Element contentElement = wsSubmitReqElement.addElement("content");Element signElement = wsSubmitReqElement.addElement("sign");Element addSerialElement = wsSubmitReqElement.addElement("addSerial");Element macElement = wsSubmitReqElement.addElement("mac");// 给每个节点赋值apIdElement.setText(apId);secretKeyElement.setText(secretKey);ecNameElement.setText(ecName);stringElement.setText(phone);contentElement.setText(content);signElement.setText(sign);addSerialElement.setText(addSerial);macElement.setText(mac);OutputFormat format = OutputFormat.createCompactFormat();StringWriter writer = new StringWriter();XMLWriter output = new XMLWriter(writer, format);try {output.write(doc);} catch (IOException e) {logger.error(e.getMessage());} finally {try {writer.close();output.close();} catch (IOException e) {logger.error(e.getMessage());}}return writer.toString();}/*** 发送短信* @param phone* @param content* @return*/public static Boolean sendMsg(String phone, String content) {WsSmsServiceService wsSmsServiceService = new WsSmsServiceService();WsSmsService wsSmsServicePort = wsSmsServiceService.getWsSmsServicePort();String smsResponseXml = wsSmsServicePort.sendSms(genXmlStr(getMac(phone, content), phone, content));return parseSmsResponseXml(smsResponseXml);}public static void main(String[] args) {sendMsg("186****7603", "222");}/*** 解析中国移动响应的xml** <SendSmsResponse>* <msgGroup>0927112828000001122046</msgGroup>* <rspcod>success</rspcod>* <success>true</success>* </SendSmsResponse>** @param xmlStr* @return*/public static Boolean parseSmsResponseXml(String xmlStr) {if (StringUtils.isNotBlank(xmlStr)) {Document doc;String success = null;// 将字符串转为XMLtry {doc = DocumentHelper.parseText(xmlStr);// 获取根节点Element rootElt = doc.getRootElement();success = rootElt.elementTextTrim("success");} catch (DocumentException e) {logger.error(e.getMessage());}return "true".equals(success) ? true : false;}return false;}}
  1. Md5Util2 .java
package com.krt.common.util;import org.apache.commons.codec.binary.Base64;import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.security.MessageDigest;/*** @version 1.0* @Author: lyp* @Date: 2021/2/27 15:11*/
public class Md5Util2 {static final char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7','8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};/*** 生成MD5码** @param plainText 要加密的字符串* @return md5值*/public final static String MD5(String plainText) {try {byte[] strTemp = plainText.getBytes("UTF-8");MessageDigest mdTemp = MessageDigest.getInstance("MD5");mdTemp.update(strTemp);byte[] md = mdTemp.digest();int j = md.length;char str[] = new char[j * 2];int k = 0;for (int i = 0; i < j; i++) {byte byte0 = md[i];str[k++] = hexDigits[byte0 >>> 4 & 0xf];str[k++] = hexDigits[byte0 & 0xf];}return new String(str);} catch (Exception e) {return null;}}/*** 生成MD5码** @param plainText 要加密的字符串* @return md5值*/public final static String MD5(byte[] plainText) {try {byte[] strTemp = plainText;MessageDigest mdTemp = MessageDigest.getInstance("MD5");mdTemp.update(strTemp);byte[] md = mdTemp.digest();int j = md.length;char str[] = new char[j * 2];int k = 0;for (int i = 0; i < j; i++) {byte byte0 = md[i];str[k++] = hexDigits[byte0 >>> 4 & 0xf];str[k++] = hexDigits[byte0 & 0xf];}return new String(str);} catch (Exception e) {return null;}}/*** 先进行HmacSHA1转码再进行Base64编码** @param data 要SHA1的串* @param key  秘钥* @return* @throws Exception*/public static String HmacSHA1ToBase64(String data, String key) throws Exception {SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), "HmacSHA1");Mac mac = Mac.getInstance("HmacSHA1");mac.init(signingKey);byte[] rawHmac = mac.doFinal(data.getBytes());return Base64.encodeBase64String(rawHmac);}/*** 校验MD5码** @param text 要校验的字符串* @param md5  md5值* @return 校验结果*/public static boolean valid(String text, String md5) {return md5.equals(MD5(text)) || md5.equals(MD5(text).toUpperCase());}/*** @param params* @return*/public static String MD5(String... params) {StringBuilder sb = new StringBuilder();for (String param : params) {sb.append(param);}return MD5(sb.toString());}}

通过测试也是可以成功发送短信,对此,对接完成

中国移动云mas短信对接(webservice)相关推荐

  1. 中国移动云mas短信对接(http)

    一.登录官网,下载http接入文档 官网地址为:云mas业务平台 二.创建http短信接口 登录中国移动云mas平台,新建短信接口: 新建短信接口(简称SMS接口),是为集团客户创建可以使用接口发送短 ...

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

    一.登录官网,下载http接入文档(随着官网不断更新,可参考官网的文档) 官网地址为:云mas业务平台 进入云MAS管理平台,找到 管理-接口管理 的列表页. (必读:本文对接方式是 java引用ja ...

  3. java实现移动云mas短信对接

    1.登录自己的云mas账号进入接口管理,申请一个sdk的接口并启用 2.项目中引入移动提供的jar包,注(该拆分包可能与项目jar有冲突,可以自行去掉) 3.编写对接代码,如下 package cli ...

  4. 中国移动云mas短信http协议对接

    我最开始拿到文档也是懵的,想着百度能不能查到,竟然被我查到了,我是按照这篇文章进行编码的.地址:https://www.freesion.com/article/95321371904/,这篇文章已经 ...

  5. 中国移动云MAS平台发送普通短信

    使用中国移动云MAS平台发送普通短信 步骤 1.输入用户名和密码登录中国移动云MAS业务平台. 下载用户操作手册 和 HTTP接口文档 深入了解云MAS 2.在中国移动云MAS业务平台的主页面,点击[ ...

  6. VS2019 c# 中国移动云mas平台 webservice实现

    云MAS提供webservice服务,接收客户端向云MAS平台发送请求,带上相应的请求参数,云MAS平台接收请求,并进行验证,验证通过后进行短信发送. 本文实现一对多短信发送 接口文档:中国移动云ma ...

  7. python项目对接腾讯云发送短信

    python项目对接腾讯云发送短信 先安装需要的包 pip install tencentcloud-sdk-python # -*- coding: utf-8 -*- # pip install ...

  8. 中国移动Mas短信平台开发增值服务的一些心得

    Mas短信开发增值服务平台建设 中国移动MAS机的知识本人不是很熟悉,只知道如何使用它和.net开发链接起来做短信发布,下面是我在网上看到的一些介绍: 移动代理服务器 Mobile Agent Ser ...

  9. Java 对接 阿里云 的短信服务完成短信的发送与查询

    一.开通阿里云短信服务,为开发时需要用到的信息做准备 1.注册或者使用自己的支付宝账号登录阿里云官网 2.搜索并找到短信服务,进行开通(开通是不要钱的,发送短信的时候才需要钱) 3.注册自己的短信签名 ...

最新文章

  1. jpa单向一对多关联映射
  2. 被Zoom逼疯的歪果仁,造出了视频会议机器人,同事已笑疯丨开源
  3. win7中安装vs2008的升级成正式版的方法
  4. LeetCode 653. Two Sum IV - Input is a BST
  5. 机器学习面试之算法思想简单梳理
  6. JavaScript怎么安装_WebStrom 2019安装教程
  7. 103000大写加零吗_00支票大写金额该如何?
  8. 京东数科主导的首个Apache基金会项目ShardingSphere进入孵化器
  9. 皮克公式:点阵中多边形的面积公式
  10. 广告行业常用英文词汇
  11. python画喜羊羊代码_PYTHON养成日记 DAY-7
  12. STM32 内核复位 与 系统复位 区别及程序实现
  13. 麦森数 OpenJ_Bailian - 2706
  14. 微机原理8253计数初值计算
  15. extern、struct等关键字
  16. shuffle什么意思?python模拟随机发牌(斗地主、掼蛋)
  17. 小心你的眼睛—绝妙的视觉错觉图片集锦
  18. 客户人群画像分析 客户进行用户画像实现精准营销- Whale帷幄
  19. kafka Java客户端之 consumer API 消费消息
  20. css3 中@font-face 一个css文件可以定义多种字体

热门文章

  1. 为什么局域网 IP 通常以 192.168 开头而不是 1.2 或者 193.169 ?
  2. python getattrribute_Python学习——面向对象高级之反射
  3. Java基础-Java概述(第一、二章)
  4. 哔哩下载姬v1.3.3 B站视频下载工具
  5. CrossOver让你在M1Mac计算机运行Windows应用程序
  6. 一文说明前端和后端的区别、职业发展以及就业前景!
  7. python opencv 截取矩形区域_python+OpenCV 鼠标交互图片切割矩形区域
  8. STM32单片机通过ESP8266WiFi模块与Android APP实现数据传输(二)---上位机搭建
  9. react大数据量渲染_React大量数据渲染的绝佳解决方案——React虚拟化组件
  10. 【C++000】ASCII码转换公式(大小写转换)