武电实业卡密接口对接经验分享
Posted 蟹丸
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了武电实业卡密接口对接经验分享相关的知识,希望对你有一定的参考价值。
以往卡密都是电信直接提供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 }
若以上有哪些语句不对的麻烦大家及时指出,相互学习相互进步,谢谢阅读。
以上是关于武电实业卡密接口对接经验分享的主要内容,如果未能解决你的问题,请参考以下文章