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;
|
}
|
|
}
|