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