package com.hx.mp.util; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; 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; /** * �������� ��������̳д��࣬��дcreateSign�������ɡ� *JX *linhan */ public class RequestHandler { /** ���url��ַ */ private String gateUrl; /** ��Կ */ private String key; /** ����IJ��� */ @SuppressWarnings("rawtypes") private SortedMap parameters; /** debug��Ϣ */ private String debugInfo; private HttpServletRequest request; private HttpServletResponse response; /** * ���캯�� * * @param request * @param response */ /*@SuppressWarnings("rawtypes") public RequestHandler(HttpServletRequest request, HttpServletResponse response) { this.request = request; this.response = response; this.gateUrl = "https://gw.tenpay.com/gateway/pay.htm"; this.key = ""; this.parameters = new TreeMap(); this.debugInfo = ""; }*/ /** * ���캯�� * @param request * @param response */ public RequestHandler(HttpServletRequest request, HttpServletResponse response) { this.request = request; this.response = response; this.gateUrl = "https://gw.tenpay.com/gateway/pay.htm"; this.key = ""; this.parameters = new TreeMap(); this.debugInfo = ""; } /** * ��ʼ������ */ public void init() { // nothing to do } /** * ��ȡ��ڵ�ַ,�������ֵ */ public String getGateUrl() { return gateUrl; } /** * ������ڵ�ַ,�������ֵ */ public void setGateUrl(String gateUrl) { this.gateUrl = gateUrl; } /** * ��ȡ��Կ */ 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; } /** * ��ȡdebug��Ϣ */ public String getDebugInfo() { return debugInfo; } /** * ��ȡ����������URL * * @return String * @throws UnsupportedEncodingException */ /*@SuppressWarnings("rawtypes") public String getRequestURL() throws UnsupportedEncodingException { this.createSign(); StringBuffer sb = new StringBuffer(); String enc = TenpayUtil.getCharacterEncoding(this.request, this.response); 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 (!"spbill_create_ip".equals(k)) { sb.append(k + "=" + URLEncoder.encode(v, enc) + "&"); } else { sb.append(k + "=" + v.replace(".", "%2E") + "&"); } } // ȥ�����һ��& String reqPars = sb.substring(0, sb.lastIndexOf("&")); return this.getGateUrl() + "?" + reqPars; }*/ /** * ��ȡ����������URL * @return String * @throws UnsupportedEncodingException */ public String getRequestURL() throws UnsupportedEncodingException { this.createSign(); StringBuffer sb = new StringBuffer(); String enc = TenpayUtil.getCharacterEncoding(this.request, this.response); 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(!"spbill_create_ip".equals(k)) { sb.append(k + "=" + URLEncoder.encode(v, enc) + "&"); } else { sb.append(k + "=" + v.replace(".", "%2E") + "&"); } } //ȥ�����һ��& String reqPars = sb.substring(0, sb.lastIndexOf("&")); return this.getGateUrl() + "?" + reqPars; } public void doSend() throws UnsupportedEncodingException, IOException { this.response.sendRedirect(this.getRequestURL()); } /** * TODO 生成签名 */ @SuppressWarnings("rawtypes") public String createSign() { 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 (null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)) { sb.append(k + "=" + v + "&"); } } sb.append("key=" + this.getKey()); System.out.println("sb="+sb); String enc = TenpayUtil.getCharacterEncoding(this.request, this.response); String sign = MD5Util.MD5Encode(sb.toString(), enc).toUpperCase(); this.setParameter("sign", sign); // debug��Ϣ this.setDebugInfo(sb.toString() + " => sign:" + sign); return sign; } /** * ����debug��Ϣ */ protected void setDebugInfo(String debugInfo) { this.debugInfo = debugInfo; } protected HttpServletRequest getHttpServletRequest() { return this.request; } protected HttpServletResponse getHttpServletResponse() { return this.response; } }