You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					
					
						
							299 lines
						
					
					
						
							8.8 KiB
						
					
					
				
			
		
		
	
	
							299 lines
						
					
					
						
							8.8 KiB
						
					
					
				| //package com.ynxbd.wx.utils;
 | |
| //
 | |
| //
 | |
| //import java.io.UnsupportedEncodingException;
 | |
| //import java.net.URLEncoder;
 | |
| //import java.util.*;
 | |
| //import javax.servlet.http.HttpServletRequest;
 | |
| //import javax.servlet.http.HttpServletResponse;
 | |
| //
 | |
| ///*
 | |
| // '微信支付服务器签名支付请求请求类
 | |
| // '============================================================================
 | |
| // 'api说明:
 | |
| // 'init(app_id, app_secret, partner_key, app_key);
 | |
| // '初始化函数,默认给一些参数赋值,如cmdno,date等。
 | |
| // 'setKey(key_)'设置商户密钥
 | |
| // 'getLasterrCode(),获取最后错误号
 | |
| // 'GetToken();获取Token
 | |
| // 'getTokenReal();Token过期后实时获取Token
 | |
| // 'createMd5Sign(signParams);生成Md5签名
 | |
| // 'genPackage(packageParams);获取package包
 | |
| // 'createSHA1Sign(signParams);创建签名SHA1
 | |
| // 'sendPrepay(packageParams);提交预支付
 | |
| // 'getDebugInfo(),获取debug信息
 | |
| // '============================================================================
 | |
| // '*/
 | |
| //public class RequestHandler {
 | |
| //    private final HttpServletRequest request;
 | |
| //    private final HttpServletResponse response;
 | |
| //    /**
 | |
| //     * Token获取网关地址地址
 | |
| //     */
 | |
| //    private String tokenUrl;
 | |
| //    /**
 | |
| //     * 预支付网关url地址
 | |
| //     */
 | |
| //    private String gateUrl;
 | |
| //    /**
 | |
| //     * 查询支付通知网关URL
 | |
| //     */
 | |
| //    private String notifyUrl;
 | |
| //    /**
 | |
| //     * 商户参数
 | |
| //     */
 | |
| //    private String appId;
 | |
| //    private String appKey;
 | |
| //    private String partnerKey;
 | |
| //    private String appSecret;
 | |
| //    private String key;
 | |
| //    /**
 | |
| //     * 请求的参数
 | |
| //     */
 | |
| //    private Map<String, String> parameters;
 | |
| //    /**
 | |
| //     * Token
 | |
| //     */
 | |
| //    private String token;
 | |
| //    private String charSet;
 | |
| //    /**
 | |
| //     * debug信息
 | |
| //     */
 | |
| //    private String errorInfo;
 | |
| //    private String errorCode;
 | |
| //
 | |
| //    /**
 | |
| //     * 初始构造函数。
 | |
| //     */
 | |
| //    public RequestHandler(HttpServletRequest request, HttpServletResponse response) {
 | |
| //        this.errorCode = "0";
 | |
| //        this.request = request;
 | |
| //        this.response = response;
 | |
| //        this.charSet = "UTF-8";
 | |
| //        this.parameters = new HashMap<>();
 | |
| //        // 验证notify支付订单网关
 | |
| //        this.notifyUrl = "https://gw.tenpay.com/gateway/simpleverifynotifyid.xml";
 | |
| //
 | |
| //    }
 | |
| //
 | |
| //    public void init() {
 | |
| //    }
 | |
| //
 | |
| //    /**
 | |
| //     * 初始化函数。
 | |
| //     */
 | |
| //    public void init(String appId, String appSecret, String partnerKey) {
 | |
| //        this.errorCode = "0";
 | |
| //        this.token = "token_";
 | |
| //        this.errorInfo = "";
 | |
| //        this.appId = appId;
 | |
| //        this.partnerKey = partnerKey;
 | |
| //        this.appSecret = appSecret;
 | |
| //        this.key = partnerKey;
 | |
| //    }
 | |
| //
 | |
| //
 | |
| //    /**
 | |
| //     * 获取参数值
 | |
| //     *
 | |
