API接入

代码描述:基于JAVA的千游互娱API服务接口调用示例

关联数据:购卡查询API服务

接口地址:

http://api.qianyou.cn:11140/queryBuyCardOrder


 qianyou

     

 2017-12-27 13:34

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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180

import com.fasterxml.jackson.databind.JsonNode;

import com.fasterxml.jackson.databind.ObjectMapp

import org.apache.commons.httpclient.HttpClient;

import org.apache.commons.httpclient.MultiThread

import org.apache.commons.httpclient.NameValuePa

import org.apache.commons.httpclient.methods.Pos

import org.apache.commons.httpclient.params.Http

import org.apache.commons.lang3.StringUtils;

import java.io.IOException;

import java.security.MessageDigest;

import java.util.ArrayList;

import java.util.LinkedHashMap;

import java.util.List;

import java.util.Map;

/**

* 游戏查询购卡订单示例代码

*

* @Author 千游互娱 www.qianyou.cn

*/

public class QianyouQueryBuyCardOrderDemo {

//配置您申请的KEY

private static final String SIGNKEY = "";

//购卡查询请求接口地址

private static final String REQUESTURL = "http://api.qianyou.cn:11140/queryBuyCardOrder";

public static void main(String[] args) {

requestQueryOrder();

}

/**

* 查询请求方法

*/

private static void requestQueryOrder() {

//1.组装请求参数

Map<String, String> originalRequestParam = new LinkedHashMap();//请求参数

originalRequestParam.put("userNo", "");//用户编号,注册www.qianyou.cn的手机号码

originalRequestParam.put("orderId", "");//用户订单号

//2.生成签名

String signKey = getSinkey(originalRequestParam);//生成签名

originalRequestParam.put("sign", signKey);

//3.组装请求参数

NameValuePair[] requestParams = combineRequestParam(originalRequestParam);

//4.发起请求

String response = PostWithCharset(REQUESTURL, requestParams, "UTF-8", 30 * 1000, 30 * 1000, true);

ObjectMapper objectMapper = new ObjectMapper();

try {

JsonNode jsonNode = objectMapper.readTree(response);

if (StringUtils.equals(jsonNode.get("code").asText(), "1008")) {

System.out.println(jsonNode.get("orderState").asInt());

//5.卡密解密

List<HashMap<String, String>> card = objectMapper.readValue(jsonNode.get("card").toString(), List.class);

System.out.println(decodeValue(StringUtils.left("", 8), card.get(0).get("cardPwd")));

return;

}

System.out.println(jsonNode.get("code") + ":" + jsonNode.get("msg"));

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 生成签名

*

* @param requestParams 请求参数

* @return

*/

private static String getSinkey(Map requestParams) {

StringBuffer source = new StringBuffer(50);

requestParams.forEach((key, value) -> source.append(key).append(value));

source.append(SIGNKEY);

return getMd5(source.toString(), true, "UTF-8");

}

/**

* 组装请求参数

*

* @param requestParams 请求参数

* @return

*/

private static NameValuePair[] combineRequestParam(Map<String, String> requestParams) {

List nameValuePairs = new ArrayList<>();

requestParams.forEach((key, value) -> nameValuePairs.add(new NameValuePair(key, value)));

return (NameValuePair[]) nameValuePairs.toArray(new NameValuePair[nameValuePairs.size()]);

}

/**

* 发送Http请求工具

*

* @param requestUrl 请求地址

* @param requestParams 请求数据

* @param charset 编码格式

* @param conntimeout 连接超时时间(毫秒)

* @param sotimeout 读取超时时间(毫秒)

* @param fag 是否启用多线程

* @return

*/

private static String PostWithCharset(String requestUrl, NameValuePair[] requestParams, String charset, int conntimeout, int sotimeout, boolean fag) {

String returnStr = "";

PostMethod postMethod = null;

try {

HttpClient client;

if (fag) {

MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();

client = new HttpClient(connectionManager);

} else {

client = new HttpClient();

}

postMethod = new PostMethod(requestUrl);

postMethod.setRequestBody(requestParams);

client.getHttpConnectionManager().getParams().setConnectionTimeout(conntimeout);

postMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, charset);

client.getHttpConnectionManager().getParams().setSoTimeout(sotimeout);

client.executeMethod(postMethod);

returnStr = postMethod.getResponseBodyAsString();

} catch (Exception e) {

e.printStackTrace();

} finally {

postMethod.releaseConnection();

}

return returnStr;

}

/**

* *

* MD5工具类

*

* @param plainText 需要加密的字符串

* @param md5Format true 32位,false 16 位

* @param charset 字符集格式

* @return

*/

private static String getMd5(String plainText, boolean md5Format, String charset) {

String md5Str = "";

try {

MessageDigest messageDigest = MessageDigest.getInstance("MD5");

messageDigest.update(plainText.trim().getBytes(charset));

byte hashBytes[] = messageDigest.digest();

int i;

StringBuffer tempStr = new StringBuffer(32);

for (int offset = 0; offset < hashBytes.length; offset++) {

i = hashBytes[offset];

if (i < 0)

i += 256;

if (i < 16)

tempStr.append("0");

tempStr.append(Integer.toHexString(i));

}

if (md5Format) {

md5Str = tempStr.toString().toUpperCase();

} else {

md5Str = tempStr.toString().substring(8, 24).toUpperCase();

}

} catch (Exception e) {

e.printStackTrace();

}

return md5Str;

}

/**

* DES算法,解密

*

* @param key 加密私钥,使用接口key前8位

* @param data 待解密字符串

* @return 解密前的数据,一般结合Base64编码使用

*/

public static String decodeValue(String key, String data) {

byte[] datas;

String value = null;

try {

DESKeySpec dks = new DESKeySpec(key.getBytes());

SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");

// key的长度不能够小于8位字节

Key secretKey = keyFactory.generateSecret(dks);

Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");

cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec("********".getBytes()));

datas = cipher.doFinal(Base64.decodeBase64(data));

} catch (Exception e) {

e.printStackTrace();

return null;

}

value = new String(datas);

if (value.equals("")) {

return null;

}

return value;

}

}

千游互娱平台-游戏点卡充值 视频会员直充 卡密购买 API接口