From f24c594defc3f6a1f736f5d3ea47f91daefe7787 Mon Sep 17 00:00:00 2001 From: jinyu Date: Wed, 1 Jun 2016 09:30:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=94=AF=E4=BB=98=E4=BB=A3?= =?UTF-8?q?=E7=A0=81&WeixinSignature=E7=B1=BB=E6=96=B0=E5=A2=9EgetSignType?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/foxinmy/weixin4j/api/CashApi.java | 4 ++-- .../java/com/foxinmy/weixin4j/api/MchApi.java | 15 ++++++++++++++ .../java/com/foxinmy/weixin4j/api/PayApi.java | 4 ++-- .../weixin4j/payment/WeixinPayProxy.java | 8 +++++++- .../weixin4j/payment/mch/MerchantResult.java | 20 +------------------ .../weixin4j/sign/WeixinPaymentSignature.java | 11 ++++++++-- .../weixin4j/sign/WeixinSignature.java | 16 +++++++++++---- weixin4j-example/pom.xml | 2 -- .../oldpayment/WeixinOldPaymentSignature.java | 6 ++++++ .../foxinmy/weixin4j/mp/test/CustomTest.java | 6 +++--- 10 files changed, 57 insertions(+), 35 deletions(-) diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/api/CashApi.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/api/CashApi.java index 21d02674..dcd76b32 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/api/CashApi.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/api/CashApi.java @@ -65,7 +65,7 @@ public class CashApi extends MchApi { */ public RedpacketSendResult sendRedpack(InputStream certificate, Redpacket redpacket) throws WeixinException { - redpacket.declareWeixinPayAccount(weixinAccount); + super.declareMerchant(redpacket); JSONObject obj = (JSONObject) JSON.toJSON(redpacket); obj.put("wxappid", obj.remove("appid")); obj.put("sign", weixinSignature.sign(obj)); @@ -157,7 +157,7 @@ public class CashApi extends MchApi { */ public CorpPaymentResult sendCorpPayment(InputStream certificate, CorpPayment payment) throws WeixinException { - payment.declareWeixinPayAccount(weixinAccount); + super.declareMerchant(payment); JSONObject obj = (JSONObject) JSON.toJSON(payment); obj.put("mchid", obj.remove("mch_id")); obj.put("mch_appid", obj.remove("appid")); diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/api/MchApi.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/api/MchApi.java index bfa2b8cc..088081bd 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/api/MchApi.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/api/MchApi.java @@ -9,6 +9,7 @@ import com.foxinmy.weixin4j.exception.WeixinException; import com.foxinmy.weixin4j.http.weixin.WeixinRequestExecutor; import com.foxinmy.weixin4j.http.weixin.WeixinSSLRequestExecutor; import com.foxinmy.weixin4j.model.WeixinPayAccount; +import com.foxinmy.weixin4j.payment.mch.MerchantResult; import com.foxinmy.weixin4j.sign.WeixinPaymentSignature; import com.foxinmy.weixin4j.sign.WeixinSignature; import com.foxinmy.weixin4j.type.IdQuery; @@ -96,4 +97,18 @@ public class MchApi extends BaseApi { public WeixinSignature getWeixinSignature() { return this.weixinSignature; } + + /** + * 设置商户信息 + * + * @param merchant + */ + protected void declareMerchant(T merchant) { + merchant.setAppId(weixinAccount.getId()); + merchant.setMchId(weixinAccount.getMchId()); + merchant.setDeviceInfo(weixinAccount.getDeviceInfo()); + merchant.setSubId(weixinAccount.getSubId()); + merchant.setSubMchId(weixinAccount.getSubMchId()); + merchant.setNonceStr(RandomUtil.generateString(16)); + } } diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/api/PayApi.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/api/PayApi.java index eefee646..661b73f0 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/api/PayApi.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/api/PayApi.java @@ -79,7 +79,7 @@ public class PayApi extends MchApi { * @return 预支付对象 */ public PrePay createPrePay(MchPayPackage payPackage) throws WeixinException { - payPackage.declareWeixinPayAccount(weixinAccount); + super.declareMerchant(payPackage); payPackage.setSign(weixinSignature.sign(payPackage)); String payJsRequestXml = XmlStream.toXML(payPackage); WeixinResponse response = weixinExecutor.post( @@ -105,7 +105,7 @@ public class PayApi extends MchApi { throws WeixinException { String tradeType = payPackage.getTradeType(); if (TradeType.MICROPAY.name().equalsIgnoreCase(tradeType)) { - payPackage.declareWeixinPayAccount(weixinAccount); + super.declareMerchant(payPackage); payPackage.setSign(weixinSignature.sign(payPackage)); String para = XmlStream.toXML(payPackage); WeixinResponse response = weixinExecutor.post( diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/WeixinPayProxy.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/WeixinPayProxy.java index 35809f63..bdf49aec 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/WeixinPayProxy.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/WeixinPayProxy.java @@ -150,6 +150,7 @@ public class WeixinPayProxy { * @see com.foxinmy.weixin4j.payment.mch.MICROPayRequest 刷卡支付 * @see com.foxinmy.weixin4j.payment.mch.APPPayRequest APP支付 * @see com.foxinmy.weixin4j.payment.mch.WAPPayRequest WAP支付 + * @see com.foxinmy.weixin4j.payment.mch.MchPayRequest#toRequestString() * @throws WeixinException */ public MchPayRequest createPayRequest(MchPayPackage payPackage) @@ -176,6 +177,7 @@ public class WeixinPayProxy { * 附加数据 非必填 * @see com.foxinmy.weixin4j.api.PayApi * @see com.foxinmy.weixin4j.payment.mch.JSAPIPayRequest + * @see com.foxinmy.weixin4j.payment.mch.MchPayRequest#toRequestString() * @return JSAPI支付对象 * @throws WeixinException */ @@ -284,6 +286,7 @@ public class WeixinPayProxy { * @return Native支付对象 * @see com.foxinmy.weixin4j.api.PayApi * @see com.foxinmy.weixin4j.payment.mch.NATIVEPayRequest + * @see com.foxinmy.weixin4j.payment.mch.MchPayRequest#toRequestString() * @see 扫码支付 * @@ -317,6 +320,7 @@ public class WeixinPayProxy { * @return APP支付对象 * @see com.foxinmy.weixin4j.api.PayApi * @see com.foxinmy.weixin4j.payment.mch.APPPayRequest + * @see com.foxinmy.weixin4j.payment.mch.MchPayRequest#toRequestString() * @see * APP支付 @@ -347,6 +351,7 @@ public class WeixinPayProxy { * @return WAP支付对象 * @see com.foxinmy.weixin4j.api.PayApi * @see com.foxinmy.weixin4j.payment.mch.WAPPayRequest + * @see com.foxinmy.weixin4j.payment.mch.MchPayRequest#toRequestString() * @see WAP支付 * @@ -376,8 +381,9 @@ public class WeixinPayProxy { * 附加数据 非必填 * @return 支付的订单信息 * @see com.foxinmy.weixin4j.api.PayApi - * @see com.foxinmy.weixin4j.payment.mch.MICROPayRequest * @see com.foxinmy.weixin4j.payment.mch.Order + * @see com.foxinmy.weixin4j.payment.mch.MICROPayRequest + * @see com.foxinmy.weixin4j.payment.mch.MchPayRequest#toRequestString() * @see * 提交被扫支付API diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/MerchantResult.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/MerchantResult.java index 067d8571..102461e7 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/MerchantResult.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/MerchantResult.java @@ -7,13 +7,11 @@ import javax.xml.bind.annotation.XmlRootElement; import com.alibaba.fastjson.annotation.JSONField; import com.foxinmy.weixin4j.http.weixin.XmlResult; -import com.foxinmy.weixin4j.model.WeixinPayAccount; import com.foxinmy.weixin4j.type.SignType; -import com.foxinmy.weixin4j.util.RandomUtil; /** * 调用商户平台接口返回的公用字段 - * + * * @className MerchantResult * @author jinyu(foxinmy@gmail.com) * @date 2014年10月21日 @@ -168,22 +166,6 @@ public class MerchantResult extends XmlResult { return recall != null && recall.equalsIgnoreCase("y"); } - /** - * 赋值给对应字段 - * - * @param weixinPayAccount - * 商户信息 - */ - @JSONField(deserialize = false) - public void declareWeixinPayAccount(WeixinPayAccount weixinPayAccount) { - this.appId = weixinPayAccount.getId(); - this.mchId = weixinPayAccount.getMchId(); - this.deviceInfo = weixinPayAccount.getDeviceInfo(); - this.subId = weixinPayAccount.getSubId(); - this.subMchId = weixinPayAccount.getSubMchId(); - this.nonceStr = RandomUtil.generateString(16); - } - @Override public String toString() { return "appId=" + appId + ", mchId=" + mchId + ", subId=" + subId diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/sign/WeixinPaymentSignature.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/sign/WeixinPaymentSignature.java index 9a9bf6cc..9d32ef29 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/sign/WeixinPaymentSignature.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/sign/WeixinPaymentSignature.java @@ -1,15 +1,17 @@ package com.foxinmy.weixin4j.sign; +import com.foxinmy.weixin4j.type.SignType; import com.foxinmy.weixin4j.util.DigestUtil; /** * 微信支付签名实现 - * + * * @className WeixinPaymentSignature * @author jinyu(foxinmy@gmail.com) * @date 2016年3月26日 * @since JDK 1.6 - * @see 支付签名说明 + * @see 支付签名说明 */ public class WeixinPaymentSignature extends AbstractWeixinSignature { /** @@ -21,6 +23,11 @@ public class WeixinPaymentSignature extends AbstractWeixinSignature { this.paySignKey = paySignKey; } + @Override + public SignType getSignType() { + return SignType.MD5; + } + @Override public String sign(Object obj) { StringBuilder sb = join(obj).append("&key=").append(paySignKey); diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/sign/WeixinSignature.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/sign/WeixinSignature.java index 3057e3f5..2b7574da 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/sign/WeixinSignature.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/sign/WeixinSignature.java @@ -1,9 +1,10 @@ package com.foxinmy.weixin4j.sign; +import com.foxinmy.weixin4j.type.SignType; /** * 微信签名 - * + * * @className WeixinSignature * @author jinyu(foxinmy@gmail.com) * @date 2016年3月26日 @@ -13,21 +14,28 @@ package com.foxinmy.weixin4j.sign; public interface WeixinSignature { /** * 是否编码 - * + * * @return */ public boolean encoder(); /** * 是否转换小写 - * + * * @return */ public boolean lowerCase(); + /** + * 签名类型 + * + * @return + */ + public SignType getSignType(); + /** * 签名 - * + * * @param obj * @return */ diff --git a/weixin4j-example/pom.xml b/weixin4j-example/pom.xml index bd46cac6..8b23f754 100644 --- a/weixin4j-example/pom.xml +++ b/weixin4j-example/pom.xml @@ -48,14 +48,12 @@ com.foxinmy weixin4j-mp 1.6.9 - true com.foxinmy weixin4j-qy 1.6.9 - true diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/oldpayment/WeixinOldPaymentSignature.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/oldpayment/WeixinOldPaymentSignature.java index d84be8a8..f515fbfa 100644 --- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/oldpayment/WeixinOldPaymentSignature.java +++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/oldpayment/WeixinOldPaymentSignature.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONPath; import com.foxinmy.weixin4j.sign.AbstractWeixinSignature; +import com.foxinmy.weixin4j.type.SignType; import com.foxinmy.weixin4j.util.DigestUtil; import com.foxinmy.weixin4j.util.MapUtil; @@ -48,6 +49,11 @@ public class WeixinOldPaymentSignature extends AbstractWeixinSignature { return DigestUtil.SHA1(join(obj).toString()); } + @Override + public SignType getSignType() { + return SignType.SHA1; + } + /** * package拼接签名 * diff --git a/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/CustomTest.java b/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/CustomTest.java index c3d001c6..3079061d 100644 --- a/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/CustomTest.java +++ b/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/CustomTest.java @@ -75,9 +75,9 @@ public class CustomTest extends TokenTest { @Test public void uploadKfAvatar() throws WeixinException, IOException { - JsonResult result = customApi.uploadKfAvatar( - "temp1@canyidianzhang", new FileInputStream(new File( - "/Users/jy/Music/简谱/风动草.jpg")), "风动草.jpg"); + JsonResult result = customApi.uploadKfAvatar("temp1@canyidianzhang", + new FileInputStream(new File("/Users/jy/Music/简谱/风动草.jpg")), + "风动草.jpg"); Assert.assertEquals(0, result.getCode()); }