From 1df09785643c8a33c1257a751a35e30aa6656c90 Mon Sep 17 00:00:00 2001 From: "jy.hu" Date: Thu, 22 Jan 2015 11:19:17 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E9=83=A8=E5=88=86=E5=AE=9E?= =?UTF-8?q?=E4=BD=93=E7=B1=BB(*paypackage)=E4=B8=AD=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E6=8C=89=E7=85=A7=E9=AA=86=E9=A9=BC=E5=91=BD=E5=90=8D=E8=A7=84?= =?UTF-8?q?=E5=88=99=E7=9A=84=E5=B1=9E=E6=80=A7=E5=90=8D=20&=20=E5=8D=87?= =?UTF-8?q?=E7=BA=A7fastjson=E5=88=B01.2.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../weixin4j/token/RedisTokenHolder.java | 22 +-- weixin4j-mp/README.md | 3 +- weixin4j-mp/weixin4j-mp-api/README.md | 3 +- .../weixin4j/mp/payment/MicroPayPackage.java | 93 ++++++------ .../weixin4j/mp/payment/PayPackage.java | 133 ++++++++++-------- .../foxinmy/weixin4j/mp/payment/PayUtil.java | 4 +- .../weixin4j/mp/payment/v2/PayPackageV2.java | 130 ++++++++--------- .../mp/payment/v3/NativePayResponseV3.java | 2 +- .../weixin4j/mp/payment/v3/PayPackageV3.java | 117 +++++++-------- .../foxinmy/weixin4j/mp/action/PayAction.java | 5 +- 11 files changed, 271 insertions(+), 243 deletions(-) diff --git a/pom.xml b/pom.xml index 23461acd..0d27eb50 100644 --- a/pom.xml +++ b/pom.xml @@ -54,7 +54,7 @@ 1.4.7 4.2.5 1.9 - 1.2.1 + 1.2.3 1.7.3 1.1.6 2.6.0 diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/RedisTokenHolder.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/RedisTokenHolder.java index 0260abd5..102b9cac 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/RedisTokenHolder.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/RedisTokenHolder.java @@ -23,7 +23,7 @@ import com.foxinmy.weixin4j.model.Token; public class RedisTokenHolder implements TokenHolder { private JedisPool jedisPool; - private final TokenCreator tokenCretor; + private final TokenCreator tokenCreator; public final static int MAX_TOTAL = 50; public final static int MAX_IDLE = 5; @@ -31,11 +31,11 @@ public class RedisTokenHolder implements TokenHolder { public final static boolean TEST_ON_BORROW = false; public final static boolean TEST_ON_RETURN = true; - public RedisTokenHolder(TokenCreator tokenCretor) { - this("localhost", 6379, tokenCretor); + public RedisTokenHolder(TokenCreator tokenCreator) { + this("localhost", 6379, tokenCreator); } - public RedisTokenHolder(String host, int port, TokenCreator tokenCretor) { + public RedisTokenHolder(String host, int port, TokenCreator tokenCreator) { JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); jedisPoolConfig.setMaxTotal(MAX_TOTAL); jedisPoolConfig.setMaxIdle(MAX_IDLE); @@ -43,17 +43,17 @@ public class RedisTokenHolder implements TokenHolder { jedisPoolConfig.setTestOnBorrow(TEST_ON_BORROW); jedisPoolConfig.setTestOnReturn(TEST_ON_RETURN); this.jedisPool = new JedisPool(jedisPoolConfig, host, port); - this.tokenCretor = tokenCretor; + this.tokenCreator = tokenCreator; } public RedisTokenHolder(String host, int port, - JedisPoolConfig jedisPoolConfig, TokenCreator tokenCretor) { - this(new JedisPool(jedisPoolConfig, host, port), tokenCretor); + JedisPoolConfig jedisPoolConfig, TokenCreator tokenCreator) { + this(new JedisPool(jedisPoolConfig, host, port), tokenCreator); } - public RedisTokenHolder(JedisPool jedisPool, TokenCreator tokenCretor) { + public RedisTokenHolder(JedisPool jedisPool, TokenCreator tokenCreator) { this.jedisPool = jedisPool; - this.tokenCretor = tokenCretor; + this.tokenCreator = tokenCreator; } @Override @@ -62,10 +62,10 @@ public class RedisTokenHolder implements TokenHolder { Jedis jedis = null; try { jedis = jedisPool.getResource(); - String cacheKey = tokenCretor.getCacheKey(); + String cacheKey = tokenCreator.getCacheKey(); String accessToken = jedis.get(cacheKey); if (StringUtils.isBlank(accessToken)) { - token = tokenCretor.createToken(); + token = tokenCreator.createToken(); jedis.setex(cacheKey, (int) token.getExpiresIn(), token.getAccessToken()); } else { diff --git a/weixin4j-mp/README.md b/weixin4j-mp/README.md index f4ade6d1..eaa583ec 100644 --- a/weixin4j-mp/README.md +++ b/weixin4j-mp/README.md @@ -68,7 +68,8 @@ weixin4j-mp qr_path=/tmp/weixin/qr media_path=/tmp/weixin/media bill_path=/tmp/weixin/bill - ca_file=/tmp/weixin/xxxxx.p12 | xxxx.pfx + # ca证书存放的完整路径 (V2版本后缀为*.pfx,V3版本后缀为*.p12) + ca_file=/tmp/weixin/xxxxx.p12 #classpath路径下:ca_file=classpath:xxxxx.p12 3.在项目根目录下执行`mvn package -Prelease`命令后得到jar包,将`weixin4j-mp-full`包或者`weixin4j-base`和`weixin4j-mp-api`两个包引入到自己的工程. diff --git a/weixin4j-mp/weixin4j-mp-api/README.md b/weixin4j-mp/weixin4j-mp-api/README.md index 97246543..9f488b24 100644 --- a/weixin4j-mp/weixin4j-mp-api/README.md +++ b/weixin4j-mp/weixin4j-mp-api/README.md @@ -61,7 +61,8 @@ weixin.properties说明 qr_path=/tmp/weixin/qr media_path=/tmp/weixin/media bill_path=/tmp/weixin/bill - ca_file=/tmp/weixin/xxxxx.p12 | xxxx.pfx + # ca证书存放的完整路径 (V2版本后缀为*.pfx,V3版本后缀为*.p12) + ca_file=/tmp/weixin/xxxxx.p12 #classpath路径下:ca_file=classpath:xxxxx.p12 2.实例化一个`WeixinProxy`对象,调用API,需要强调的是如果只传入appid,appsecret两个参数将无法调用支付相关接口 diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/MicroPayPackage.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/MicroPayPackage.java index 01a7a5df..f433cf1d 100644 --- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/MicroPayPackage.java +++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/MicroPayPackage.java @@ -2,8 +2,7 @@ package com.foxinmy.weixin4j.mp.payment; import java.util.Date; -import org.apache.commons.lang3.StringUtils; - +import com.alibaba.fastjson.annotation.JSONField; import com.foxinmy.weixin4j.model.WeixinMpAccount; import com.foxinmy.weixin4j.util.RandomUtil; import com.thoughtworks.xstream.annotations.XStreamAlias; @@ -23,36 +22,44 @@ public class MicroPayPackage extends PayPackage { private static final long serialVersionUID = 8944928173669656177L; private String appid; // 微信分配的公众账号 必须 - private String mch_id; // 微信支付分配的商户号 必须 - private String device_info; // 微信支付分配的终端设备号 非必须 - private String nonce_str; // 随机字符串,不长于 32 位 必须 + @XStreamAlias("mch_id") + @JSONField(name = "mch_id") + private String mchId; // 微信支付分配的商户号 必须 + @XStreamAlias("device_info") + @JSONField(name = "device_info") + private String deviceInfo; // 微信支付分配的终端设备号 非必须 + @XStreamAlias("nonce_str") + @JSONField(name = "nonce_str") + private String nonceStr; // 随机字符串,不长于 32 位 必须 private String sign; // 签名 必须 - private String auth_code; // 扫码支付授权码 ,设备读取用 户微信中的条码或者二维码 信息 + @XStreamAlias("auth_code") + @JSONField(name = "auth_code") + private String authCode; // 扫码支付授权码 ,设备读取用 户微信中的条码或者二维码 信息 public MicroPayPackage() { } public MicroPayPackage(WeixinMpAccount weixinAccount, String body, - String attach, String out_trade_no, double total_fee, - String spbill_create_ip, String auth_code) { + String attach, String outTradeNo, double totalFee, + String spbillCreateIp, String authCode) { this(weixinAccount.getId(), weixinAccount.getMchId(), weixinAccount .getDeviceInfo(), RandomUtil.generateString(16), body, attach, - out_trade_no, total_fee, spbill_create_ip, null, null, null, - auth_code); + outTradeNo, totalFee, spbillCreateIp, null, null, null, + authCode); } - public MicroPayPackage(String appid, String mch_id, String device_info, - String nonce_str, String body, String attach, String out_trade_no, - double total_fee, String spbill_create_ip, Date time_start, - Date time_expire, String goods_tag, String auth_code) { - super(body, attach, out_trade_no, total_fee, spbill_create_ip, - time_start, time_expire, goods_tag, null); + public MicroPayPackage(String appid, String mchId, String deviceInfo, + String nonceStr, String body, String attach, String outTradeNo, + double totalFee, String spbillCreateIp, Date timeStart, + Date timeExpire, String goodsTag, String authCode) { + super(body, attach, outTradeNo, totalFee, spbillCreateIp, timeStart, + timeExpire, goodsTag, null); this.appid = appid; - this.mch_id = mch_id; - this.device_info = device_info; - this.nonce_str = nonce_str; - this.auth_code = auth_code; + this.mchId = mchId; + this.deviceInfo = deviceInfo; + this.nonceStr = nonceStr; + this.authCode = authCode; } public String getAppid() { @@ -63,28 +70,28 @@ public class MicroPayPackage extends PayPackage { this.appid = appid; } - public String getMch_id() { - return mch_id; + public String getMchId() { + return mchId; } - public void setMch_id(String mch_id) { - this.mch_id = mch_id; + public void setMchId(String mchId) { + this.mchId = mchId; } - public String getDevice_info() { - return device_info; + public String getDeviceInfo() { + return deviceInfo; } - public void setDevice_info(String device_info) { - this.device_info = device_info; + public void setDevice_info(String deviceInfo) { + this.deviceInfo = deviceInfo; } - public String getNonce_str() { - return nonce_str; + public String getNonceStr() { + return nonceStr; } - public void setNonce_str(String nonce_str) { - this.nonce_str = nonce_str; + public void setNonceStr(String nonceStr) { + this.nonceStr = nonceStr; } public String getSign() { @@ -95,27 +102,19 @@ public class MicroPayPackage extends PayPackage { this.sign = sign; } - public void setBody(String body) { - super.setBody(StringUtils.isBlank(body) ? "服务费用" : body); + public String getAuthCode() { + return authCode; } - public void setNotify_url(String notify_url) { - super.setNotify_url(notify_url); - } - - public String getAuth_code() { - return auth_code; - } - - public void setAuth_code(String auth_code) { - this.auth_code = auth_code; + public void setAuthCode(String authCode) { + this.authCode = authCode; } @Override public String toString() { - return "MicroPayPackage [appid=" + appid + ", mch_id=" + mch_id - + ", device_info=" + device_info + ", nonce_str=" + nonce_str - + ", sign=" + sign + ", auth_code=" + auth_code + ", " + return "MicroPayPackage [appid=" + appid + ", mchId=" + mchId + + ", deviceInfo=" + deviceInfo + ", nonceStr=" + nonceStr + + ", sign=" + sign + ", authCode=" + authCode + ", " + super.toString() + "]"; } } diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/PayPackage.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/PayPackage.java index ef48e3d4..4243618e 100644 --- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/PayPackage.java +++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/PayPackage.java @@ -3,10 +3,13 @@ package com.foxinmy.weixin4j.mp.payment; import java.io.Serializable; import java.util.Date; +import com.alibaba.fastjson.annotation.JSONField; import com.foxinmy.weixin4j.util.DateUtil; +import com.thoughtworks.xstream.annotations.XStreamAlias; /** * 订单信息 + * * @className PayPackage * @author jy * @date 2014年12月18日 @@ -19,17 +22,31 @@ public class PayPackage implements Serializable { private String body; // 商品描述 必须 private String attach; // 附加数据,原样返回 非必须 - private String out_trade_no; // 商户系统内部的订单号 ,32 个字符内 、可包含字母 ,确保 在商户系统唯一 必须 - private String total_fee; // 订单总金额,单位为分,不 能带小数点 必须 - private String spbill_create_ip; // 订单生成的机器 IP 必须 - private String time_start; // 订单生成时间,格式 为 yyyyMMddHHmmss,如 2009 年 + @XStreamAlias("out_trade_no") + @JSONField(name = "out_trade_no") + private String outTradeNo; // 商户系统内部的订单号 ,32 个字符内 、可包含字母 ,确保 在商户系统唯一 必须 + @XStreamAlias("total_fee") + @JSONField(name = "total_fee") + private String totalFee; // 订单总金额,单位为分,不 能带小数点 必须 + @XStreamAlias("spbill_create_ip") + @JSONField(name = "spbill_create_ip") + private String spbillCreateIp; // 订单生成的机器 IP 必须 + @XStreamAlias("time_start") + @JSONField(name = "time_start") + private String timeStart; // 订单生成时间,格式 为 yyyyMMddHHmmss,如 2009 年 // 12月25日9点10分10秒表 示为 20091225091010。时区 为 GMT+8 // beijing。该时间取 自商户服务器 非必须 - private String time_expire; // 订单失效时间,格式 为 yyyyMMddHHmmss,如 2009 年 + @XStreamAlias("time_expire") + @JSONField(name = "time_expire") + private String timeExpire; // 订单失效时间,格式 为 yyyyMMddHHmmss,如 2009 年 // 12月27日9点10分10秒表 示为 20091227091010。时区 为 GMT+8 // beijing。该时间取 自商户服务商品标记 非必须 - private String goods_tag; // 商品标记,该字段不能随便 填,不使用请填空 非必须 - private String notify_url; // 通知地址接收微信支付成功通知 必须 + @XStreamAlias("goods_tag") + @JSONField(name = "goods_tag") + private String goodsTag; // 商品标记,该字段不能随便 填,不使用请填空 非必须 + @XStreamAlias("notify_url") + @JSONField(name = "notify_url") + private String notifyUrl; // 通知地址接收微信支付成功通知 必须 public String getBody() { return body; @@ -47,97 +64,97 @@ public class PayPackage implements Serializable { this.attach = attach; } - public String getOut_trade_no() { - return out_trade_no; + public String getOutTradeNo() { + return outTradeNo; } - public void setOut_trade_no(String out_trade_no) { - this.out_trade_no = out_trade_no; + public void setOutTradeNo(String outTradeNo) { + this.outTradeNo = outTradeNo; } - public String getTotal_fee() { - return total_fee; + public String getTotalFee() { + return totalFee; } - public void setTotal_fee(double total_fee) { - this.total_fee = DateUtil.formaFee2Fen(total_fee); + public void setTotalFee(double totalFee) { + this.totalFee = DateUtil.formaFee2Fen(totalFee); } - public String getSpbill_create_ip() { - return spbill_create_ip; + public String getSpbillCreateIp() { + return spbillCreateIp; } - public void setSpbill_create_ip(String spbill_create_ip) { - this.spbill_create_ip = spbill_create_ip; + public void setSpbillCreateIp(String spbillCreateIp) { + this.spbillCreateIp = spbillCreateIp; } - public String getTime_start() { - return time_start; + public String getTimeStart() { + return timeStart; } - public void setTime_start(String time_start) { - this.time_start = time_start; + public void setTimeStart(String timeStart) { + this.timeStart = timeStart; } - public void setTime_expire(String time_expire) { - this.time_expire = time_expire; + public void setTimeExpire(String timeExpire) { + this.timeExpire = timeExpire; } - public void setTime_start(Date time_start) { - this.time_start = time_start != null ? DateUtil - .fortmat2yyyyMMddHHmmss(time_start) : null; + public void setTimeStart(Date timeStart) { + this.timeStart = timeStart != null ? DateUtil + .fortmat2yyyyMMddHHmmss(timeStart) : null; } - public String getTime_expire() { - return time_expire; + public String getTimeExpire() { + return timeExpire; } - public void setTime_expire(Date time_expire) { - this.time_expire = time_expire != null ? DateUtil - .fortmat2yyyyMMddHHmmss(time_expire) : null; + public void setTimeExpire(Date timeExpire) { + this.timeExpire = timeExpire != null ? DateUtil + .fortmat2yyyyMMddHHmmss(timeExpire) : null; } - public String getGoods_tag() { - return goods_tag; + public String getGoodsTag() { + return goodsTag; } - public void setGoods_tag(String goods_tag) { - this.goods_tag = goods_tag; + public void setGoodsTag(String goodsTag) { + this.goodsTag = goodsTag; } - public String getNotify_url() { - return notify_url; + public String getNotifyUrl() { + return notifyUrl; } - public void setNotify_url(String notify_url) { - this.notify_url = notify_url; + public void setNotifyUrl(String notifyUrl) { + this.notifyUrl = notifyUrl; } public PayPackage() { } - public PayPackage(String body, String attach, String out_trade_no, - double total_fee, String spbill_create_ip, Date time_start, - Date time_expire, String goods_tag, String notify_url) { + public PayPackage(String body, String attach, String outTradeNo, + double totalFee, String spbillCreateIp, Date timeStart, + Date timeExpire, String goodsTag, String notifyUrl) { this.body = body; this.attach = attach; - this.out_trade_no = out_trade_no; - this.total_fee = DateUtil.formaFee2Fen(total_fee); - this.spbill_create_ip = spbill_create_ip; - this.time_start = time_start != null ? DateUtil - .fortmat2yyyyMMddHHmmss(time_start) : null; - this.time_expire = time_expire != null ? DateUtil - .fortmat2yyyyMMddHHmmss(time_expire) : null; - this.goods_tag = goods_tag; - this.notify_url = notify_url; + this.outTradeNo = outTradeNo; + this.totalFee = DateUtil.formaFee2Fen(totalFee); + this.spbillCreateIp = spbillCreateIp; + this.timeStart = timeStart != null ? DateUtil + .fortmat2yyyyMMddHHmmss(timeStart) : null; + this.timeExpire = timeExpire != null ? DateUtil + .fortmat2yyyyMMddHHmmss(timeExpire) : null; + this.goodsTag = goodsTag; + this.notifyUrl = notifyUrl; } @Override public String toString() { - return "body=" + body + ", attach=" + attach + ", out_trade_no=" - + out_trade_no + ", total_fee=" + total_fee - + ", spbill_create_ip=" + spbill_create_ip + ", time_start=" - + time_start + ", time_expire=" + time_expire + ", goods_tag=" - + goods_tag + ", notify_url=" + notify_url; + return "PayPackage [body=" + body + ", attach=" + attach + + ", outTradeNo=" + outTradeNo + ", totalFee=" + totalFee + + ", spbillCreateIp=" + spbillCreateIp + ", timeStart=" + + timeStart + ", timeExpire=" + timeExpire + ", goodsTag=" + + goodsTag + ", notifyUrl=" + notifyUrl + "]"; } } diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/PayUtil.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/PayUtil.java index cfe12868..824a239c 100644 --- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/PayUtil.java +++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/PayUtil.java @@ -182,7 +182,7 @@ public class PayUtil { WeixinMpAccount weixinAccount) throws PayException { PayPackageV3 payPackage = new PayPackageV3(weixinAccount, openId, body, orderNo, orderFee, ip, TradeType.JSAPI); - payPackage.setNotify_url(notifyUrl); + payPackage.setNotifyUrl(notifyUrl); return createPayJsRequestJsonV3(payPackage, weixinAccount); } @@ -308,7 +308,7 @@ public class PayUtil { /** * 创建V3.x NativePay支付链接 * - * @param weixinConfig + * @param weixinAccount * 支付配置信息 * @param productId * 与订单ID等价 diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/PayPackageV2.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/PayPackageV2.java index 18f2d08d..768660a0 100644 --- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/PayPackageV2.java +++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/PayPackageV2.java @@ -2,10 +2,10 @@ package com.foxinmy.weixin4j.mp.payment.v2; import java.util.Date; -import org.apache.commons.lang3.StringUtils; - +import com.alibaba.fastjson.annotation.JSONField; import com.foxinmy.weixin4j.mp.payment.PayPackage; import com.foxinmy.weixin4j.util.DateUtil; +import com.thoughtworks.xstream.annotations.XStreamAlias; /** * V2支付的订单详情 @@ -21,30 +21,36 @@ public class PayPackageV2 extends PayPackage { private static final long serialVersionUID = 5557542103637795834L; // 银行通道类型 固定为"WX" 非空 - private String bank_type; + @XStreamAlias("bank_type") + @JSONField(name = "bank_type") + private String bankType; // 商户号 注册时分配的财付通商户号 非空 private String partner; // 支付币种 默认值是"1" 非空 - private String fee_type; + @XStreamAlias("fee_type") + @JSONField(name = "fee_type") + private String feeType; // 物流费用 可为空 如果有值,必须保 证 transport_fee + product_fee=total_fee【传进来的参数按照实际金额即可 // 也就是元为单位】 - private String transport_fee; + @XStreamAlias("transport_fee") + @JSONField(name = "transport_fee") + private String transportFee; // 商品费用 可为空 商品费用,单位为分。如果有值,必须保 证 transport_fee + // product_fee=total_fee;【传进来的参数按照实际金额即可 也就是元为单位】 - private String product_fee; + @XStreamAlias("product_fee") + @JSONField(name = "product_fee") + private String productFee; // 传入参数字符编码 取值范围:"GBK"、"UTF-8",默认:"GBK" 可为空 - private String input_charset; + @XStreamAlias("input_charset") + @JSONField(name = "input_charset") + private String inputCharset; - public String getBank_type() { - return bank_type; + public String getBankType() { + return bankType; } - public void setBank_type(String bank_type) { - this.bank_type = bank_type; - } - - public void setBody(String body) { - super.setBody(StringUtils.isBlank(body) ? "服务费用" : body); + public void setBank_type(String bankType) { + this.bankType = bankType; } public String getPartner() { @@ -55,86 +61,82 @@ public class PayPackageV2 extends PayPackage { this.partner = partner; } - public String getFee_type() { - return fee_type; + public String getFeeType() { + return feeType; } - public void setFee_type(String fee_type) { - this.fee_type = fee_type; + public void setFeeType(String feeType) { + this.feeType = feeType; } - public void setNotify_url(String notify_url) { - super.setNotify_url(notify_url); + public String getTransportFee() { + return transportFee; } - public String getTransport_fee() { - return transport_fee; + public void setTransportFee(double transportFee) { + this.transportFee = DateUtil.formaFee2Fen(transportFee); } - public void setTransport_fee(double transport_fee) { - this.transport_fee = DateUtil.formaFee2Fen(transport_fee); + public String getProductFee() { + return productFee; } - public String getProduct_fee() { - return product_fee; + public void setProductFee(double productFee) { + this.productFee = DateUtil.formaFee2Fen(productFee); } - public void setProduct_fee(double product_fee) { - this.product_fee = DateUtil.formaFee2Fen(product_fee); + public String getInputCharset() { + return inputCharset; } - public String getInput_charset() { - return input_charset; - } - - public void setInput_charset(String input_charset) { - this.input_charset = input_charset; + public void setInput_charset(String inputCharset) { + this.inputCharset = inputCharset; } public PayPackageV2() { - this.bank_type = "WX"; - this.fee_type = "1"; - this.input_charset = "UTF-8"; + this.bankType = "WX"; + this.feeType = "1"; + this.inputCharset = "UTF-8"; } - public PayPackageV2(String out_trade_no, double total_fee, - String spbill_create_ip) { - this(null, null, null, out_trade_no, total_fee, null, spbill_create_ip, + public PayPackageV2(String outTradeNo, double totalFee, + String spbillCreateIp) { + this(null, null, null, outTradeNo, totalFee, null, spbillCreateIp, null, null, 0d, 0d, null); } - public PayPackageV2(String body, String out_trade_no, double total_fee, - String notify_url, String spbill_create_ip) { - this(body, null, null, out_trade_no, total_fee, notify_url, - spbill_create_ip, null, null, 0d, 0d, null); + public PayPackageV2(String body, String outTradeNo, double totalFee, + String notifyUrl, String spbillCreateIp) { + this(body, null, null, outTradeNo, totalFee, notifyUrl, spbillCreateIp, + null, null, 0d, 0d, null); } - public PayPackageV2(String body, String partner, String out_trade_no, - double total_fee, String notify_url, String spbill_create_ip) { - this(body, null, partner, out_trade_no, total_fee, notify_url, - spbill_create_ip, null, null, 0d, 0d, null); + public PayPackageV2(String body, String partner, String outTradeNo, + double totalFee, String notifyUrl, String spbillCreateIp) { + this(body, null, partner, outTradeNo, totalFee, notifyUrl, + spbillCreateIp, null, null, 0d, 0d, null); } public PayPackageV2(String body, String attach, String partner, - String out_trade_no, double total_fee, String notify_url, - String spbill_create_ip, Date time_start, Date time_expire, - double transport_fee, double product_fee, String goods_tag) { - super(body, attach, out_trade_no, total_fee, spbill_create_ip, - time_start, time_expire, goods_tag, notify_url); - this.bank_type = "WX"; - this.fee_type = "1"; - this.input_charset = "UTF-8"; - this.transport_fee = transport_fee > 0d ? DateUtil - .formaFee2Fen(transport_fee) : null; - this.product_fee = product_fee > 0 ? DateUtil.formaFee2Fen(product_fee) + String outTradeNo, double totalFee, String notifyUrl, + String spbillCreateIp, Date timeStart, Date timeExpire, + double transportFee, double productFee, String goodsTag) { + super(body, attach, outTradeNo, totalFee, spbillCreateIp, timeStart, + timeExpire, goodsTag, notifyUrl); + this.bankType = "WX"; + this.feeType = "1"; + this.inputCharset = "UTF-8"; + this.transportFee = transportFee > 0d ? DateUtil + .formaFee2Fen(transportFee) : null; + this.productFee = productFee > 0 ? DateUtil.formaFee2Fen(productFee) : null; } @Override public String toString() { - return "PayPackageV2 [bank_type=" + bank_type + ", partner=" + partner - + ", fee_type=" + fee_type + ", transport_fee=" + transport_fee - + ", product_fee=" + product_fee + ", input_charset=" - + input_charset + ", " + super.toString() + "]"; + return "PayPackageV2 [bankType=" + bankType + ", partner=" + partner + + ", feeType=" + feeType + ", transportFee=" + transportFee + + ", productFee=" + productFee + ", inputCharset=" + + inputCharset + ", " + super.toString() + "]"; } } diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/NativePayResponseV3.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/NativePayResponseV3.java index b991d56d..56767122 100644 --- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/NativePayResponseV3.java +++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/NativePayResponseV3.java @@ -55,7 +55,7 @@ public class NativePayResponseV3 extends ApiResult { throws PayException { super.setReturnCode(Consts.SUCCESS); this.setResultCode(Consts.SUCCESS); - this.setMchId(payPackage.getMch_id()); + this.setMchId(payPackage.getMchId()); this.setAppId(payPackage.getAppid()); this.setNonceStr(RandomUtil.generateString(16)); this.prePay = PayUtil.createPrePay(payPackage, paysignKey); diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/PayPackageV3.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/PayPackageV3.java index 295b1c39..086b993a 100644 --- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/PayPackageV3.java +++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/PayPackageV3.java @@ -4,6 +4,7 @@ import java.util.Date; import org.apache.commons.lang3.StringUtils; +import com.alibaba.fastjson.annotation.JSONField; import com.foxinmy.weixin4j.model.WeixinMpAccount; import com.foxinmy.weixin4j.mp.payment.PayPackage; import com.foxinmy.weixin4j.mp.type.TradeType; @@ -11,7 +12,7 @@ import com.foxinmy.weixin4j.util.RandomUtil; import com.thoughtworks.xstream.annotations.XStreamAlias; /** - * V3支付的订单详情
注意: total_fee字段传入时单位为元,创建支付时会转换为分 + * V3支付的订单详情
注意: totalFee字段传入时单位为元,创建支付时会转换为分 * * @className PayPackageV3 * @author jy @@ -25,48 +26,58 @@ public class PayPackageV3 extends PayPackage { private static final long serialVersionUID = 8944928173669656177L; private String appid; // 微信分配的公众账号 必须 - private String mch_id; // 微信支付分配的商户号 必须 - private String device_info; // 微信支付分配的终端设备号 非必须 - private String nonce_str; // 随机字符串,不长于 32 位 必须 + @XStreamAlias("mch_id") + @JSONField(name = "mch_id") + private String mchId; // 微信支付分配的商户号 必须 + @XStreamAlias("device_info") + @JSONField(name = "device_info") + private String deviceInfo; // 微信支付分配的终端设备号 非必须 + @XStreamAlias("nonce_str") + @JSONField(name = "nonce_str") + private String nonceStr; // 随机字符串,不长于 32 位 必须 private String sign; // 签名 必须 - private String trade_type; // 交易类型JSAPI、NATIVE、APP 必须 + @XStreamAlias("trade_type") + @JSONField(name = "trade_type") + private String tradeType; // 交易类型JSAPI、NATIVE、APP 必须 private String openid; // 用户在商户 appid 下的唯一 标识, trade_type 为 JSAPI 时,此参数必传 - private String product_id; // 只在 trade_type 为 NATIVE 时需要填写 非必须 + @XStreamAlias("product_id") + @JSONField(name = "product_id") + private String productId; // 只在 trade_type 为 NATIVE 时需要填写 非必须 public PayPackageV3() { } public PayPackageV3(WeixinMpAccount weixinAccount, String openId, - String body, String out_trade_no, double total_fee, - String spbill_create_ip, TradeType tradeType) { - this(weixinAccount, openId, body, null, out_trade_no, total_fee, null, - spbill_create_ip, tradeType); + String body, String outTradeNo, double totalFee, + String spbillCreateIp, TradeType tradeType) { + this(weixinAccount, openId, body, null, outTradeNo, totalFee, null, + spbillCreateIp, tradeType); } public PayPackageV3(WeixinMpAccount weixinAccount, String openId, - String body, String attach, String out_trade_no, double total_fee, - String notify_url, String spbill_create_ip, TradeType tradeType) { + String body, String attach, String outTradeNo, double totalFee, + String notifyUrl, String spbillCreateIp, TradeType tradeType) { this(weixinAccount.getId(), weixinAccount.getMchId(), weixinAccount .getDeviceInfo(), RandomUtil.generateString(16), body, attach, - out_trade_no, total_fee, spbill_create_ip, null, null, null, - notify_url, tradeType, openId, null); + outTradeNo, totalFee, spbillCreateIp, null, null, null, + notifyUrl, tradeType, openId, null); } - public PayPackageV3(String appid, String mch_id, String device_info, - String nonce_str, String body, String attach, String out_trade_no, - double total_fee, String spbill_create_ip, Date time_start, - Date time_expire, String goods_tag, String notify_url, - TradeType tradeType, String openid, String product_id) { - super(body, attach, out_trade_no, total_fee, spbill_create_ip, - time_start, time_expire, goods_tag, notify_url); + public PayPackageV3(String appid, String mchId, String deviceInfo, + String nonceStr, String body, String attach, String outTradeNo, + double totalFee, String spbillCreateIp, Date timeStart, + Date timeExpire, String goodsTag, String notifyUrl, + TradeType tradeType, String openid, String productId) { + super(body, attach, outTradeNo, totalFee, spbillCreateIp, timeStart, + timeExpire, goodsTag, notifyUrl); this.appid = appid; - this.mch_id = mch_id; - this.device_info = device_info; - this.nonce_str = nonce_str; - this.trade_type = tradeType.name(); + this.mchId = mchId; + this.deviceInfo = deviceInfo; + this.nonceStr = nonceStr; + this.tradeType = tradeType.name(); this.openid = openid; - this.product_id = product_id; + this.productId = productId; } public String getAppid() { @@ -77,28 +88,28 @@ public class PayPackageV3 extends PayPackage { this.appid = appid; } - public String getMch_id() { - return mch_id; + public String getMchId() { + return mchId; } - public void setMch_id(String mch_id) { - this.mch_id = mch_id; + public void setMchId(String mchId) { + this.mchId = mchId; } - public String getDevice_info() { - return device_info; + public String getDeviceInfo() { + return deviceInfo; } - public void setDevice_info(String device_info) { - this.device_info = device_info; + public void setDeviceInfo(String deviceInfo) { + this.deviceInfo = deviceInfo; } - public String getNonce_str() { - return nonce_str; + public String getNonceStr() { + return nonceStr; } - public void setNonce_str(String nonce_str) { - this.nonce_str = nonce_str; + public void setNonceStr(String nonceStr) { + this.nonceStr = nonceStr; } public String getSign() { @@ -113,16 +124,12 @@ public class PayPackageV3 extends PayPackage { super.setBody(StringUtils.isBlank(body) ? "服务费用" : body); } - public void setNotify_url(String notify_url) { - super.setNotify_url(notify_url); + public String getTradeType() { + return tradeType; } - public String getTrade_type() { - return trade_type; - } - - public void setTrade_type(TradeType tradeType) { - this.trade_type = tradeType.name(); + public void setTradeType(TradeType tradeType) { + this.tradeType = tradeType.name(); } public String getOpenid() { @@ -133,20 +140,20 @@ public class PayPackageV3 extends PayPackage { this.openid = openid; } - public String getProduct_id() { - return product_id; + public String getProductId() { + return productId; } - public void setProduct_id(String product_id) { - this.product_id = product_id; + public void setProductId(String productId) { + this.productId = productId; } @Override public String toString() { - return "PayPackageV3 [appid=" + appid + ", mch_id=" + mch_id - + ", device_info=" + device_info + ", nonce_str=" + nonce_str - + ", sign=" + sign + ", trade_type=" + trade_type + ", openid=" - + openid + ", product_id=" + product_id + ", " - + super.toString() + "]"; + return "PayPackageV3 [appid=" + appid + ", mchId=" + mchId + + ", deviceInfo=" + deviceInfo + ", nonceStr=" + nonceStr + + ", sign=" + sign + ", tradeType=" + tradeType + ", openid=" + + openid + ", productId=" + productId + ", " + super.toString() + + "]"; } } diff --git a/weixin4j-mp/weixin4j-mp-server/src/main/java/com/foxinmy/weixin4j/mp/action/PayAction.java b/weixin4j-mp/weixin4j-mp-server/src/main/java/com/foxinmy/weixin4j/mp/action/PayAction.java index 58592289..a12a9ff6 100644 --- a/weixin4j-mp/weixin4j-mp-server/src/main/java/com/foxinmy/weixin4j/mp/action/PayAction.java +++ b/weixin4j-mp/weixin4j-mp-server/src/main/java/com/foxinmy/weixin4j/mp/action/PayAction.java @@ -153,7 +153,7 @@ public class PayAction { public String jsNotifyV3(InputStream inputStream) { com.foxinmy.weixin4j.mp.payment.v3.Order order = XmlStream.get( inputStream, com.foxinmy.weixin4j.mp.payment.v3.Order.class); - log.info("jaapi_notify_order_info:", order); + log.info("jsapi_notify_order_info:", order); String sign = order.getSign(); order.setSign(null); WeixinMpAccount weixinAccount = ConfigUtil.getWeixinMpAccount(); @@ -163,6 +163,7 @@ public class PayAction { if (!sign.equals(valid_sign)) { return XmlStream.to(new XmlResult(Consts.FAIL, "签名错误")); } + // 处理业务逻辑 return XmlStream.to(new XmlResult(Consts.SUCCESS, "")); } @@ -233,7 +234,7 @@ public class PayAction { // 生成Package PayPackageV3 payPackage = new PayPackageV3(weixinAccount, "用户openid", "商品描述", "系统内部订单号", 1d, "IP地址", TradeType.NATIVE); - payPackage.setProduct_id(payNotify.getProductId()); + payPackage.setProductId(payNotify.getProductId()); if (!sign.equals(valid_sign)) { // 校验失败 NativePayResponseV3 payReponse = new NativePayResponseV3("签名失败",