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.
		
		
		
		
			
				
					300 lines
				
				8.8 KiB
			
		
		
			
		
	
	
					300 lines
				
				8.8 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								//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;
							 | 
						||
| 
								 | 
							
								//    }
							 | 
						||
| 
								 | 
							
								//}
							 |