3c2353cd
杜方
1、畅游通核销app源码提交;
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
package com.ectrip.trips.net;
import java.io.UnsupportedEncodingException;
import com.alibaba.fastjson.JSON;
import com.ectrip.cyt.base.DataTrans;
import com.ectrip.cyt.base.Request;
import com.ectrip.cyt.base.Response;
import com.ectrip.cyt.config.MyApp;
import com.ectrip.cyt.utils.Base64;
import com.ectrip.cyt.utils.LogUtil;
import com.fourmob.datetimepicker.Utils;
public class DataTool {
/**
* 通过signkey和data验证数据,验证通过会返回true,未通过返回false
* 不建议外部调用此方法
* @param signkey
* @param data
* @param signed
* @return
*/
public static boolean checkData(String signkey,String data,String signed){
return signed.equals(getSign(signkey,data));
}
/**
* 通过signkey和实体验证数据, 验证通过返回该实体, 未通过返回null
* 不建议外部调用此方法
* @param dataTrans
* @return
*/
protected static DataTrans checkData(String signkey,DataTrans dataTrans){
return checkData(signkey,dataTrans.getData(),dataTrans.getSigned())==true?dataTrans:null;
}
/**
* 通过dataTransJsonStr字符串验证数据, 验证通过返回该字符串对应的实体, 未通过返回null
* 在接收到字符串时可以使用此方法, 建议验证时调用此方法
* 此方法会给request或response塞值
* @param dataTransJsonStr
* @return
*/
public static DataTrans checkData(String signkey,String dataTransJsonStr,Class<?> dataType){
DataTrans dataTrans=checkData(signkey,(DataTrans)JSON.parseObject(dataTransJsonStr, DataTrans.class));
if(null!=dataTrans){
if(Request.class.isAssignableFrom(dataType)){
dataTrans.request=(Request)JSON.parseObject(dataTrans.getData(), dataType);
}else if(Response.class.isAssignableFrom(dataType)){
dataTrans.response=(Response)JSON.parseObject(dataTrans.getData(), dataType);
}
}
return dataTrans;
};
public static DataTrans checkData(String signkey,String dataTransJsonStr){
return checkData(signkey,(DataTrans)JSON.parseObject(dataTransJsonStr, DataTrans.class));
};
/**
* 签名
* @param signkey
* @param data
* @return
*/
// public static String getSign(String signkey,String data){
// //签名: md5(分配的密匙+base64(data))
// try {
// String signdata=signkey+data;
// return MD5Util.signMD5(new String(
// Base64.encodeBase64(signdata.getBytes("UTF-8"))),
// "UTF-8");
// } catch (UnsupportedEncodingException e) {
// e.printStackTrace();
// }
// return "";
// }
public static String getSign(String signkey,String data){
//签名: md5(分配的密匙+base64(data))
byte[] responseByte = null;
try {
String signData = signkey + data;
String base64 = Base64.encode(signData.getBytes("UTF-8"));
LogUtil.i("responseData:" + base64);
String responseSign = MD5Util.signMD5(base64,"UTF-8");
LogUtil.i("responseSign:" + responseSign);
return responseSign;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
LogUtil.i("OTA Service : getErrorResponseJson : String to xml UTF-8 Error !");
}catch (Exception e){
e.printStackTrace();
}
return "";
}
/**
* 给对象 赋 签名, 返回带有签名的完整对象, 在对象需要赋值签名并且该对象还要继续被调用时 使用此方法
* @param datain
* @return
*/
public static DataTrans envelopeData(String signkey,DataTrans datain){
datain.setSigned(getSign(signkey,datain.getData()));
return datain;
}
/**
* 给对象 赋 签名, 返回带有签名的完整字符串, 在把对象封装成json字符串时使用此方法
* @param datain
* @param signkey 标识
* @param identity 编码
* @return
*/
public static String envelopeData(Object requestOrResponse,String signkey,String identity){
String data = null;
try {
data = JSON.toJSONString(requestOrResponse);
} catch (Exception e) {
e.printStackTrace();
}
return JSON.toJSONString(new DataTrans(data, getSign(signkey, data), identity));
}
}
|