package com.hx.mp.util; import java.io.IOException; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Ӧ������ Ӧ������̳д��࣬��дisTenpaySign�������ɡ� *JX *linhan */ public class ResponseHandler { /** ��Կ */ private String key; /** Ӧ��IJ��� */ @SuppressWarnings("rawtypes") private SortedMap parameters; /** debug��Ϣ */ private String debugInfo; private HttpServletRequest request; private HttpServletResponse response; private String uriEncoding; /** * ���캯�� * * @param request * @param response */ @SuppressWarnings("rawtypes") public ResponseHandler(HttpServletRequest request, HttpServletResponse response) { this.request = request; this.response = response; this.key = ""; this.parameters = new TreeMap(); this.debugInfo = ""; this.uriEncoding = ""; Map m = this.request.getParameterMap(); Iterator it = m.keySet().iterator(); while (it.hasNext()) { String k = (String) it.next(); String v = ((String[]) m.get(k))[0]; this.setParameter(k, v); } } /** * ��ȡ��Կ */ public String getKey() { return key; } /** * ������Կ */ public void setKey(String key) { this.key = key; } /** * ��ȡ����ֵ * * @param parameter * ������� * @return String */ public String getParameter(String parameter) { String s = (String) this.parameters.get(parameter); return (null == s) ? "" : s; } /** * ���ò���ֵ * * @param parameter * ������� * @param parameterValue * ����ֵ */ @SuppressWarnings("unchecked") public void setParameter(String parameter, String parameterValue) { String v = ""; if (null != parameterValue) { v = parameterValue.trim(); } this.parameters.put(parameter, v); } /** * �������еIJ��� * * @return SortedMap */ @SuppressWarnings("rawtypes") public SortedMap getAllParameters() { return this.parameters; } /** * �Ƿ�Ƹ�ͨǩ��,������:���������a-z����,������ֵ�IJ���μ�ǩ�� * * @return boolean */ @SuppressWarnings("rawtypes") public boolean isTenpaySign() { StringBuffer sb = new StringBuffer(); Set es = this.parameters.entrySet(); Iterator it = es.iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); String k = (String) entry.getKey(); String v = (String) entry.getValue(); if (!"sign".equals(k) && null != v && !"".equals(v)) { sb.append(k + "=" + v + "&"); } } sb.append("key=" + this.getKey()); // ���ժҪ String enc = TenpayUtil.getCharacterEncoding(this.request, this.response); String sign = MD5Util.MD5Encode(sb.toString(), enc).toLowerCase(); String tenpaySign = this.getParameter("sign").toLowerCase(); // debug��Ϣ this.setDebugInfo(sb.toString() + " => sign:" + sign + " tenpaySign:" + tenpaySign); return tenpaySign.equals(sign); } /** * ���ش������Ƹ�ͨ�������� * * @param msg * : Success or fail�� * @throws IOException */ public void sendToCFT(String msg) throws IOException { String strHtml = msg; PrintWriter out = this.getHttpServletResponse().getWriter(); out.println(strHtml); out.flush(); out.close(); } /** * ��ȡuri���� * * @return String */ public String getUriEncoding() { return uriEncoding; } /** * ����uri���� * * @param uriEncoding * @throws UnsupportedEncodingException */ @SuppressWarnings("rawtypes") public void setUriEncoding(String uriEncoding) throws UnsupportedEncodingException { if (!"".equals(uriEncoding.trim())) { this.uriEncoding = uriEncoding; // ����ת�� String enc = TenpayUtil.getCharacterEncoding(request, response); Iterator it = this.parameters.keySet().iterator(); while (it.hasNext()) { String k = (String) it.next(); String v = this.getParameter(k); v = new String(v.getBytes(uriEncoding.trim()), enc); this.setParameter(k, v); } } } /** * ��ȡdebug��Ϣ */ public String getDebugInfo() { return debugInfo; } /** * ����debug��Ϣ */ protected void setDebugInfo(String debugInfo) { this.debugInfo = debugInfo; } protected HttpServletRequest getHttpServletRequest() { return this.request; } protected HttpServletResponse getHttpServletResponse() { return this.response; } }