zoukankan      html  css  js  c++  java
  • 武电实业卡密接口对接经验分享

    以往卡密都是电信直接提供txt文件我们这边再导入数据库中,现在电信要求厂家获取卡密必须通过接口调用,此次对接主要用到三个方面知识:

    1.通过http Post请求方式将JSON数据放入body中传入,http数据交互post方式常用DefaultHttpClient(需要导入httpclient-4.1.jar,httpcode-4.1.jar,commons-logging-1.1.1.jar

     1 public static String post(String url, String content){
     2         String charsetName = "utf-8";
     3         DefaultHttpClient httpclient = null;
     4         HttpPost post = null;
     5         try {
     6             httpclient = new DefaultHttpClient();
     7             post = new HttpPost(url);
     8             post.setHeader("Content-Type", "application/json;charset=" + charsetName);
     9             post.setEntity(new StringEntity(content, charsetName));
    10             HttpResponse response = httpclient.execute(post);
    11             HttpEntity entity = response.getEntity();
    12             String rsp = EntityUtils.toString(entity, charsetName);
    13             return rsp;
    14         } catch (Exception e) {
    15             throw new RuntimeException(e);
    16         } finally {
    17             try {
    18                 httpclient.getConnectionManager().shutdown();
    19             } catch (Exception ignore) {}
    20         }
    21     }

    2.需要将传入的code以AES加密:

    武电实业提供文档如下:

    主要对传入json串中的code值进行加密(早期的对称加密方式为DES,DES被破解,又出来3DES加密算法基于DES基础之上,所以也很快被破解了,目前最为流行的为AES),博客园里有位博友的文章写的不错,大家有兴趣的可以看看: http://www.cnblogs.com/block2016/p/5596676.html

    加密方法如下:

     1 public static String Encrypt(String sSrc, String sKey) throws Exception {
     2         if (sKey == null) {
     3             System.out.print("Key为空null");
     4             return null;
     5         }
     6         // 判断Key是否为16(此处为AES 128位)
     7         if (sKey.length() != 16) {
     8             System.out.print("Key长度不是16");
     9             return null;
    10         }
    11         byte[] raw = sKey.getBytes();
    12         SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
    13         Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");//"算法/模式/补码方式"
    14         IvParameterSpec iv = new IvParameterSpec("1Zja83t262AXxn13".getBytes());//使用CBC模式,需要一个向量iv,可增加加密算法的强度
    15         cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
    16         byte[] encrypted = cipher.doFinal(sSrc.getBytes());
    17 
    18         return new BASE64Encoder().encode(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用。
    19     }

     3.返回值的获取,通过org.json.JSONObject(需要导入json.jar)对象解析json数据(android处理json数据经常用到,我们iptv业务处理json数据是采用jackson,需要导入jackson-all-1.9.5.jar);

    以下我将两种方式简单的写了出来:

     1     /**
     2      * {"dataInfo":{"cardNo":"itv200085","cardPwd":"ps2000085"},"message":"","status":"0"}
     3      * 对上面的json进行解析,获取所需要的值cardNo
     4      */
     5     /**
     6      * JSONObject方式解析json串
     7      */
     8     public static String JSONObectToString(String json){
     9         try {
    10             JSONObject jsonObject = new JSONObject(json);
    11             JSONObject dataInfo = jsonObject.getJSONObject("dataInfo");
    12             String cardNo = dataInfo.getString("cardNo");
    13             return cardNo;
    14         } catch (JSONException e) {
    15             e.printStackTrace();
    16         }
    17         return null;
    18     }
    19     /**
    20      * Jackson方式解析json串
    21      */
    22     public static String JacksonToString(String json){
    23         ObjectMapper mapper = new ObjectMapper();
    24         try {
    25             Map object = mapper.readValue(json, Map.class);
    26             Map map = new HashMap<>();
    27             map = (Map) object.get("dataInfo");
    28             String cardNo = (String) map.get("cardNo");
    29             return cardNo;
    30         } catch (IOException e) {
    31             e.printStackTrace();
    32         }
    33         return null;
    34     }

    若以上有哪些语句不对的麻烦大家及时指出,相互学习相互进步,谢谢阅读。

  • 相关阅读:
    RHCE
    Linux firewalld 防火墙
    ArcGIS案例学习笔记2_2
    HP LaserJet MFP M227_M231双面打印
    罗伯特•盖洛博士(Dr. Robert Charles Gallo)是世界著名的美国生物医学家,他以共同发现了人类免疫缺陷病毒(HIV)――这一导致获得性免疫缺陷综合症(AIDS)的致病源而闻名于世。
    砸向芯片科研的巨额经费去了哪儿?(转)
    tensorflow学习资料
    必备 .NET
    c# 7 vs2017 tuple
    ArcGIS 复制要素
  • 原文地址:https://www.cnblogs.com/ccylovehs/p/7591293.html
Copyright © 2011-2022 走看看