| @@ -0,0 +1,164 @@ | |||||
| package com.iformall.utils.car; | |||||
| import com.alibaba.fastjson.JSON; | |||||
| import com.alibaba.fastjson.JSONObject; | |||||
| import com.iformall.utils.DateUtils; | |||||
| import org.apache.http.Consts; | |||||
| import org.apache.http.HttpEntity; | |||||
| import org.apache.http.HttpResponse; | |||||
| import org.apache.http.client.methods.HttpPost; | |||||
| import org.apache.http.entity.StringEntity; | |||||
| import org.apache.http.impl.client.CloseableHttpClient; | |||||
| import org.apache.http.impl.client.HttpClients; | |||||
| import org.apache.http.message.BasicHeader; | |||||
| import org.apache.http.protocol.HTTP; | |||||
| import org.apache.http.util.EntityUtils; | |||||
| import org.slf4j.Logger; | |||||
| import org.slf4j.LoggerFactory; | |||||
| import java.io.IOException; | |||||
| import java.security.MessageDigest; | |||||
| import java.security.NoSuchAlgorithmException; | |||||
| import java.text.SimpleDateFormat; | |||||
| import java.util.Date; | |||||
| import java.util.HashMap; | |||||
| import java.util.Map; | |||||
| /** | |||||
| * 尚安停车 | |||||
| */ | |||||
| public class ShangAnUtil { | |||||
| private final static Logger logger = LoggerFactory.getLogger(ShangAnUtil.class); | |||||
| public static final String KEY = "NzMFFDDJDIFACACCM2zAezDz"; | |||||
| public static final String PARK_NUMBER = "p190829183435"; | |||||
| public static final String URL = "http://www.p-share.com/shangan-yhq/web/api/outcoupon"; | |||||
| public static final String SUCCESS = "success"; | |||||
| public static final SimpleDateFormat dateInFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | |||||
| public static void main(String[] args) throws Exception { | |||||
| String carNumber = "京XAZMF1"; | |||||
| Date myDate = DateUtils.getHourTimeAfter(1, new Date()); | |||||
| String result = couponSend(URL, KEY, PARK_NUMBER, "1", myDate, carNumber, "1500"); | |||||
| JSONObject obj = JSON.parseObject(result); | |||||
| } | |||||
| /** | |||||
| * md5算法 | |||||
| * @param data | |||||
| * @return | |||||
| * @throws NoSuchAlgorithmException | |||||
| */ | |||||
| public static String md5(String data) throws NoSuchAlgorithmException { | |||||
| MessageDigest md = MessageDigest.getInstance("MD5"); | |||||
| md.update(data.getBytes()); | |||||
| StringBuffer buf = new StringBuffer(); | |||||
| byte[] bits = md.digest(); | |||||
| for(int i=0;i<bits.length;i++){ | |||||
| int a = bits[i]; | |||||
| if(a<0) a+=256; | |||||
| if(a<16) buf.append("0"); | |||||
| buf.append(Integer.toHexString(a)); | |||||
| } | |||||
| return buf.toString(); | |||||
| } | |||||
| /** | |||||
| * 签名 | |||||
| * @param key | |||||
| * @param parkNumber | |||||
| * @return | |||||
| * @throws NoSuchAlgorithmException | |||||
| */ | |||||
| public static String getSign(String key, String parkNumber) throws NoSuchAlgorithmException { | |||||
| String signValue = md5(key + parkNumber).toUpperCase(); | |||||
| logger.debug("sign: " + signValue); | |||||
| return signValue; | |||||
| } | |||||
| public static String couponSend(String url, String key, String parkNumber, String couponModelId, Date couponDate, String plate, String position) { | |||||
| Map<String, String> params = new HashMap<>(); | |||||
| params.put("parkNum", parkNumber); | |||||
| params.put("couponModeId", couponModelId); | |||||
| params.put("couponDate", dateInFormat.format(couponDate)); | |||||
| params.put("plate", plate); | |||||
| params.put("position", position); | |||||
| try { | |||||
| String result = Proc(url, key, parkNumber, params); | |||||
| return result; | |||||
| } catch (Exception e) { | |||||
| return null; | |||||
| } | |||||
| } | |||||
| private static String Proc(String url, String key, String parkNumber, Map<String, String> paramMap) { | |||||
| CloseableHttpClient httpClient = HttpClients.createDefault(); | |||||
| HttpPost httpPost = new HttpPost(url); | |||||
| httpPost.addHeader(HTTP.CONTENT_TYPE,"application/json"); | |||||
| httpPost.addHeader("Accept", "application/json"); | |||||
| httpPost.addHeader("Accept-Encoding", "UTF-8"); | |||||
| String sign = null; | |||||
| try{ | |||||
| sign = getSign(key, parkNumber); | |||||
| httpPost.addHeader("sign", sign); | |||||
| }catch(NoSuchAlgorithmException e) { | |||||
| logger.error(e.getLocalizedMessage()); | |||||
| } | |||||
| String jsonstr = JSON.toJSONString(paramMap); | |||||
| logger.info(jsonstr); | |||||
| try { | |||||
| StringEntity se = new StringEntity(jsonstr, Consts.UTF_8); | |||||
| se.setContentType("application/json"); | |||||
| se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"UTF-8")); | |||||
| httpPost.setEntity(se); | |||||
| } catch (Exception e) { | |||||
| logger.error(e.getMessage()); | |||||
| } | |||||
| HttpResponse response = null; | |||||
| try { | |||||
| response = httpClient.execute(httpPost); | |||||
| } catch (Exception e) { | |||||
| logger.error(e.getLocalizedMessage()); | |||||
| } | |||||
| String result = null; | |||||
| //打印StatusLine | |||||
| logger.debug("StatusLine: " + response.getStatusLine()); | |||||
| try{ | |||||
| //获取实体 | |||||
| HttpEntity httpEntity= response.getEntity(); | |||||
| result = EntityUtils.toString(httpEntity, "UTF-8"); | |||||
| logger.debug(result); | |||||
| } catch (Exception e) { | |||||
| logger.error(e.getLocalizedMessage()); | |||||
| } | |||||
| try { //关闭流并释放资源 | |||||
| httpClient.close(); | |||||
| } catch (IOException e) { | |||||
| logger.error(e.getLocalizedMessage()); | |||||
| } | |||||
| return result; | |||||
| } | |||||
| } | |||||