package edu.fudan.weixin.model; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.alibaba.fastjson.JSON; import edu.fudan.weixin.entity.payment.PaymentRequest; import edu.fudan.weixin.entity.payment.PaymentResult; public class PaymentInfoModel { private PaymentRequest pr; public PaymentRequest getPaymentRequest() { return pr; } public void setPaymentRequest(PaymentRequest pr) { this.pr = pr; } public PaymentInfoModel(PaymentRequest pi) { this.pr = pi; } public String createURL() throws UnsupportedEncodingException { String[] signParameters = pr.getSignParameters(); String[] otherParameters = pr.getOtherParameters(); HashMap<String, Object> values = (HashMap<String, Object>) pr .getValues(); StringBuffer params = new StringBuffer("sign="); params.append(pr.getSign()); for (int i = 0; i < signParameters.length; i++) { Object value = values.get(signParameters[i]); if (value != null) { params.append("&"); params.append(signParameters[i]); params.append("="); params.append(URLEncoder.encode(String.valueOf(value), "UTF-8")); } } for (int i = 0; i < otherParameters.length; i++) { Object value = values.get(otherParameters[i]); if (value != null) { params.append("&"); params.append(otherParameters[i]); params.append("="); params.append(URLEncoder.encode(String.valueOf(value), "UTF-8")); } } return params.toString(); } /** * @param get * Http Request 模式,true 为 GET,false 为 POST * @param url * String 形式的连接地址 */ public PaymentResult getResponse(boolean get, String url) throws Exception { String urlParameters = this.createURL(); if (pr.getClass().getName() .equals("edu.fudan.weixin.entity.payment.QueryDeal")) get = false; URL destURL; if (get) { destURL = new URL(url.concat("?").concat(urlParameters)); } else { destURL = new URL(url); } HttpURLConnection con = (HttpURLConnection) destURL.openConnection(); // add request header con.setRequestProperty( "User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36"); con.setRequestProperty("Accept-Language", "en-US,en;q=0.5"); // optional default is GET if (get) { con.setRequestMethod("GET"); } else { con.setRequestMethod("POST"); con.setDoOutput(true); DataOutputStream wr = new DataOutputStream(con.getOutputStream()); wr.writeBytes(urlParameters); wr.flush(); wr.close(); } int responseCode = con.getResponseCode(); BufferedReader in = new BufferedReader(new InputStreamReader( con.getInputStream())); String inputLine; String singleLine = ""; List<Map> response = new ArrayList<Map>(); while ((inputLine = in.readLine()) != null) { if(inputLine.startsWith("{")) response.add((Map) JSON.parse(inputLine)); else singleLine = inputLine; } in.close(); if (pr.getReturnType().equalsIgnoreCase("data")) return resolveDataResponse(response); else return resolveSimpleResponse(singleLine); } private PaymentResult resolveSimpleResponse(String result) { PaymentResult pr = new PaymentResult(true); pr.setResultCode(result); return pr; } private PaymentResult resolveDataResponse(List result) { PaymentResult pr = new PaymentResult(false); /* * System.out.println(sb.toString()); String[] results = new * String(sb).split("\n"); for(int i=0; i < results.length; i++ ) { if(i * == 0) pr.setResultSummary((Map)JSON.parse(results[i])); else * pr.addResultDetail((Map)JSON.parse(results[i])); } * System.out.println(sb.toString()); Object result = JSON.parse(new * String(sb)); */ pr.setResultSummary((Map) result.get(0)); for (int i = 1; i < result.size(); i++) pr.addResultDetail((Map) result.get(i)); pr.setResultCode(pr.getCodeFromSummary()); return pr; } }