优化微信支付代码

This commit is contained in:
Binary Wang 2018-05-14 23:52:24 +08:00
parent ef97a308f3
commit f796bfdafe
3 changed files with 32 additions and 66 deletions

View File

@ -1,6 +1,7 @@
package com.github.binarywang.wxpay.bean.order; package com.github.binarywang.wxpay.bean.order;
import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
@ -13,7 +14,7 @@ import lombok.Data;
* @author <a href="https://github.com/binarywang">Binary Wang</a> * @author <a href="https://github.com/binarywang">Binary Wang</a>
*/ */
@Data @Data
@Builder @AllArgsConstructor
public class WxPayMwebOrderResult { public class WxPayMwebOrderResult {
@XStreamAlias("mwebUrl") @XStreamAlias("mwebUrl")
private String mwebUrl; private String mwebUrl;

View File

@ -1,5 +1,6 @@
package com.github.binarywang.wxpay.bean.order; package com.github.binarywang.wxpay.bean.order;
import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
@ -12,7 +13,7 @@ import lombok.Data;
* @author <a href="https://github.com/binarywang">Binary Wang</a> * @author <a href="https://github.com/binarywang">Binary Wang</a>
*/ */
@Data @Data
@Builder @AllArgsConstructor
public class WxPayNativeOrderResult { public class WxPayNativeOrderResult {
private String codeUrl; private String codeUrl;
} }

View File

@ -1,29 +1,8 @@
package com.github.binarywang.wxpay.service.impl; package com.github.binarywang.wxpay.service.impl;
import java.io.File;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipException;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.github.binarywang.utils.qrcode.QrcodeUtils; import com.github.binarywang.utils.qrcode.QrcodeUtils;
import com.github.binarywang.wxpay.bean.WxPayApiData; import com.github.binarywang.wxpay.bean.WxPayApiData;
import com.github.binarywang.wxpay.bean.coupon.WxPayCouponInfoQueryRequest; import com.github.binarywang.wxpay.bean.coupon.*;
import com.github.binarywang.wxpay.bean.coupon.WxPayCouponInfoQueryResult;
import com.github.binarywang.wxpay.bean.coupon.WxPayCouponSendRequest;
import com.github.binarywang.wxpay.bean.coupon.WxPayCouponSendResult;
import com.github.binarywang.wxpay.bean.coupon.WxPayCouponStockQueryRequest;
import com.github.binarywang.wxpay.bean.coupon.WxPayCouponStockQueryResult;
import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult; import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
import com.github.binarywang.wxpay.bean.notify.WxPayRefundNotifyResult; import com.github.binarywang.wxpay.bean.notify.WxPayRefundNotifyResult;
import com.github.binarywang.wxpay.bean.notify.WxScanPayNotifyResult; import com.github.binarywang.wxpay.bean.notify.WxScanPayNotifyResult;
@ -31,37 +10,8 @@ import com.github.binarywang.wxpay.bean.order.WxPayAppOrderResult;
import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult; import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
import com.github.binarywang.wxpay.bean.order.WxPayMwebOrderResult; import com.github.binarywang.wxpay.bean.order.WxPayMwebOrderResult;
import com.github.binarywang.wxpay.bean.order.WxPayNativeOrderResult; import com.github.binarywang.wxpay.bean.order.WxPayNativeOrderResult;
import com.github.binarywang.wxpay.bean.request.WxPayAuthcode2OpenidRequest; import com.github.binarywang.wxpay.bean.request.*;
import com.github.binarywang.wxpay.bean.request.WxPayDefaultRequest; import com.github.binarywang.wxpay.bean.result.*;
import com.github.binarywang.wxpay.bean.request.WxPayDownloadBillRequest;
import com.github.binarywang.wxpay.bean.request.WxPayMicropayRequest;
import com.github.binarywang.wxpay.bean.request.WxPayOrderCloseRequest;
import com.github.binarywang.wxpay.bean.request.WxPayOrderQueryRequest;
import com.github.binarywang.wxpay.bean.request.WxPayOrderReverseRequest;
import com.github.binarywang.wxpay.bean.request.WxPayQueryCommentRequest;
import com.github.binarywang.wxpay.bean.request.WxPayRedpackQueryRequest;
import com.github.binarywang.wxpay.bean.request.WxPayRefundQueryRequest;
import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest;
import com.github.binarywang.wxpay.bean.request.WxPayReportRequest;
import com.github.binarywang.wxpay.bean.request.WxPaySendRedpackRequest;
import com.github.binarywang.wxpay.bean.request.WxPayShorturlRequest;
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
import com.github.binarywang.wxpay.bean.result.BaseWxPayResult;
import com.github.binarywang.wxpay.bean.result.WxPayAuthcode2OpenidResult;
import com.github.binarywang.wxpay.bean.result.WxPayBillBaseResult;
import com.github.binarywang.wxpay.bean.result.WxPayBillResult;
import com.github.binarywang.wxpay.bean.result.WxPayCommonResult;
import com.github.binarywang.wxpay.bean.result.WxPayMicropayResult;
import com.github.binarywang.wxpay.bean.result.WxPayOrderCloseResult;
import com.github.binarywang.wxpay.bean.result.WxPayOrderQueryResult;
import com.github.binarywang.wxpay.bean.result.WxPayOrderReverseResult;
import com.github.binarywang.wxpay.bean.result.WxPayRedpackQueryResult;
import com.github.binarywang.wxpay.bean.result.WxPayRefundQueryResult;
import com.github.binarywang.wxpay.bean.result.WxPayRefundResult;
import com.github.binarywang.wxpay.bean.result.WxPaySandboxSignKeyResult;
import com.github.binarywang.wxpay.bean.result.WxPaySendRedpackResult;
import com.github.binarywang.wxpay.bean.result.WxPayShorturlResult;
import com.github.binarywang.wxpay.bean.result.WxPayUnifiedOrderResult;
import com.github.binarywang.wxpay.config.WxPayConfig; import com.github.binarywang.wxpay.config.WxPayConfig;
import com.github.binarywang.wxpay.constant.WxPayConstants.BillType; import com.github.binarywang.wxpay.constant.WxPayConstants.BillType;
import com.github.binarywang.wxpay.constant.WxPayConstants.SignType; import com.github.binarywang.wxpay.constant.WxPayConstants.SignType;
@ -73,6 +23,17 @@ import com.github.binarywang.wxpay.util.SignUtils;
import com.google.common.base.Joiner; import com.google.common.base.Joiner;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import jodd.io.ZipUtil; import jodd.io.ZipUtil;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.*;
import java.util.zip.ZipException;
import static com.github.binarywang.wxpay.constant.WxPayConstants.QUERY_COMMENT_DATE_FORMAT; import static com.github.binarywang.wxpay.constant.WxPayConstants.QUERY_COMMENT_DATE_FORMAT;
import static com.github.binarywang.wxpay.constant.WxPayConstants.TarType; import static com.github.binarywang.wxpay.constant.WxPayConstants.TarType;
@ -290,7 +251,7 @@ public abstract class BaseWxPayServiceImpl implements WxPayService {
WxPayUnifiedOrderResult unifiedOrderResult = this.unifiedOrder(request); WxPayUnifiedOrderResult unifiedOrderResult = this.unifiedOrder(request);
String prepayId = unifiedOrderResult.getPrepayId(); String prepayId = unifiedOrderResult.getPrepayId();
if (StringUtils.isBlank(prepayId)) { if (StringUtils.isBlank(prepayId)) {
throw new RuntimeException(String.format("无法获取prepay id错误代码 '%s',信息:%s。", throw new WxPayException(String.format("无法获取prepay id错误代码 '%s',信息:%s。",
unifiedOrderResult.getErrCode(), unifiedOrderResult.getErrCodeDes())); unifiedOrderResult.getErrCode(), unifiedOrderResult.getErrCodeDes()));
} }
@ -298,15 +259,11 @@ public abstract class BaseWxPayServiceImpl implements WxPayService {
String nonceStr = String.valueOf(System.currentTimeMillis()); String nonceStr = String.valueOf(System.currentTimeMillis());
switch (request.getTradeType()) { switch (request.getTradeType()) {
case TradeType.MWEB: { case TradeType.MWEB: {
return (T) WxPayMwebOrderResult.builder() return (T) new WxPayMwebOrderResult(unifiedOrderResult.getMwebUrl());
.mwebUrl(unifiedOrderResult.getMwebUrl())
.build();
} }
case TradeType.NATIVE: { case TradeType.NATIVE: {
return (T) WxPayNativeOrderResult.builder() return (T) new WxPayNativeOrderResult(unifiedOrderResult.getCodeURL());
.codeUrl(unifiedOrderResult.getCodeURL())
.build();
} }
case TradeType.APP: { case TradeType.APP: {
@ -318,7 +275,13 @@ public abstract class BaseWxPayServiceImpl implements WxPayService {
Map<String, String> configMap = new HashMap<>(8); Map<String, String> configMap = new HashMap<>(8);
// 此map用于参与调起sdk支付的二次签名,格式全小写timestamp只能是10位,格式固定切勿修改 // 此map用于参与调起sdk支付的二次签名,格式全小写timestamp只能是10位,格式固定切勿修改
String partnerId = getConfig().getMchId(); String partnerId;
if (StringUtils.isEmpty(request.getMchId())) {
partnerId = this.getConfig().getMchId();
} else {
partnerId = request.getMchId();
}
configMap.put("prepayid", prepayId); configMap.put("prepayid", prepayId);
configMap.put("partnerid", partnerId); configMap.put("partnerid", partnerId);
String packageValue = "Sign=WXPay"; String packageValue = "Sign=WXPay";
@ -327,7 +290,7 @@ public abstract class BaseWxPayServiceImpl implements WxPayService {
configMap.put("noncestr", nonceStr); configMap.put("noncestr", nonceStr);
configMap.put("appid", appId); configMap.put("appid", appId);
return (T) WxPayAppOrderResult.builder() final WxPayAppOrderResult result = WxPayAppOrderResult.builder()
.sign(SignUtils.createSign(configMap, null, this.getConfig().getMchKey(), false)) .sign(SignUtils.createSign(configMap, null, this.getConfig().getMchKey(), false))
.prepayId(prepayId) .prepayId(prepayId)
.partnerId(partnerId) .partnerId(partnerId)
@ -336,13 +299,14 @@ public abstract class BaseWxPayServiceImpl implements WxPayService {
.timeStamp(timestamp) .timeStamp(timestamp)
.nonceStr(nonceStr) .nonceStr(nonceStr)
.build(); .build();
return (T) result;
} }
case TradeType.JSAPI: { case TradeType.JSAPI: {
String signType = SignType.MD5; String signType = SignType.MD5;
String appid = unifiedOrderResult.getAppid(); String appid = unifiedOrderResult.getAppid();
if (StringUtils.isNotEmpty(this.getConfig().getSubAppId())) { if (StringUtils.isNotEmpty(unifiedOrderResult.getSubAppId())) {
appid = this.getConfig().getSubAppId(); appid = unifiedOrderResult.getSubAppId();
} }
WxPayMpOrderResult payResult = WxPayMpOrderResult.builder() WxPayMpOrderResult payResult = WxPayMpOrderResult.builder()