| //     * @param parameter 参数名称
 | |
| //     * @return String
 | |
| //     */
 | |
| //    public String getParameter(String parameter) {
 | |
| //        String s = this.parameters.get(parameter);
 | |
| //        return (null == s) ? "" : s;
 | |
| //    }
 | |
| //
 | |
| //
 | |
| //    // 特殊字符处理
 | |
| //    public String UrlEncode(String src) throws UnsupportedEncodingException {
 | |
| //        return URLEncoder.encode(src, this.charSet).replace("+", "%20");
 | |
| //    }
 | |
| //
 | |
| //    // 获取package的签名包
 | |
| //    public String genPackage(SortedMap<String, String> packageParams) throws UnsupportedEncodingException {
 | |
| //        String sign = createSign(packageParams);
 | |
| //
 | |
| //        StringBuilder sb = new StringBuilder();
 | |
| //        Set<Map.Entry<String, String>> entries = packageParams.entrySet();
 | |
| //        for (Map.Entry<String, String> entry : entries) {
 | |
| //            String k = entry.getKey();
 | |
| //            String v = entry.getValue();
 | |
| //            sb.append(k).append("=").append(UrlEncode(v)).append("&");
 | |
| //        }
 | |
| //
 | |
| //        // 去掉最后一个&
 | |
| //        //	System.out.println("UrlEncode后 packageValue=" + packageValue);
 | |
| //        return sb.append("sign=").append(sign).toString();
 | |
| //    }
 | |
| //
 | |
| //    /**
 | |
| //     * 创建md5摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名。
 | |
| //     */
 | |
| //    public String createSign(SortedMap<String, String> packageParams) {
 | |
| //        StringBuilder sb = new StringBuilder();
 | |
| //        Set<Map.Entry<String, String>> entries = packageParams.entrySet();
 | |
| //        for (Map.Entry<String, String> entry : entries) {
 | |
| //            String k = entry.getKey();
 | |
| //            String v = entry.getValue();
 | |
| //            if (null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)) {
 | |
| //                sb.append(k).append("=").append(v).append("&");
 | |
| //            }
 | |
| //        }
 | |
| //        System.out.println(sb.toString());
 | |
| //        System.out.println("key=" + this.getKey());
 | |
| //        sb.append("key=").append(this.getKey());
 | |
| //        String sign = MD5Util.MD5Encode(sb.toString(), this.charSet).toUpperCase();
 | |
| //        System.out.println("package签名:" + sign);
 | |
| //        return sign;
 | |
| //
 | |
| //    }
 | |
| //
 | |
| //    /**
 | |
| //     * 创建package签名
 | |
| //     */
 | |
| //    public boolean createMd5Sign() {
 | |
| //        StringBuilder sb = new StringBuilder();
 | |
| //        Set<Map.Entry<String, String>> entries = this.parameters.entrySet();
 | |
| //        for (Map.Entry<String, String> entry : entries) {
 | |
| //            String k = entry.getKey();
 | |
| //            String v = entry.getValue();
 | |
| //            if (!"sign".equals(k) && null != v && !"".equals(v)) {
 | |
| //                sb.append(k).append("=").append(v).append("&");
 | |
| //            }
 | |
| //        }
 | |
| //
 | |
| //        // 算出摘要
 | |
| //        String enc = TenPayUtil.getCharacterEncoding(this.request, this.response);
 | |
| //        String sign = MD5Util.MD5Encode(sb.toString(), enc).toLowerCase();
 | |
| //
 | |
| //        String tenpaySign = this.getParameter("sign").toLowerCase();
 | |
| //
 | |
| //        // debug信息
 | |
| //        this.setErrorInfo(sb.toString() + " => sign:" + sign + " tenpaySign:" + tenpaySign);
 | |
| //
 | |
| //        return tenpaySign.equals(sign);
 | |
| //    }
 | |
| //
 | |
| //
 | |
| //    //输出XML
 | |
| //    public String parseXML() {
 | |
| //        StringBuilder sb = new StringBuilder();
 | |
| //        sb.append("<xml>");
 | |
