栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

中国移动云mas短信对接(webservice)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

中国移动云mas短信对接(webservice)

额,我也不知道弄撒类,移动短信和我这么有缘,对接完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;


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;

    }


}
  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;


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());
    }


}

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/271549.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号