联通在信业务SP反向退订

来源:互联网 发布:素材软件 编辑:程序博客网 时间:2024/04/19 06:48

1、需求说明

搞了一段时间联通在信业务,由于某些原因,需要对一批号码进行批量退订

2、知识点说明

1、http请求,由于请求接口返回只是类似Error$000000或者OK,采用的是org.apache.commons.httpclient.HttpClient
2、3DES加密
3、BASE64加码解码

3、代码

直接上代码吧,不说废话,主要是TripleDES.java和QuxiaoBY.java两个类
不愿意看的,直接下demo吧demo下载
3.1、TripleDES.java

import java.security.Security;import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;public class TripleDES {    private static final Cipher cipher = initCipher();    private static final BASE64Encoder base64 = new BASE64Encoder();    private static final Cipher initCipher() {        try {            // 添加新安全算法:PKCS7            Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());            String algorithm = "DESede/ECB/PKCS7Padding";            SecretKey desKey = new SecretKeySpec(                    (new BASE64Decoder())                            .decodeBuffer(Common.DES_KEY_STRING),                    algorithm);            Cipher tcipher = Cipher.getInstance(algorithm);            tcipher.init(Cipher.ENCRYPT_MODE, desKey);            return tcipher;        } catch (Exception e) {            e.printStackTrace();        }        return null;    }    public static String encrypt1(String src) {        return base64.encode(encrypt(src.getBytes()));    }    public static byte[] encrypt(byte[] src) {        try {            return cipher.doFinal(src);        } catch (Exception e) {            e.printStackTrace();        }        return null;    }    public static void main(String[] args) throws Exception {        System.out.println("1-->"+encrypt1("12345"));    }}

3.2、QuxiaoBY.java

import java.io.IOException;import java.io.UnsupportedEncodingException;import java.net.URLEncoder;import java.sql.SQLException;import java.text.ParseException;import java.util.HashMap;import java.util.List;import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpException;import org.apache.commons.httpclient.HttpStatus;import org.apache.commons.httpclient.methods.GetMethod;import org.apache.commons.httpclient.params.HttpMethodParams;public class QuxiaoBY {    public static void selectbyhaoma() throws SQLException, IOException {        List byhmList = DbUtil.selectAll("select phone,accesstime from t_byhaoma");        //System.out.println("list:" + byhmList.get(0));        for (int i = 0; i < byhmList.size(); i++) {            HashMap<String, Object> hm = (HashMap<String, Object>) byhmList                    .get(i);            System.out.println(String.valueOf(i)+"-->>"+hm.get("phone") + "-->>"                    + requesturl(hm));        }    }    public static String desString(HashMap<String, Object> hashMap) throws UnsupportedEncodingException {        String orignalString =Common.SPNUMBER_STRING + "$" + hashMap.get("phone")                + "$" + Common.SERVICE_TAG_STRING + "$" + hashMap.get("accesstime");        String EncodeStr = URLEncoder.encode(TripleDES                .encrypt1((orignalString)),"UTF-8");        //System.out.println(orignalString+"<<<<>>>"+EncodeStr);        return EncodeStr;    }    public static String requesturl(HashMap<String, Object> hashMap) throws UnsupportedEncodingException {        String strurl = Common.TUIDING_URL + "SpNumber="+Common.SPNUMBER_STRING+"&AccessTime="+((String)hashMap.get("accesstime")).replace(" ", "%20")+"&EncodeStr="+desString(hashMap);        String resultString = "null";        HttpClient httpClient = new HttpClient();        // 创建GET方法的实例        GetMethod getMethod = new GetMethod(strurl);        // 使用系统提供的默认的恢复策略        getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,                new DefaultHttpMethodRetryHandler());        try {            // 执行getMethod            int statusCode = httpClient.executeMethod(getMethod);            if (statusCode != HttpStatus.SC_OK) {                System.err.println("Method failed: "                        + getMethod.getStatusLine());            }            // 读取内容            byte[] responseBody = getMethod.getResponseBody();            // 处理内容            resultString =  new String(responseBody);        } catch (HttpException e) {            // 发生致命的异常,可能是协议不对或者返回的内容有问题            System.out.println("Please check your provided http address!");            e.printStackTrace();        } catch (IOException e) {            // 发生网络异常            e.printStackTrace();        } finally {            // 释放连接            getMethod.releaseConnection();        }        return resultString;    }    public static void main(String[] args) throws IOException, SQLException,            ParseException {        selectbyhaoma();        System.out.println("end");    }}

3.3、DbUtil.java

import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.List;import java.util.Map;/** * @author zyq * @created 2016-12-18 */public class DbUtil {    public static List selectAll(String sql) throws SQLException {        Connection conn = null;        PreparedStatement ps = null;        ResultSet rs = null;        try {            Class.forName(Common.DRIVER);            conn = DriverManager.getConnection(Common.URL, Common.USERNAME,                    Common.PASSWORD);            ps = conn.prepareStatement(sql);            rs = ps.executeQuery();            if (rs == null)                      return Collections.EMPTY_LIST;                  ResultSetMetaData md = (ResultSetMetaData) rs.getMetaData(); //得到结果集(rs)的结构信息,比如字段数、字段名等                  int columnCount = md.getColumnCount(); //返回此 ResultSet 对象中的列数                  List list = new ArrayList();                  Map rowData = new HashMap();                  while (rs.next()) {                   rowData = new HashMap(columnCount);                   for (int i = 1; i <= columnCount; i++) {                           rowData.put(md.getColumnName(i), rs.getObject(i));                   }                   list.add(rowData);                  }                  return list;           } catch (Exception e) {            e.printStackTrace();        } finally {            if (rs != null) {                rs.close();            }            if (ps != null) {                ps.close();            }            if (conn != null) {                conn.close();            }        }        return null;    }}

3.4、Common.java

/** * @author zyq * @created 2016-12-18 */public class Common {    // connect the database    public static final String DRIVER = "com.mysql.jdbc.Driver";    public static final String DB_NAME = "test";    public static final String USERNAME = "root";    public static final String PASSWORD = "12345";    public static final String IP = "127.0.0.1";    public static final String PORT = "3306";    public static final String URL = "jdbc:mysql://" + IP + ":" + PORT + "/" + DB_NAME+"?characterEncoding=utf-8";    public static final String TUIDING_URL = "http://www.tuiding.com?";//请求地址    public static final String SPNUMBER_STRING ="10650000";//spnumber    public static final String SERVICE_TAG_STRING = "xxxx";//指令    public static final String DES_KEY_STRING = "xxxx";//密钥}
0 0