Java Http GET POST发送请求
本文写了1个java 发送GET请求以及2个java 发送POST请求,新手,不喜勿喷!
背景:
这是一个使用魔宝支付的demo,首先需要移动端提交商城订单,请求平台签名接口进行签名并获取支付所需要的要素,对支付公司返回的信息验签后返回移动端这些要素,移动端启动支付公司SDK进行支付交易,后续还有接收交易结果通知消息。
说明
- GET核心:CloseableHttpClient和CloseableHttpResponse,HttpGet
- POST核心:HttpURLConnection和HttpPost
功能步骤说明
- 第一步:GET请求从服务器签名接口进行签名操作;
- 第二步:GET请求至魔宝支付进行获取支付所需要素;
- 第三步:POST验签魔宝返回的签名信息,防篡改
静态变量
- 订单信息:private static String tranData = “XML订单信息”;
- 签名接口:private static String signUrl = “http://10.3.30.17:8099/chpay/v1/pay/mobao/sign“;
- 验签接口private static String verifyUrl = “http://10.3.30.17:8099/chpay/v1/pay/mobao/signature/verify“;
- 魔宝接口:private static String mobaoUrl = “http://182.148.123.7:8132/service“;
第一步:签名
- 在交易之前需要使用支付方提供的证书进行签名交易订单
/**
* 签名订单信息
*/
public static JSONObject testHttpGet(String data) throws UnsupportedEncodingException {
CloseableHttpClient httpClient = HttpClients.custom().disableContentCompression().build();
StringBuffer qUrl = new StringBuffer(signUrl);
qUrl.append("?tranData=" + URLEncoder.encode(data, "UTF-8"));
HttpGet httpget = new HttpGet(new String(qUrl));
try {
CloseableHttpResponse httpResponse = httpClient.execute(httpget);
HttpEntity entity = httpResponse.getEntity();
//返回内容
String res = EntityUtils.toString(entity, "UTF-8");
return JSONObject.parseObject(res);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
第二步:获取支付要素
- 使用支付方规定的格式,签名后请求支付公司接口得到支付所需要的要素,支付公司返回要素以及签名信息
public static String getPayElements(JSONObject json) throws UnsupportedEncodingException {
if (json.containsKey("message") && json.containsKey("signature")) {
String message = json.getString("message");
String signature = json.getString("signature");
String param = "message=" + message + "&signature=" + signature;
String paramEncode = URLEncoder.encode(param, "UTF-8");
CloseableHttpClient httpClient = HttpClients.custom().disableContentCompression().build();
StringBuffer qUrl = new StringBuffer(mobaoUrl);
qUrl.append("?message=" + URLEncoder.encode(message, "UTF-8"));
qUrl.append("&signature=" + URLEncoder.encode(signature, "UTF-8"));
HttpGet httpget = new HttpGet(new String(qUrl));
try {
CloseableHttpResponse httpResponse = httpClient.execute(httpget);
HttpEntity entity = httpResponse.getEntity();
//返回内容
String res = EntityUtils.toString(entity, "UTF-8");
return res;
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
第三步:验签
- 获取支付要素时支付公司返回签名信息,需要进行验签,防止信息被篡改。
public static JSONObject verifySign(JSONObject jsonObject) {
if (jsonObject.containsKey("message") && jsonObject.containsKey("signature")) {
String message = jsonObject.getString("message");
String signature = jsonObject.getString("signature");
try {
//创建连接
URL url = new URL(verifyUrl);
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
connection.setUseCaches(false);
connection.setInstanceFollowRedirects(true);
// connection.setRequestProperty("Accept", "application/json"); // 设置接收数据的格式
connection.setRequestProperty("Content-Type", "application/json");
connection.connect();
//POST请求
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
JSONObject obj = new JSONObject();
obj.put("message", message);
obj.put("signature", signature);
out.writeBytes(obj.toString());
out.flush();
out.close();
//读取响应
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String lines;
StringBuffer sb = new StringBuffer("");
while ((lines = reader.readLine()) != null) {
lines = new String(lines.getBytes(), "utf-8");
sb.append(lines);
}
reader.close();
// 断开连接
connection.disconnect();
return JSONObject.parseObject(sb.toString());
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}
附:另外一个POST请求方式
public static String post(String json, String url) throws Exception{
StringEntity entity = new StringEntity(json, "utf-8");
entity.setContentType("application/json");
DefaultHttpClient client = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(entity);
HttpResponse response = client.execute(httpPost);
InputStream inputStream = response.getEntity().getContent();
StringBuffer buffer = new StringBuffer();
InputStreamReader inputReader = new InputStreamReader(inputStream);
BufferedReader bufferReader = new BufferedReader(inputReader);
String str;
while ((str = bufferReader.readLine()) != null) {
buffer.append(str);
}
bufferReader.close();
String jsonOut = buffer.toString();
return jsonOut;
}
我的联系方式:
- Q Q:1250052380
- 邮箱:1250052380@qq.com