Commit d123ce1abbe54447bc64028d37a2a325efea33a1

Authored by huanggang
1 parent c09450ac

upgrade after testing

cashier-pipeline/src/main/java/com/diligrp/cashier/pipeline/client/CardPaymentHttpClient.java
@@ -69,12 +69,18 @@ public class CardPaymentHttpClient extends ServiceEndpointSupport { @@ -69,12 +69,18 @@ public class CardPaymentHttpClient extends ServiceEndpointSupport {
69 HttpResult result = send(uri, payload); 69 HttpResult result = send(uri, payload);
70 if (result.statusCode == 200) { 70 if (result.statusCode == 200) {
71 LOG.debug("Received from card payment pipeline: {}", result.responseText); 71 LOG.debug("Received from card payment pipeline: {}", result.responseText);
72 - Map<String, Object> response = JsonUtils.fromJsonString(result.responseText, new TypeReference<>() {}); 72 + Map<String, Object> response = JsonUtils.fromJsonString(result.responseText, new TypeReference<>() {
  73 + });
73 if ("200".equals(response.get("code"))) { 74 if ("200".equals(response.get("code"))) {
74 - String outTradeNo = (String) response.get("data");  
75 - return new CardPaymentResponse(request.getPaymentId(), outTradeNo,  
76 - OutPaymentType.DILICARD, String.valueOf(request.getAccountId()), now,  
77 - PaymentState.SUCCESS, "园区卡支付成功"); 75 + Map<String, Object> data = (Map<String, Object>) response.get("data");
  76 + String outTradeNo = (String) data.get("outTradeNo");
  77 + Map<String, Object> payerId = new LinkedHashMap<>();
  78 + payerId.put("customerId", convertLong(data.get("customerId")));
  79 + payerId.put("accountId", convertLong(data.get("accountId")));
  80 + payerId.put("cardNo", data.get("cardNo"));
  81 + payerId.put("name", data.get("name"));
  82 + return new CardPaymentResponse(request.getPaymentId(), outTradeNo, OutPaymentType.DILICARD,
  83 + JsonUtils.toJsonString(payerId), now, PaymentState.SUCCESS, "园区卡支付成功");
78 } else { 84 } else {
79 throw new PaymentPipelineException(ErrorCode.SERVICE_ACCESS_ERROR, "园区卡支付失败: " + response.get("message")); 85 throw new PaymentPipelineException(ErrorCode.SERVICE_ACCESS_ERROR, "园区卡支付失败: " + response.get("message"));
80 } 86 }
@@ -95,10 +101,11 @@ public class CardPaymentHttpClient extends ServiceEndpointSupport { @@ -95,10 +101,11 @@ public class CardPaymentHttpClient extends ServiceEndpointSupport {
95 HttpResult result = send(uri, payload); 101 HttpResult result = send(uri, payload);
96 if (result.statusCode == 200) { 102 if (result.statusCode == 200) {
97 LOG.debug("Received from card payment pipeline: {}", result.responseText); 103 LOG.debug("Received from card payment pipeline: {}", result.responseText);
98 - Map<String, Object> response = JsonUtils.fromJsonString(result.responseText, new TypeReference<>() {}); 104 + Map<String, Object> response = JsonUtils.fromJsonString(result.responseText, new TypeReference<>() {
  105 + });
99 if ("200".equals(response.get("code"))) { 106 if ("200".equals(response.get("code"))) {
100 return new OnlineRefundResponse(request.getRefundId(), null, now, 107 return new OnlineRefundResponse(request.getRefundId(), null, now,
101 - PaymentState.SUCCESS, "园区卡退款成功"); 108 + PaymentState.SUCCESS, "园区卡退款成功");
102 } else { 109 } else {
103 throw new PaymentPipelineException(ErrorCode.SERVICE_ACCESS_ERROR, "园区卡支付退款失败: " + response.get("message")); 110 throw new PaymentPipelineException(ErrorCode.SERVICE_ACCESS_ERROR, "园区卡支付退款失败: " + response.get("message"));
104 } 111 }
@@ -117,16 +124,18 @@ public class CardPaymentHttpClient extends ServiceEndpointSupport { @@ -117,16 +124,18 @@ public class CardPaymentHttpClient extends ServiceEndpointSupport {
117 HttpResult result = send(uri, payload); 124 HttpResult result = send(uri, payload);
118 if (result.statusCode == 200) { 125 if (result.statusCode == 200) {
119 LOG.debug("Received from card payment pipeline: {}", result.responseText); 126 LOG.debug("Received from card payment pipeline: {}", result.responseText);
120 - Map<String, Object> response = JsonUtils.fromJsonString(result.responseText, new TypeReference<>() {}); 127 + Map<String, Object> response = JsonUtils.fromJsonString(result.responseText, new TypeReference<>() {
  128 + });
121 if ("200".equals(response.get("code"))) { 129 if ("200".equals(response.get("code"))) {
122 List<UserCardDTO> userCards = new ArrayList<>(); 130 List<UserCardDTO> userCards = new ArrayList<>();
123 Object data = response.get("data"); 131 Object data = response.get("data");
124 if (data != null) { 132 if (data != null) {
125 - List<Map<String, Object>> cardList = JsonUtils.convertValue(data, new TypeReference<>() {}); 133 + List<Map<String, Object>> cardList = JsonUtils.convertValue(data, new TypeReference<>() {
  134 + });
126 for (Map<String, Object> card : cardList) { 135 for (Map<String, Object> card : cardList) {
127 UserCardDTO userCard = new UserCardDTO(convertLong(card.get("customerId")), 136 UserCardDTO userCard = new UserCardDTO(convertLong(card.get("customerId")),
128 - convertLong(card.get("accountId")), (String) card.get("cardNo"),  
129 - (String) card.get("customerName"), convertLong(card.get("amount"))); 137 + convertLong(card.get("accountId")), (String) card.get("cardNo"),
  138 + (String) card.get("customerName"), convertLong(card.get("amount")));
130 userCards.add(userCard); 139 userCards.add(userCard);
131 } 140 }
132 } 141 }
@@ -142,4 +151,4 @@ public class CardPaymentHttpClient extends ServiceEndpointSupport { @@ -142,4 +151,4 @@ public class CardPaymentHttpClient extends ServiceEndpointSupport {
142 private Long convertLong(Object value) { 151 private Long convertLong(Object value) {
143 return value != null ? ((Number) value).longValue() : null; 152 return value != null ? ((Number) value).longValue() : null;
144 } 153 }
145 -} 154 -}
  155 +}
146 \ No newline at end of file 156 \ No newline at end of file
cashier-pipeline/src/main/java/com/diligrp/cashier/pipeline/core/WechatDirectPipeline.java
@@ -4,7 +4,14 @@ import com.diligrp.cashier.pipeline.Constants; @@ -4,7 +4,14 @@ import com.diligrp.cashier.pipeline.Constants;
4 import com.diligrp.cashier.pipeline.client.WechatDirectHttpClient; 4 import com.diligrp.cashier.pipeline.client.WechatDirectHttpClient;
5 import com.diligrp.cashier.pipeline.client.WechatHttpClient; 5 import com.diligrp.cashier.pipeline.client.WechatHttpClient;
6 import com.diligrp.cashier.pipeline.domain.*; 6 import com.diligrp.cashier.pipeline.domain.*;
  7 +import com.diligrp.cashier.pipeline.exception.PaymentPipelineException;
  8 +import com.diligrp.cashier.pipeline.util.WechatConstants;
  9 +import com.diligrp.cashier.pipeline.util.WechatSignatureUtils;
  10 +import com.diligrp.cashier.shared.ErrorCode;
7 import com.diligrp.cashier.shared.util.AssertUtils; 11 import com.diligrp.cashier.shared.util.AssertUtils;
  12 +import com.diligrp.cashier.shared.util.RandomUtils;
  13 +import org.slf4j.Logger;
  14 +import org.slf4j.LoggerFactory;
8 15
9 /** 16 /**
10 * 微信支付通道抽象模型-直联模式 17 * 微信支付通道抽象模型-直联模式
@@ -13,6 +20,9 @@ import com.diligrp.cashier.shared.util.AssertUtils; @@ -13,6 +20,9 @@ import com.diligrp.cashier.shared.util.AssertUtils;
13 * upay_wechat_param需配置商户API接口所需配置信息 20 * upay_wechat_param需配置商户API接口所需配置信息
14 */ 21 */
15 public class WechatDirectPipeline extends WechatPipeline<WechatDirectPipeline.DirectWechatParams> { 22 public class WechatDirectPipeline extends WechatPipeline<WechatDirectPipeline.DirectWechatParams> {
  23 +
  24 + private static final Logger LOG = LoggerFactory.getLogger(WechatDirectPipeline.class);
  25 +
16 private final ScanTimeStrategy strategy; 26 private final ScanTimeStrategy strategy;
17 27
18 // 直联模式下的微信客户端 28 // 直联模式下的微信客户端
@@ -41,11 +51,27 @@ public class WechatDirectPipeline extends WechatPipeline&lt;WechatDirectPipeline.Di @@ -41,11 +51,27 @@ public class WechatDirectPipeline extends WechatPipeline&lt;WechatDirectPipeline.Di
41 return super.sendNativePrepayRequest(request); 51 return super.sendNativePrepayRequest(request);
42 } 52 }
43 53
44 - @Override  
45 public MiniProPrepayResponse sendMiniProPrepayRequest(MiniProPrepayRequest request) { 54 public MiniProPrepayResponse sendMiniProPrepayRequest(MiniProPrepayRequest request) {
46 - // 直连模式下,外部商户号设置为微信商户号  
47 - request.put(Constants.PARAM_MCH_ID, wechatConfig.getMchId());  
48 - return super.sendMiniProPrepayRequest(request); 55 + try {
  56 + // 直连模式下,外部商户号设置为微信商户号
  57 + request.put(Constants.PARAM_MCH_ID, wechatConfig.getMchId());
  58 + String notifyUri = String.format(Constants.WECHAT_PAYMENT_NOTIFY_URI, params().getNotifyUrl(), request.getPaymentId());
  59 + String prepayId = getClient().sendMiniProPrepayRequest(request, notifyUri);
  60 +
  61 + String timeStamp = String.valueOf(System.currentTimeMillis() / 1000);
  62 + String nonceStr = RandomUtils.randomString(32);
  63 + String packet = "prepay_id=" + prepayId;
  64 + String appId = getClient().getWechatConfig().getAppId();
  65 + String message = String.format("%s\n%s\n%s\n%s\n", appId, timeStamp, nonceStr, packet);
  66 + String paySign = WechatSignatureUtils.signature(message, getClient().getWechatConfig().getPrivateKey());
  67 + String signType = WechatConstants.RSA_ALGORITHM;
  68 + return MiniProPrepayResponse.of(request.getPaymentId(), prepayId, prepayId, timeStamp, nonceStr, signType, paySign);
  69 + } catch (PaymentPipelineException | IllegalArgumentException pse) {
  70 + throw pse;
  71 + } catch (Exception ex) {
  72 + LOG.error("Send wechat mini pro prepay request exception", ex);
  73 + throw new PaymentPipelineException(ErrorCode.SYSTEM_UNKNOWN_ERROR, "发起微信预支付失败");
  74 + }
49 } 75 }
50 76
51 @Override 77 @Override
cashier-pipeline/src/main/java/com/diligrp/cashier/pipeline/core/WechatPartnerPipeline.java
@@ -4,7 +4,14 @@ import com.diligrp.cashier.pipeline.Constants; @@ -4,7 +4,14 @@ import com.diligrp.cashier.pipeline.Constants;
4 import com.diligrp.cashier.pipeline.client.WechatHttpClient; 4 import com.diligrp.cashier.pipeline.client.WechatHttpClient;
5 import com.diligrp.cashier.pipeline.client.WechatPartnerHttpClient; 5 import com.diligrp.cashier.pipeline.client.WechatPartnerHttpClient;
6 import com.diligrp.cashier.pipeline.domain.*; 6 import com.diligrp.cashier.pipeline.domain.*;
  7 +import com.diligrp.cashier.pipeline.exception.PaymentPipelineException;
  8 +import com.diligrp.cashier.pipeline.util.WechatConstants;
  9 +import com.diligrp.cashier.pipeline.util.WechatSignatureUtils;
  10 +import com.diligrp.cashier.shared.ErrorCode;
7 import com.diligrp.cashier.shared.util.AssertUtils; 11 import com.diligrp.cashier.shared.util.AssertUtils;
  12 +import com.diligrp.cashier.shared.util.RandomUtils;
  13 +import org.slf4j.Logger;
  14 +import org.slf4j.LoggerFactory;
8 15
9 /** 16 /**
10 * 微信支付通道抽象模型-服务商模式 17 * 微信支付通道抽象模型-服务商模式
@@ -15,6 +22,8 @@ import com.diligrp.cashier.shared.util.AssertUtils; @@ -15,6 +22,8 @@ import com.diligrp.cashier.shared.util.AssertUtils;
15 */ 22 */
16 public class WechatPartnerPipeline extends WechatPipeline<WechatPartnerPipeline.PartnerWechatParams> { 23 public class WechatPartnerPipeline extends WechatPipeline<WechatPartnerPipeline.PartnerWechatParams> {
17 24
  25 + private static final Logger LOG = LoggerFactory.getLogger(WechatPartnerPipeline.class);
  26 +
18 private final ScanTimeStrategy strategy; 27 private final ScanTimeStrategy strategy;
19 28
20 // 服务商模式下的微信客户端 29 // 服务商模式下的微信客户端
@@ -49,9 +58,27 @@ public class WechatPartnerPipeline extends WechatPipeline&lt;WechatPartnerPipeline. @@ -49,9 +58,27 @@ public class WechatPartnerPipeline extends WechatPipeline&lt;WechatPartnerPipeline.
49 58
50 @Override 59 @Override
51 public MiniProPrepayResponse sendMiniProPrepayRequest(MiniProPrepayRequest request) { 60 public MiniProPrepayResponse sendMiniProPrepayRequest(MiniProPrepayRequest request) {
52 - // 服务商模式下,外部商户号默认设置为特约子商户  
53 - request.put(Constants.PARAM_MCH_ID, params().getSubMchId());  
54 - return super.sendMiniProPrepayRequest(request); 61 + try {
  62 + // 服务商模式下,外部商户号默认设置为特约子商户
  63 + PartnerWechatParams params = params();
  64 + request.put(Constants.PARAM_MCH_ID, params.getSubMchId());
  65 + String notifyUri = String.format(Constants.WECHAT_PAYMENT_NOTIFY_URI, params.getNotifyUrl(), request.getPaymentId());
  66 + String prepayId = getClient().sendMiniProPrepayRequest(request, notifyUri);
  67 +
  68 + String timeStamp = String.valueOf(System.currentTimeMillis() / 1000);
  69 + String nonceStr = RandomUtils.randomString(32);
  70 + String packet = "prepay_id=" + prepayId;
  71 + String message = String.format("%s\n%s\n%s\n%s\n", params.getSubAppId(), timeStamp, nonceStr, packet);
  72 + // 签名时需要使用配置的subAppId
  73 + String paySign = WechatSignatureUtils.signature(message, getClient().getWechatConfig().getPrivateKey());
  74 + String signType = WechatConstants.RSA_ALGORITHM;
  75 + return MiniProPrepayResponse.of(request.getPaymentId(), prepayId, prepayId, timeStamp, nonceStr, signType, paySign);
  76 + } catch (PaymentPipelineException | IllegalArgumentException pse) {
  77 + throw pse;
  78 + } catch (Exception ex) {
  79 + LOG.error("Send wechat mini pro prepay request exception", ex);
  80 + throw new PaymentPipelineException(ErrorCode.SYSTEM_UNKNOWN_ERROR, "发起微信预支付失败");
  81 + }
55 } 82 }
56 83
57 @Override 84 @Override
cashier-pipeline/src/main/java/com/diligrp/cashier/pipeline/core/WechatPipeline.java
@@ -8,11 +8,9 @@ import com.diligrp.cashier.pipeline.domain.wechat.WechatConfig; @@ -8,11 +8,9 @@ import com.diligrp.cashier.pipeline.domain.wechat.WechatConfig;
8 import com.diligrp.cashier.pipeline.exception.PaymentPipelineException; 8 import com.diligrp.cashier.pipeline.exception.PaymentPipelineException;
9 import com.diligrp.cashier.pipeline.type.ChannelType; 9 import com.diligrp.cashier.pipeline.type.ChannelType;
10 import com.diligrp.cashier.pipeline.util.WechatConstants; 10 import com.diligrp.cashier.pipeline.util.WechatConstants;
11 -import com.diligrp.cashier.pipeline.util.WechatSignatureUtils;  
12 import com.diligrp.cashier.shared.ErrorCode; 11 import com.diligrp.cashier.shared.ErrorCode;
13 import com.diligrp.cashier.shared.security.RsaCipher; 12 import com.diligrp.cashier.shared.security.RsaCipher;
14 import com.diligrp.cashier.shared.util.AssertUtils; 13 import com.diligrp.cashier.shared.util.AssertUtils;
15 -import com.diligrp.cashier.shared.util.RandomUtils;  
16 import org.slf4j.Logger; 14 import org.slf4j.Logger;
17 import org.slf4j.LoggerFactory; 15 import org.slf4j.LoggerFactory;
18 16
@@ -100,24 +98,7 @@ public abstract class WechatPipeline&lt;T extends WechatPipeline.WechatParams&gt; exte @@ -100,24 +98,7 @@ public abstract class WechatPipeline&lt;T extends WechatPipeline.WechatParams&gt; exte
100 * 小程序预支付下单 98 * 小程序预支付下单
101 */ 99 */
102 public MiniProPrepayResponse sendMiniProPrepayRequest(MiniProPrepayRequest request) { 100 public MiniProPrepayResponse sendMiniProPrepayRequest(MiniProPrepayRequest request) {
103 - try {  
104 - String notifyUri = String.format(Constants.WECHAT_PAYMENT_NOTIFY_URI, params().getNotifyUrl(), request.getPaymentId());  
105 - String prepayId = getClient().sendMiniProPrepayRequest(request, notifyUri);  
106 -  
107 - String timeStamp = String.valueOf(System.currentTimeMillis() / 1000);  
108 - String nonceStr = RandomUtils.randomString(32);  
109 - String packet = "prepay_id=" + prepayId;  
110 - String appId = getClient().getWechatConfig().getAppId();  
111 - String message = String.format("%s\n%s\n%s\n%s\n", appId, timeStamp, nonceStr, packet);  
112 - String paySign = WechatSignatureUtils.signature(message, getClient().getWechatConfig().getPrivateKey());  
113 - String signType = WechatConstants.RSA_ALGORITHM;  
114 - return MiniProPrepayResponse.of(request.getPaymentId(), prepayId, prepayId, timeStamp, nonceStr, signType, paySign);  
115 - } catch (PaymentPipelineException | IllegalArgumentException pse) {  
116 - throw pse;  
117 - } catch (Exception ex) {  
118 - LOG.error("Send wechat mini pro prepay request exception", ex);  
119 - throw new PaymentPipelineException(ErrorCode.SYSTEM_UNKNOWN_ERROR, "发起微信预支付失败");  
120 - } 101 + return super.sendMiniProPrepayRequest(request);
121 } 102 }
122 103
123 /** 104 /**