一.登录官网,下载webservice接入文档额,我也不知道弄撒类,移动短信和我这么有缘,对接完http的后来又说因为种种原因不能用,又要重新对接过webservice版本的,没办法,谁叫咱是打工人呢,话不多说,直接开整
官网地址为:云mas业务平台
打开文档,我们可以看到整整12页,真的是头大,好吧直接挑重点
根据文档可以总结一下几点:
- 发送短信方法为sendSms
- 所需的参数需要拼接成一个xml
- xml中的mac参数要根据特定规则拼接并计算md5
- 响应结果中success值为true即可判定短信发送成功
-
直接在项目存放代码的目录下打开cmd窗口执行以下代码:
wsimport -keep http://112.35.10.201:1999/smsservice?wsdl
-
生成好的客户端代码长这样:
- 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;
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 = "";
public static String getMac(String phone, String content) {
// 按规则拼接mac
StringBuffer 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();
}
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();
}
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");
}
public static Boolean parseSmsResponseXml(String xmlStr) {
if (StringUtils.isNotBlank(xmlStr)) {
document doc;
String success = null;
// 将字符串转为XML
try {
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;
}
}
- 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;
public class Md5Util2 {
static final char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
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;
}
}
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;
}
}
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);
}
public static boolean valid(String text, String md5) {
return md5.equals(MD5(text)) || md5.equals(MD5(text).toUpperCase());
}
public static String MD5(String... params) {
StringBuilder sb = new StringBuilder();
for (String param : params) {
sb.append(param);
}
return MD5(sb.toString());
}
}
通过测试也是可以成功发送短信,对此,对接完成



