提交 0416d160 编写于 作者: J Javen205

微信支付添加签名方式HMAC-SHA256

上级 f3a7b86c
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>com.github.javen205</groupId> <groupId>com.github.javen205</groupId>
<artifactId>IJPay</artifactId> <artifactId>IJPay</artifactId>
<version>1.1.7</version> <version>1.1.8-SNAPSHOT</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<name>IJPay</name> <name>IJPay</name>
<description>Easy Pay Library</description> <description>Easy Pay Library</description>
......
...@@ -16,9 +16,10 @@ import com.jpay.weixin.api.WxPayApiConfigKit; ...@@ -16,9 +16,10 @@ import com.jpay.weixin.api.WxPayApiConfigKit;
* 微信支付的统一下单工具类 * 微信支付的统一下单工具类
*/ */
public class PaymentKit { public class PaymentKit {
/** /**
* 构建短链接参数 * 构建短链接参数
*
* @param appid * @param appid
* @param sub_appid * @param sub_appid
* @param mch_id * @param mch_id
...@@ -27,19 +28,18 @@ public class PaymentKit { ...@@ -27,19 +28,18 @@ public class PaymentKit {
* @param paternerKey * @param paternerKey
* @return <Map<String, String>> * @return <Map<String, String>>
*/ */
public static Map<String, String> buildShortUrlParasMap(String appid, String sub_appid, String mch_id, String sub_mch_id, String long_url, String paternerKey){ public static Map<String, String> buildShortUrlParasMap(String appid, String sub_appid, String mch_id,
Map<String, String> params = new HashMap<String, String>(); String sub_mch_id, String long_url, String paternerKey) {
Map<String, String> params = new HashMap<String, String>();
params.put("appid", appid); params.put("appid", appid);
params.put("sub_appid", sub_appid); params.put("sub_appid", sub_appid);
params.put("mch_id", mch_id); params.put("mch_id", mch_id);
params.put("sub_mch_id", sub_mch_id); params.put("sub_mch_id", sub_mch_id);
params.put("long_url", long_url); params.put("long_url", long_url);
return buildSignAfterParasMap(params, paternerKey); return buildSignAfterParasMap(params, paternerKey);
} }
/** /**
* 组装签名的字段 * 组装签名的字段
...@@ -90,8 +90,10 @@ public class PaymentKit { ...@@ -90,8 +90,10 @@ public class PaymentKit {
public static String urlEncode(String src) throws UnsupportedEncodingException { public static String urlEncode(String src) throws UnsupportedEncodingException {
return URLEncoder.encode(src, Charsets.UTF_8.name()).replace("+", "%20"); return URLEncoder.encode(src, Charsets.UTF_8.name()).replace("+", "%20");
} }
/** /**
* 构建签名之后的参数 * 构建签名之后的参数
*
* @param params * @param params
* @param paternerKey * @param paternerKey
* @return <Map<String, String>> * @return <Map<String, String>>
...@@ -120,18 +122,18 @@ public class PaymentKit { ...@@ -120,18 +122,18 @@ public class PaymentKit {
String stringSignTemp = stringA + "&key=" + partnerKey; String stringSignTemp = stringA + "&key=" + partnerKey;
return HashKit.md5(stringSignTemp).toUpperCase(); return HashKit.md5(stringSignTemp).toUpperCase();
} }
public static String createSign(Map<String, String> params, String partnerKey,SignType signType) { public static String createSign(Map<String, String> params, String partnerKey, SignType signType) {
// 生成签名前先去除sign // 生成签名前先去除sign
params.remove("sign"); params.remove("sign");
String stringA = packageSign(params, false); String stringA = packageSign(params, false);
String stringSignTemp = stringA + "&key=" + partnerKey; String stringSignTemp = stringA + "&key=" + partnerKey;
if(signType == SignType.HMAC_SHA256){ if (signType == SignType.MD5) {
return HashKit.sha256(stringSignTemp).toUpperCase();
}else {
return HashKit.md5(stringSignTemp).toUpperCase(); return HashKit.md5(stringSignTemp).toUpperCase();
} else {
return HashKit.sha256(stringSignTemp).toUpperCase();
} }
} }
/** /**
...@@ -148,8 +150,16 @@ public class PaymentKit { ...@@ -148,8 +150,16 @@ public class PaymentKit {
String localSign = PaymentKit.createSign(params, paternerKey); String localSign = PaymentKit.createSign(params, paternerKey);
return sign.equals(localSign); return sign.equals(localSign);
} }
public static boolean verifyNotify(Map<String, String> params, String paternerKey, SignType signType) {
String sign = params.get("sign");
String localSign = PaymentKit.createSign(params, paternerKey, signType);
return sign.equals(localSign);
}
/** /**
* 预付订单再次签名 * 预付订单再次签名
*
* @param prepay_id * @param prepay_id
* @return <Map<String, String>> * @return <Map<String, String>>
*/ */
...@@ -160,21 +170,21 @@ public class PaymentKit { ...@@ -160,21 +170,21 @@ public class PaymentKit {
packageParams.put("nonceStr", String.valueOf(System.currentTimeMillis())); packageParams.put("nonceStr", String.valueOf(System.currentTimeMillis()));
packageParams.put("package", "prepay_id=" + prepay_id); packageParams.put("package", "prepay_id=" + prepay_id);
packageParams.put("signType", "MD5"); packageParams.put("signType", "MD5");
String packageSign = PaymentKit.createSign(packageParams, WxPayApiConfigKit.getWxPayApiConfig().getPaternerKey()); String packageSign = PaymentKit.createSign(packageParams,
WxPayApiConfigKit.getWxPayApiConfig().getPaternerKey());
packageParams.put("paySign", packageSign); packageParams.put("paySign", packageSign);
return packageParams; return packageParams;
} }
/** /**
* 判断接口返回的code是否是SUCCESS * 判断接口返回的code是否是SUCCESS
*
* @param return_code * @param return_code
* @return {boolean} * @return {boolean}
*/ */
public static boolean codeIsOK(String return_code) { public static boolean codeIsOK(String return_code) {
return StrKit.notBlank(return_code) && "SUCCESS".equals(return_code); return StrKit.notBlank(return_code) && "SUCCESS".equals(return_code);
} }
/** /**
* 微信下单map to xml * 微信下单map to xml
...@@ -211,17 +221,19 @@ public class PaymentKit { ...@@ -211,17 +221,19 @@ public class PaymentKit {
XmlHelper xmlHelper = XmlHelper.of(xmlStr); XmlHelper xmlHelper = XmlHelper.of(xmlStr);
return xmlHelper.toMap(); return xmlHelper.toMap();
} }
/** /**
* 替换url中的参数 * 替换url中的参数
*
* @param str * @param str
* @param regex * @param regex
* @param args * @param args
* @return {String} * @return {String}
*/ */
public static String replace(String str,String regex,String... args){ public static String replace(String str, String regex, String... args) {
int length = args.length; int length = args.length;
for (int i = 0; i < length; i++) { for (int i = 0; i < length; i++) {
str=str.replaceFirst(regex, args[i]); str = str.replaceFirst(regex, args[i]);
} }
return str; return str;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册