| //        Set<Map.Entry<String, String>> entries = this.parameters.entrySet();
 | |
| //        for (Map.Entry<String, String> entry : entries) {
 | |
| //            String k = entry.getKey();
 | |
| //            String v = entry.getValue();
 | |
| //            if (null != v && !"".equals(v) && !"appkey".equals(k)) {
 | |
| //                sb.append("<").append(k).append(">").append(getParameter(k)).append("</").append(k).append(">\n");
 | |
| //            }
 | |
| //        }
 | |
| //        sb.append("</xml>");
 | |
| //        return sb.toString();
 | |
| //    }
 | |
| //
 | |
| //
 | |
| //    public String getTokenUrl() {
 | |
| //        return tokenUrl;
 | |
| //    }
 | |
| //
 | |
| //    public void setTokenUrl(String tokenUrl) {
 | |
| //        this.tokenUrl = tokenUrl;
 | |
| //    }
 | |
| //
 | |
| //    public String getGateUrl() {
 | |
| //        return gateUrl;
 | |
| //    }
 | |
| //
 | |
| //    public void setGateUrl(String gateUrl) {
 | |
| //        this.gateUrl = gateUrl;
 | |
| //    }
 | |
| //
 | |
| //    public String getNotifyUrl() {
 | |
| //        return notifyUrl;
 | |
| //    }
 | |
| //
 | |
| //    public void setNotifyUrl(String notifyUrl) {
 | |
| //        this.notifyUrl = notifyUrl;
 | |
| //    }
 | |
| //
 | |
| //    public String getAppId() {
 | |
| //        return appId;
 | |
| //    }
 | |
| //
 | |
| //    public void setAppId(String appId) {
 | |
| //        this.appId = appId;
 | |
| //    }
 | |
| //
 | |
| //    public String getAppKey() {
 | |
| //        return appKey;
 | |
| //    }
 | |
| //
 | |
| //    public void setAppKey(String appKey) {
 | |
| //        this.appKey = appKey;
 | |
| //    }
 | |
| //
 | |
| //    public String getPartnerKey() {
 | |
| //        return partnerKey;
 | |
| //    }
 | |
| //
 | |
| //    public void setPartnerKey(String partnerKey) {
 | |
| //        this.partnerKey = partnerKey;
 | |
| //    }
 | |
| //
 | |
| //    public String getAppSecret() {
 | |
| //        return appSecret;
 | |
| //    }
 | |
| //
 | |
| //    public void setAppSecret(String appSecret) {
 | |
| //        this.appSecret = appSecret;
 | |
| //    }
 | |
| //
 | |
| //    public String getKey() {
 | |
| //        return key;
 | |
| //    }
 | |
| //
 | |
| //    public void setKey(String key) {
 | |
| //        this.key = key;
 | |
| //    }
 | |
| //
 | |
| //    public Map<String, String> getParameters() {
 | |
| //        return parameters;
 | |
| //    }
 | |
| //
 | |
| //    public void setParameters(Map<String, String> parameters) {
 | |
| //        this.parameters = parameters;
 | |
| //    }
 | |
| //
 | |
| //    public String getToken() {
 | |
| //        return token;
 | |
| //    }
 | |
| //
 | |
| //    public void setToken(String token) {
 | |
| //        this.token = token;
 | |
| //    }
 | |
| //
 | |
| //    public String getCharSet() {
 | |
| //        return charSet;
 | |
| //    }
 | |
| //
 | |
| //    public void setCharSet(String charSet) {
 | |
| //        this.charSet = charSet;
 | |
| //    }
 | |
| //
 | |
| //    public String getErrorInfo() {
 | |
| //        return errorInfo;
 | |
| //    }
 | |
| //
 | |
| //    public void setErrorInfo(String errorInfo) {
 | |
| //        this.errorInfo = errorInfo;
 | |
| //    }
 | |
| //
 | |
| //    public String getErrorCode() {
 | |
| //        return errorCode;
 | |
| //    }
 | |
| //
 | |
| //    public void setErrorCode(String errorCode) {
 | |
| //        this.errorCode = errorCode;
 | |
| //    }
 | |
| //}
 | |
| 
 |