diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/util/DigestUtil.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/util/DigestUtil.java index a55d7b72..90767b6e 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/util/DigestUtil.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/util/DigestUtil.java @@ -100,4 +100,34 @@ public final class DigestUtil { } return SHA1(MapUtil.toJoinString(obj, false, true, extra)); } + + /** + * package拼接签名(一般用于V2.x支付接口) + * + * @param signObj + * 签名对象 如 PayPackageV2 + * @param signKey + * 签名key + * @return + */ + public static String packageSign(Object signObj, String signKey) { + StringBuilder sb = new StringBuilder(); + // a.对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序) 后, + // 使用 URL 键值 对的格式(即 key1=value1&key2=value2...)拼接成字符串 string1 + // 注意:值为空的参数不参与签名 + sb.append(MapUtil.toJoinString(signObj, false, false, null)); + // b---> + // 在 string1 最后拼接上 key=signKey 得到 stringSignTemp 字符串,并 对 + // stringSignTemp 进行 md5 运算 + // 再将得到的 字符串所有字符转换为大写 ,得到 sign 值 signValue。 + sb.append("&key=").append(signKey); + // c---> & d----> + String sign = DigestUtil.MD5(sb.toString()).toUpperCase(); + sb.delete(0, sb.length()); + // c.对传入参数中所有键值对的 value 进行 urlencode 转码后重新拼接成字符串 string2 + sb.append(MapUtil.toJoinString(signObj, true, false, null)) + .append("&sign=").append(sign); + + return sb.toString(); + } } diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/Pay2Api.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/Pay2Api.java index 5345080c..73196d4f 100644 --- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/Pay2Api.java +++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/Pay2Api.java @@ -34,12 +34,12 @@ import com.foxinmy.weixin4j.http.weixin.WeixinSSLRequestExecutor; import com.foxinmy.weixin4j.model.Consts; import com.foxinmy.weixin4j.model.Token; import com.foxinmy.weixin4j.model.WeixinPayAccount; -import com.foxinmy.weixin4j.mp.payment.v2.JsPayRequestV2; import com.foxinmy.weixin4j.mp.payment.v2.OrderV2; import com.foxinmy.weixin4j.mp.payment.v2.PayPackageV2; import com.foxinmy.weixin4j.mp.payment.v2.RefundRecordV2; import com.foxinmy.weixin4j.mp.payment.v2.RefundResultV2; import com.foxinmy.weixin4j.mp.token.WeixinTokenCreator; +import com.foxinmy.weixin4j.payment.PayRequest; import com.foxinmy.weixin4j.token.TokenHolder; import com.foxinmy.weixin4j.token.TokenStorager; import com.foxinmy.weixin4j.type.BillType; @@ -146,12 +146,13 @@ public class Pay2Api extends MpApi { payPackage.setTransportFee(transportFee); payPackage.setProductFee(productFee); payPackage.setGoodsTag(goodsTag); - JsPayRequestV2 jsPayRequest = new JsPayRequestV2(weixinAccount, - payPackage); - jsPayRequest.setPaySign(DigestUtil.paysignSha(jsPayRequest, + PayRequest payRequest = new PayRequest(weixinAccount.getId(), + DigestUtil.packageSign(payPackage, + weixinAccount.getPartnerKey())); + payRequest.setPaySign(DigestUtil.paysignSha(payRequest, weixinAccount.getPaySignKey())); - jsPayRequest.setSignType(SignType.SHA1); - return JSON.toJSONString(jsPayRequest); + payRequest.setSignType(SignType.SHA1); + return JSON.toJSONString(payRequest); } /** diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/JsPayRequestV2.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/JsPayRequestV2.java deleted file mode 100644 index 73effa32..00000000 --- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/JsPayRequestV2.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.foxinmy.weixin4j.mp.payment.v2; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlTransient; - -import com.alibaba.fastjson.annotation.JSONField; -import com.foxinmy.weixin4j.model.WeixinPayAccount; -import com.foxinmy.weixin4j.payment.PayRequest; -import com.foxinmy.weixin4j.util.DigestUtil; -import com.foxinmy.weixin4j.util.MapUtil; - -/** - * V2微信JS支付:get_brand_wcpay_request 所列参数均为非空字符串 - *
- * get_brand_wcpay_request:ok 支付成功
- * get_brand_wcpay_request:cancel 支付过程中用户取消
- * get_brand_wcpay_request:fail 支付失败
- *