Commit dd5fc334327eeb180bdf09038fa12c74b520ce5b

Authored by huanggang
1 parent 1e1c5f65

fix redirectUrl issue

cashier-boss/src/main/java/com/diligrp/cashier/boss/controller/CashierDeskController.java
... ... @@ -35,7 +35,6 @@ public class CashierDeskController {
35 35 AssertUtils.notNull(request.getAmount(), "amount missed");
36 36 AssertUtils.isTrue(request.getAmount() > 0, "Invalid amount");
37 37 AssertUtils.notEmpty(request.getOutTradeNo(), "outTradeNo missed");
38   - AssertUtils.notEmpty(request.getRedirectUrl(), "redirectUrl missed");
39 38  
40 39 CashierOrder cashierOrder = CashierOrderConverter.INSTANCE.convert(request);
41 40 Merchant merchant = merchantService.loadCashierMerchant(request.getMchId());
... ...
cashier-boss/src/main/java/com/diligrp/cashier/boss/domain/CashierOrderVO.java
... ... @@ -5,6 +5,10 @@ import com.diligrp.cashier.pipeline.type.ChannelType;
5 5 import java.util.List;
6 6  
7 7 public class CashierOrderVO {
  8 + // 商户号
  9 + private final Long mchId;
  10 + // 商户名称
  11 + private final String mchName;
8 12 // 交易号
9 13 private final String tradeId;
10 14 // 业务系统用户标识
... ... @@ -18,8 +22,10 @@ public class CashierOrderVO {
18 22 // 支付通道
19 23 private final List<PaymentPipeline> pipelines;
20 24  
21   - public CashierOrderVO(String tradeId, String userId, String goods, Long amount,
  25 + public CashierOrderVO(Long mchId, String mchName, String tradeId, String userId, String goods, Long amount,
22 26 String redirectUrl, List<PaymentPipeline> pipelines) {
  27 + this.mchId = mchId;
  28 + this.mchName = mchName;
23 29 this.tradeId = tradeId;
24 30 this.userId = userId;
25 31 this.goods = goods;
... ... @@ -28,6 +34,14 @@ public class CashierOrderVO {
28 34 this.pipelines = pipelines;
29 35 }
30 36  
  37 + public Long getMchId() {
  38 + return mchId;
  39 + }
  40 +
  41 + public String getMchName() {
  42 + return mchName;
  43 + }
  44 +
31 45 public String getTradeId() {
32 46 return tradeId;
33 47 }
... ...
cashier-boss/src/main/java/com/diligrp/cashier/boss/service/impl/CashierDeskManager.java
... ... @@ -37,7 +37,6 @@ public class CashierDeskManager implements ICashierDeskManager {
37 37 AssertUtils.notNull(request.getAmount(), "amount missed");
38 38 AssertUtils.isTrue(request.getAmount() > 0, "Invalid amount");
39 39 AssertUtils.notEmpty(request.getOutTradeNo(), "outTradeNo missed");
40   - AssertUtils.notEmpty(request.getRedirectUrl(), "redirectUrl missed");
41 40  
42 41 CashierOrder cashierOrder = CashierOrderConverter2.INSTANCE.convert(request);
43 42 Merchant merchant = merchantService.loadCashierMerchant(request.getMchId());
... ...
cashier-boss/src/main/java/com/diligrp/cashier/boss/service/impl/CashierDeskServiceImpl.java
... ... @@ -7,6 +7,7 @@ import com.diligrp.cashier.boss.domain.CashierOrderVO;
7 7 import com.diligrp.cashier.boss.domain.CashierPaymentUrl;
8 8 import com.diligrp.cashier.boss.exception.BossServiceException;
9 9 import com.diligrp.cashier.boss.service.ICashierDeskService;
  10 +import com.diligrp.cashier.boss.service.IMerchantService;
10 11 import com.diligrp.cashier.pipeline.core.PaymentPipeline;
11 12 import com.diligrp.cashier.pipeline.domain.OnlinePaymentStatus;
12 13 import com.diligrp.cashier.pipeline.service.IPaymentPipelineManager;
... ... @@ -35,6 +36,9 @@ public class CashierDeskServiceImpl implements ICashierDeskService {
35 36 private ITradeAssistantService tradeAssistantService;
36 37  
37 38 @Resource
  39 + private IMerchantService merchantService;
  40 +
  41 + @Resource
38 42 private IPaymentPipelineManager paymentPipelineManager;
39 43  
40 44 @Resource
... ... @@ -83,11 +87,12 @@ public class CashierDeskServiceImpl implements ICashierDeskService {
83 87 if (TradeState.isFinished(trade.getState())) {
84 88 throw new BossServiceException(ErrorCode.ILLEGAL_ARGUMENT_ERROR, "收银台订单已完成,不能进行支付");
85 89 }
  90 + Merchant merchant = merchantService.loadCashierMerchant(trade.getMchId());
86 91 List<PaymentPipeline> pipelines = paymentPipelineManager.listPipelines(orderToken.getMchId(), PaymentPipeline.class);
87 92 List<CashierOrderVO.PaymentPipeline> pipelineList = pipelines.stream().map(pipeline ->
88 93 new CashierOrderVO.PaymentPipeline(pipeline.pipelineId(), pipeline.supportedChannel())).toList();
89   - return new CashierOrderVO(orderToken.getTradeId(), orderToken.getUserId(), trade.getGoods(), trade.getMaxAmount(),
90   - orderToken.getRedirectUrl(), pipelineList);
  94 + return new CashierOrderVO(merchant.getMchId(), merchant.getName(), orderToken.getTradeId(), orderToken.getUserId(),
  95 + trade.getGoods(), trade.getMaxAmount(), orderToken.getRedirectUrl(), pipelineList);
91 96 }
92 97  
93 98 /**
... ...
cashier-pipeline/src/main/java/com/diligrp/cashier/pipeline/client/CardPaymentHttpClient.java
... ... @@ -11,7 +11,6 @@ import com.diligrp.cashier.pipeline.type.PaymentState;
11 11 import com.diligrp.cashier.shared.ErrorCode;
12 12 import com.diligrp.cashier.shared.service.ServiceEndpointSupport;
13 13 import com.diligrp.cashier.shared.type.SourceType;
14   -import com.diligrp.cashier.shared.util.CurrencyUtils;
15 14 import com.diligrp.cashier.shared.util.JsonUtils;
16 15 import com.fasterxml.jackson.core.type.TypeReference;
17 16 import org.slf4j.Logger;
... ... @@ -65,11 +64,11 @@ public class CardPaymentHttpClient extends ServiceEndpointSupport {
65 64 }
66 65 String payload = JsonUtils.toJsonString(params);
67 66  
68   - LOG.debug("Sending card payment request: {}", payload);
  67 + LOG.info("Sending card payment request: {}\n{}", request.getPaymentId(), payload);
69 68 LocalDateTime now = LocalDateTime.now();
70 69 HttpResult result = send(uri, payload);
71 70 if (result.statusCode == 200) {
72   - LOG.debug("Received from card payment pipeline: {}", result.responseText);
  71 + LOG.debug("Received from card payment pipeline: {}\n{}", request.getPaymentId(), result.responseText);
73 72 Map<String, Object> response = JsonUtils.fromJsonString(result.responseText, new TypeReference<>() {});
74 73 if ("200".equals(response.get("code"))) {
75 74 Map<String, Object> data = (Map<String, Object>) response.get("data");
... ... @@ -80,7 +79,7 @@ public class CardPaymentHttpClient extends ServiceEndpointSupport {
80 79 payerId.put("cardNo", data.get("cardNo"));
81 80 payerId.put("name", data.get("customerName"));
82 81 return new CardPaymentResponse(request.getPaymentId(), outTradeNo, OutPaymentType.DILICARD,
83   - JsonUtils.toJsonString(payerId), now, PaymentState.SUCCESS, "园区卡支付成功");
  82 + JsonUtils.toJsonString(payerId), now, PaymentState.SUCCESS, "园区卡支付成功");
84 83 } else {
85 84 throw new PaymentPipelineException(ErrorCode.SERVICE_ACCESS_ERROR, "园区卡支付失败: " + response.get("message"));
86 85 }
... ... @@ -96,11 +95,11 @@ public class CardPaymentHttpClient extends ServiceEndpointSupport {
96 95 params.put("amount", request.getAmount());
97 96 String payload = JsonUtils.toJsonString(params);
98 97  
99   - LOG.debug("Sending card refund request: {}", payload);
  98 + LOG.info("Sending card refund request: {}\n{}", request.getRefundId(), payload);
100 99 LocalDateTime now = LocalDateTime.now();
101 100 HttpResult result = send(uri, payload);
102 101 if (result.statusCode == 200) {
103   - LOG.debug("Received from card payment pipeline: {}", result.responseText);
  102 + LOG.debug("Received from card payment pipeline: {}\n", request.getRefundId(), result.responseText);
104 103 Map<String, Object> response = JsonUtils.fromJsonString(result.responseText, new TypeReference<>() {});
105 104 if ("200".equals(response.get("code"))) {
106 105 return new OnlineRefundResponse(request.getRefundId(), null, now,
... ... @@ -119,10 +118,10 @@ public class CardPaymentHttpClient extends ServiceEndpointSupport {
119 118 params.put("customerId", Long.parseLong(userId));
120 119 String payload = JsonUtils.toJsonString(params);
121 120  
122   - LOG.debug("Sending list user card request: {}", payload);
  121 + LOG.debug("Sending list user card request: {}\n{}", userId, payload);
123 122 HttpResult result = send(uri, payload);
124 123 if (result.statusCode == 200) {
125   - LOG.debug("Received from card payment pipeline: {}", result.responseText);
  124 + LOG.debug("Received from card payment pipeline: {}\n{}", userId, result.responseText);
126 125 Map<String, Object> response = JsonUtils.fromJsonString(result.responseText, new TypeReference<>() {});
127 126 if ("200".equals(response.get("code"))) {
128 127 List<UserCardDTO> userCards = new ArrayList<>();
... ... @@ -130,10 +129,9 @@ public class CardPaymentHttpClient extends ServiceEndpointSupport {
130 129 if (data != null) {
131 130 List<Map<String, Object>> cardList = JsonUtils.convertValue(data, new TypeReference<>() {});
132 131 for (Map<String, Object> card : cardList) {
133   - String amount = CurrencyUtils.toNoSymbolCurrency(convertLong(card.get("amount")));
134 132 UserCardDTO userCard = new UserCardDTO(convertLong(card.get("customerId")),
135 133 convertLong(card.get("accountId")), (String) card.get("cardNo"),
136   - (String) card.get("customerName"), amount);
  134 + (String) card.get("customerName"), convertLong(card.get("amount")));
137 135 userCards.add(userCard);
138 136 }
139 137 }
... ...
cashier-pipeline/src/main/java/com/diligrp/cashier/pipeline/client/RcbOnlineHttpClient.java
... ... @@ -9,10 +9,7 @@
9 9 import com.diligrp.cashier.shared.ErrorCode;
10 10 import com.diligrp.cashier.shared.exception.ServiceAccessException;
11 11 import com.diligrp.cashier.shared.service.ServiceEndpointSupport;
12   - import com.diligrp.cashier.shared.util.DateUtils;
13   - import com.diligrp.cashier.shared.util.JsonUtils;
14   - import com.diligrp.cashier.shared.util.ObjectUtils;
15   - import com.diligrp.cashier.shared.util.RandomUtils;
  12 + import com.diligrp.cashier.shared.util.*;
16 13 import com.fasterxml.jackson.core.type.TypeReference;
17 14 import jakarta.annotation.Resource;
18 15 import org.slf4j.Logger;
... ... @@ -58,8 +55,7 @@ public class RcbOnlineHttpClient extends ServiceEndpointSupport {
58 55  
59 56 private final String appId;
60 57  
61   - @Resource
62   - private StringRedisTemplate stringRedisTemplate;
  58 + private final StringRedisTemplate stringRedisTemplate;
63 59  
64 60 public RcbOnlineHttpClient(String uri, String merchantNo, String terminalNo, String key, String appId) {
65 61 this.uri = uri;
... ... @@ -67,6 +63,7 @@ public class RcbOnlineHttpClient extends ServiceEndpointSupport {
67 63 this.terminalNo = terminalNo;
68 64 this.key = key;
69 65 this.appId = appId;
  66 + this.stringRedisTemplate = SpringContextUtils.getBean(StringRedisTemplate.class);
70 67 }
71 68  
72 69 public String sendMiniProPrepayRequest(MiniProPrepayRequest request, String notifyUrl) {
... ... @@ -86,13 +83,13 @@ public class RcbOnlineHttpClient extends ServiceEndpointSupport {
86 83 params.put("sign", RcbSignatureUtils.sign(params, key));
87 84  
88 85 String payload = JsonUtils.toJsonString(params);
89   - LOG.debug("Sending rcb minipro prepay request: {}", payload);
  86 + LOG.info("Sending rcb minipro prepay request: {}\n{}", request.getPaymentId(), payload);
90 87 HttpResult result = send(uri + "/cposp/pay/unifiedorder", payload);
91 88 if (result.statusCode != STATUS_OK) {
92 89 LOG.error("Failed to send rcb minipro prepay, statusCode: {}", result.statusCode);
93 90 throw new PaymentPipelineException(ErrorCode.SYSTEM_UNKNOWN_ERROR, "调用小程序预支付接口失败: " + result.statusCode);
94 91 }
95   - LOG.debug("Received rcb mini pro prepay response: {}", result.responseText);
  92 + LOG.debug("Received rcb minipro prepay response: {}", result.responseText);
96 93  
97 94 Map<String, String> data = JsonUtils.fromJsonString(result.responseText, new TypeReference<>() {});
98 95 String resultCode = data.get("resultCode");
... ...
cashier-pipeline/src/main/java/com/diligrp/cashier/pipeline/client/WechatDirectHttpClient.java
... ... @@ -63,7 +63,7 @@ public class WechatDirectHttpClient extends WechatHttpClient {
63 63 headers[1] = HttpHeader.create(WechatConstants.HEADER_ACCEPT, WechatConstants.ACCEPT_JSON);
64 64 headers[2] = HttpHeader.create(WechatConstants.HEADER_AUTHORIZATION, authorization);
65 65  
66   - LOG.info("Sending wechat native prepay request...");
  66 + LOG.info("Sending wechat native prepay request: {}", request.getPaymentId());
67 67 LOG.debug("Authorization: {}\n{}", authorization, payload);
68 68 HttpResult result = send(wechatBaseUri + NATIVE_PREPAY, headers, payload);
69 69 verifyHttpResult(result);
... ... @@ -71,7 +71,7 @@ public class WechatDirectHttpClient extends WechatHttpClient {
71 71 Map<String, Object> response = JsonUtils.fromJsonString(result.responseText, new TypeReference<>() {});
72 72 return NativePrepayResponse.of(request.getPaymentId(), (String) response.get("code_url"));
73 73 } else {
74   - LOG.error("Wechat native prepay failed: {}\n{}", result.statusCode, result.responseText);
  74 + LOG.error("Failed to send wechat native prepay request: {}\n{}", request.getPaymentId(), result.responseText);
75 75 ErrorMessage message = JsonUtils.fromJsonString(result.responseText, ErrorMessage.class);
76 76 throw new PaymentPipelineException(ErrorCode.SYSTEM_UNKNOWN_ERROR, "发起微信预支付失败: " + message.getMessage());
77 77 }
... ... @@ -91,7 +91,7 @@ public class WechatDirectHttpClient extends WechatHttpClient {
91 91 headers[1] = HttpHeader.create(WechatConstants.HEADER_ACCEPT, WechatConstants.ACCEPT_JSON);
92 92 headers[2] = HttpHeader.create(WechatConstants.HEADER_AUTHORIZATION, authorization);
93 93  
94   - LOG.info("Sending wechat jsapi prepay request...");
  94 + LOG.info("Sending wechat jsapi prepay request: {}", request.getPaymentId());
95 95 LOG.debug("Authorization: {}\n{}", authorization, payload);
96 96 HttpResult result = send(wechatBaseUri + JSAPI_PREPAY, headers, payload);
97 97 verifyHttpResult(result);
... ... @@ -99,7 +99,7 @@ public class WechatDirectHttpClient extends WechatHttpClient {
99 99 Map<String, Object> response = JsonUtils.fromJsonString(result.responseText, new TypeReference<>() {});
100 100 return (String) response.get("prepay_id");
101 101 } else {
102   - LOG.error("Wechat jsapi prepay failed: {}\n{}", result.statusCode, result.responseText);
  102 + LOG.error("Failed to send wechat jsapi prepay request: {}\n{}", request.getPaymentId(), result.responseText);
103 103 ErrorMessage message = JsonUtils.fromJsonString(result.responseText, ErrorMessage.class);
104 104 throw new PaymentPipelineException(ErrorCode.SYSTEM_UNKNOWN_ERROR, "发起微信预支付失败: " + message.getMessage());
105 105 }
... ... @@ -109,9 +109,9 @@ public class WechatDirectHttpClient extends WechatHttpClient {
109 109 * 查询微信预支付订单状态
110 110 */
111 111 @Override
112   - public OnlinePaymentResponse queryPrepayResponse(OnlinePrepayOrder order) throws Exception {
  112 + public OnlinePaymentResponse queryPrepayResponse(OnlinePrepayOrder request) throws Exception {
113 113 // 获取认证信息和签名信息
114   - String uri = String.format(TRANSACTION_QUERY, order.getPaymentId(), wechatConfig.getMchId());
  114 + String uri = String.format(TRANSACTION_QUERY, request.getPaymentId(), wechatConfig.getMchId());
115 115 String authorization = WechatSignatureUtils.authorization(wechatConfig.getMchId(), WechatConstants.HTTP_GET, uri,
116 116 wechatConfig.getPrivateKey(), wechatConfig.getSerialNo());
117 117  
... ... @@ -120,7 +120,7 @@ public class WechatDirectHttpClient extends WechatHttpClient {
120 120 .header(CONTENT_TYPE, CONTENT_TYPE_JSON).header(WechatConstants.HEADER_AUTHORIZATION, authorization)
121 121 .header(WechatConstants.HEADER_ACCEPT, WechatConstants.ACCEPT_JSON)
122 122 .header(WechatConstants.HEADER_USER_AGENT, WechatConstants.USER_AGENT);
123   - LOG.info("Sending wechat query merchant order request...");
  123 + LOG.info("Sending wechat query prepay order state request: {}", request.getPaymentId());
124 124 LOG.debug("Authorization: {}\n", authorization);
125 125 HttpResult result = execute(httpRequest.GET().build());
126 126 verifyHttpResult(result);
... ... @@ -134,7 +134,7 @@ public class WechatDirectHttpClient extends WechatHttpClient {
134 134 return new OnlinePaymentResponse((String) response.get("out_trade_no"), (String) response.get("transaction_id"),
135 135 OutPaymentType.WXPAY, openId, when, state, (String) response.get("trade_state_desc"));
136 136 } else {
137   - LOG.info("Wechat query transaction status failed: {}", result.statusCode);
  137 + LOG.error("Failed to query wechat prepay order state: {}\n{}", request.getPaymentId(), result.responseText);
138 138 ErrorMessage message = JsonUtils.fromJsonString(result.responseText, ErrorMessage.class);
139 139 throw new PaymentPipelineException(ErrorCode.SYSTEM_UNKNOWN_ERROR, "发起微信订单查询失败: " + message.getMessage());
140 140 }
... ... @@ -159,12 +159,12 @@ public class WechatDirectHttpClient extends WechatHttpClient {
159 159 headers[0] = HttpHeader.create(WechatConstants.HEADER_USER_AGENT, WechatConstants.USER_AGENT);
160 160 headers[1] = HttpHeader.create(WechatConstants.HEADER_ACCEPT, WechatConstants.ACCEPT_JSON);
161 161 headers[2] = HttpHeader.create(WechatConstants.HEADER_AUTHORIZATION, authorization);
162   - LOG.info("Sending close wechat prepay order request...");
  162 + LOG.info("Sending close wechat prepay order request: {}", request.getPaymentId());
163 163 LOG.debug("Authorization: {}\n{}", authorization, payload);
164 164 HttpResult result = send(wechatBaseUri + uri, headers, payload);
165 165 verifyHttpResult(result);
166   - LOG.info("Close wechat prepay order statusCode: {}", result.statusCode);
167 166 if (result.statusCode != 200 && result.statusCode != 204) {
  167 + LOG.error("Failed to close wechat prepay order: {}\n{}", request.getPaymentId(), result.responseText);
168 168 ErrorMessage message = JsonUtils.fromJsonString(result.responseText, ErrorMessage.class);
169 169 throw new PaymentPipelineException(ErrorCode.INVALID_OBJECT_STATE, "关闭微信订单失败: " + message.getMessage());
170 170 }
... ... @@ -184,7 +184,7 @@ public class WechatDirectHttpClient extends WechatHttpClient {
184 184 headers[1] = HttpHeader.create(WechatConstants.HEADER_ACCEPT, WechatConstants.ACCEPT_JSON);
185 185 headers[2] = HttpHeader.create(WechatConstants.HEADER_AUTHORIZATION, authorization);
186 186  
187   - LOG.info("Sending wechat payment refund request...");
  187 + LOG.info("Sending wechat payment refund request: {}", request.getPaymentId());
188 188 LOG.debug("Authorization: {}\n{}", authorization, payload);
189 189 HttpResult result = send(wechatBaseUri + TRANSACTION_REFUND, headers, payload);
190 190 verifyHttpResult(result);
... ... @@ -195,7 +195,7 @@ public class WechatDirectHttpClient extends WechatHttpClient {
195 195 return new OnlineRefundResponse((String) response.get("out_refund_no"), (String) response.get("refund_id"),
196 196 when, state, (String) response.get("status"));
197 197 } else {
198   - LOG.info("send wechat refund failed: {}", result.statusCode);
  198 + LOG.error("Failed to send wechat refund request: {}\n{}", request.getPaymentId(), result.responseText);
199 199 ErrorMessage message = JsonUtils.fromJsonString(result.responseText, ErrorMessage.class);
200 200 throw new PaymentPipelineException(ErrorCode.SYSTEM_UNKNOWN_ERROR, "发起微信退款失败: " + message.getMessage());
201 201 }
... ... @@ -215,7 +215,7 @@ public class WechatDirectHttpClient extends WechatHttpClient {
215 215 .header(CONTENT_TYPE, CONTENT_TYPE_JSON).header(WechatConstants.HEADER_AUTHORIZATION, authorization)
216 216 .header(WechatConstants.HEADER_ACCEPT, WechatConstants.ACCEPT_JSON)
217 217 .header(WechatConstants.HEADER_USER_AGENT, WechatConstants.USER_AGENT);
218   - LOG.info("Sending wechat refund query request...");
  218 + LOG.info("Sending query wechat refund state: {}", request.getRefundId());
219 219 LOG.debug("Authorization: {}\n", authorization);
220 220 HttpResult result = execute(httpRequest.GET().build());
221 221 verifyHttpResult(result);
... ... @@ -228,7 +228,7 @@ public class WechatDirectHttpClient extends WechatHttpClient {
228 228 } else if (result.statusCode == 404) {
229 229 throw new PaymentPipelineException(ErrorCode.OBJECT_NOT_FOUND, "发起微信退款查询失败: 退款单不存在");
230 230 } else {
231   - LOG.info("Wechat refund query failed: {}", result.statusCode);
  231 + LOG.error("Failed to send wechat refund state: {}\n{}", request.getRefundId(), result.responseText);
232 232 ErrorMessage message = JsonUtils.fromJsonString(result.responseText, ErrorMessage.class);
233 233 throw new PaymentPipelineException(ErrorCode.SYSTEM_UNKNOWN_ERROR, "微信退款查询失败: " + message.getMessage());
234 234 }
... ...
cashier-pipeline/src/main/java/com/diligrp/cashier/pipeline/client/WechatHttpClient.java
... ... @@ -164,18 +164,18 @@ public class WechatHttpClient extends ServiceEndpointSupport {
164 164 .version(HttpClient.Version.HTTP_2).timeout(Duration.ofMillis(MAX_REQUEST_TIMEOUT_TIME))
165 165 .header(CONTENT_TYPE, CONTENT_TYPE_JSON).header(WechatConstants.HEADER_ACCEPT, WechatConstants.ACCEPT_JSON)
166 166 .header(WechatConstants.HEADER_USER_AGENT, WechatConstants.USER_AGENT);
167   - LOG.info("Requesting MiniPro login authorization info: {}\n{}", code, uri);
  167 + LOG.info("Requesting wechat MiniPro login authorization info: {}\n{}", code, uri);
168 168 HttpResult result = execute(request.GET().build());
169 169 if (result.statusCode == 200) {
170   - LOG.debug("MiniPro login authorization info response\n{}", result.responseText);
  170 + LOG.debug("Wechat MiniPro login authorization info response\n{}", result.responseText);
171 171 AuthorizationSession session = JsonUtils.fromJsonString(result.responseText, AuthorizationSession.class);
172 172 if (session.getErrcode() != null && session.getErrcode() != 0) {
173   - LOG.error("Request MiniPro login authorization info failed: {}", session.getErrmsg());
  173 + LOG.error("Failed to request wechat MiniPro login authorization info: {}", session.getErrmsg());
174 174 throw new PaymentPipelineException(ErrorCode.SERVICE_ACCESS_ERROR, "获取小程序登录授权信息失败: " + session.getErrmsg());
175 175 }
176 176 return session.getOpenid();
177 177 } else {
178   - LOG.error("Request MiniPro login authorization info failed: {}", result.statusCode);
  178 + LOG.error("Failed to request wechat MiniPro login authorization info: {}", result.statusCode);
179 179 throw new PaymentPipelineException(ErrorCode.SERVICE_ACCESS_ERROR, "获取小程序登录授权信息失败");
180 180 }
181 181 }
... ... @@ -195,14 +195,14 @@ public class WechatHttpClient extends ServiceEndpointSupport {
195 195 params.put("secret", appSecret);
196 196 params.put("force_refresh", Boolean.FALSE);
197 197 String payload = JsonUtils.toJsonString(params);
198   - LOG.debug("Request MiniPro Api access token: {}", payload);
  198 + LOG.info("Requesting wechat MiniPro Api access token: {}", payload);
199 199 HttpResult result = send(ACCESS_TOKEN_URL, payload);
200 200 if (result.statusCode == 200) {
201   - LOG.debug("MiniPro Api access token response: {}", result.responseText);
  201 + LOG.debug("Wechat MiniPro Api access token response: {}", result.responseText);
202 202 Map<String, Object> data = JsonUtils.fromJsonString(result.responseText, new TypeReference<>() {});
203 203 return WechatAccessToken.of((String)data.get("access_token"), (Integer) data.get("expires_in"));
204 204 } else {
205   - LOG.error("Request MiniPro Api access token failed: {}", result.statusCode);
  205 + LOG.error("Failed to request MiniPro Api access token: {}", result.statusCode);
206 206 throw new PaymentPipelineException(ErrorCode.SERVICE_ACCESS_ERROR, "获取微信接口调用凭证失败");
207 207 }
208 208 }
... ... @@ -234,7 +234,7 @@ public class WechatHttpClient extends ServiceEndpointSupport {
234 234 params.put("payer", payer);
235 235  
236 236 String payload = JsonUtils.toJsonString(params);
237   - LOG.debug("Request wechat upload shipping: {}", payload);
  237 + LOG.info("Requesting wechat upload shipping: {}", payload);
238 238 HttpResult result = send(uri, payload);
239 239 if (result.statusCode == 200) {
240 240 LOG.debug("Wechat upload shipping response: {}", result.responseText);
... ... @@ -245,7 +245,7 @@ public class WechatHttpClient extends ServiceEndpointSupport {
245 245 throw new PaymentPipelineException(ErrorCode.SERVICE_ACCESS_ERROR, "微信发货信息录入失败: " + errorMessage);
246 246 }
247 247 } else {
248   - LOG.error("Request wechat upload shipping failed: {}", result.statusCode);
  248 + LOG.error("Failed to request wechat upload shipping: {}", result.statusCode);
249 249 throw new PaymentPipelineException(ErrorCode.SERVICE_ACCESS_ERROR, "调用微信发货信息录入接口失败");
250 250 }
251 251 }
... ...
cashier-pipeline/src/main/java/com/diligrp/cashier/pipeline/client/WechatPartnerHttpClient.java
... ... @@ -64,7 +64,7 @@ public class WechatPartnerHttpClient extends WechatHttpClient {
64 64 headers[1] = HttpHeader.create(WechatConstants.HEADER_ACCEPT, WechatConstants.ACCEPT_JSON);
65 65 headers[2] = HttpHeader.create(WechatConstants.HEADER_AUTHORIZATION, authorization);
66 66  
67   - LOG.info("Sending wechat native prepay request...");
  67 + LOG.info("Sending wechat native prepay request: {}", request.getPaymentId());
68 68 LOG.debug("Authorization: {}\n{}", authorization, payload);
69 69 HttpResult result = send(wechatBaseUri + NATIVE_PREPAY, headers, payload);
70 70 verifyHttpResult(result);
... ... @@ -72,7 +72,7 @@ public class WechatPartnerHttpClient extends WechatHttpClient {
72 72 Map<String, Object> response = JsonUtils.fromJsonString(result.responseText, new TypeReference<>() {});
73 73 return NativePrepayResponse.of(request.getPaymentId(), (String) response.get("code_url"));
74 74 } else {
75   - LOG.error("Wechat native prepay failed: {}\n{}", result.statusCode, result.responseText);
  75 + LOG.error("Failed to send wechat native prepay request: {}\n{}", request.getPaymentId(), result.responseText);
76 76 ErrorMessage message = JsonUtils.fromJsonString(result.responseText, ErrorMessage.class);
77 77 throw new PaymentPipelineException(ErrorCode.SYSTEM_UNKNOWN_ERROR, "发起微信预支付失败: " + message.getMessage());
78 78 }
... ... @@ -92,7 +92,7 @@ public class WechatPartnerHttpClient extends WechatHttpClient {
92 92 headers[1] = HttpHeader.create(WechatConstants.HEADER_ACCEPT, WechatConstants.ACCEPT_JSON);
93 93 headers[2] = HttpHeader.create(WechatConstants.HEADER_AUTHORIZATION, authorization);
94 94  
95   - LOG.info("Sending wechat JsApI prepay request...");
  95 + LOG.info("Sending wechat jsapi prepay request: {}", request.getPaymentId());
96 96 LOG.debug("Authorization: {}\n{}", authorization, payload);
97 97 HttpResult result = send(wechatBaseUri + JSAPI_PREPAY, headers, payload);
98 98 verifyHttpResult(result);
... ... @@ -100,7 +100,7 @@ public class WechatPartnerHttpClient extends WechatHttpClient {
100 100 Map<String, Object> response = JsonUtils.fromJsonString(result.responseText, new TypeReference<>() {});
101 101 return (String) response.get("prepay_id");
102 102 } else {
103   - LOG.error("Wechat JsApI prepay failed: {}\n{}", result.statusCode, result.responseText);
  103 + LOG.error("Failed to send wechat jsapi prepay request: {}\n{}", request.getPaymentId(), result.responseText);
104 104 ErrorMessage message = JsonUtils.fromJsonString(result.responseText, ErrorMessage.class);
105 105 throw new PaymentPipelineException(ErrorCode.SYSTEM_UNKNOWN_ERROR, "发起微信预支付失败: " + message.getMessage());
106 106 }
... ... @@ -110,12 +110,12 @@ public class WechatPartnerHttpClient extends WechatHttpClient {
110 110 * 查询微信预支付订单状态
111 111 */
112 112 @Override
113   - public OnlinePaymentResponse queryPrepayResponse(OnlinePrepayOrder order) throws Exception {
114   - String subMchId = order.getString(Constants.PARAM_MCH_ID);
  113 + public OnlinePaymentResponse queryPrepayResponse(OnlinePrepayOrder request) throws Exception {
  114 + String subMchId = request.getString(Constants.PARAM_MCH_ID);
115 115 AssertUtils.notEmpty(subMchId, "参数错误: 服务商模式下缺失子商户号");
116 116  
117 117 // 获取认证信息和签名信息
118   - String uri = String.format(TRANSACTION_QUERY, order.getPaymentId(), wechatConfig.getMchId(), subMchId);
  118 + String uri = String.format(TRANSACTION_QUERY, request.getPaymentId(), wechatConfig.getMchId(), subMchId);
119 119 String authorization = WechatSignatureUtils.authorization(wechatConfig.getMchId(), WechatConstants.HTTP_GET, uri,
120 120 wechatConfig.getPrivateKey(), wechatConfig.getSerialNo());
121 121  
... ... @@ -124,7 +124,7 @@ public class WechatPartnerHttpClient extends WechatHttpClient {
124 124 .header(CONTENT_TYPE, CONTENT_TYPE_JSON).header(WechatConstants.HEADER_AUTHORIZATION, authorization)
125 125 .header(WechatConstants.HEADER_ACCEPT, WechatConstants.ACCEPT_JSON)
126 126 .header(WechatConstants.HEADER_USER_AGENT, WechatConstants.USER_AGENT);
127   - LOG.info("Sending wechat query merchant order request...");
  127 + LOG.info("Sending wechat query prepay order state request: {}", request.getPaymentId());
128 128 LOG.debug("Authorization: {}\n", authorization);
129 129 HttpResult result = execute(httpRequest.GET().build());
130 130 verifyHttpResult(result);
... ... @@ -138,7 +138,7 @@ public class WechatPartnerHttpClient extends WechatHttpClient {
138 138 return new OnlinePaymentResponse((String) response.get("out_trade_no"), (String) response.get("transaction_id"),
139 139 OutPaymentType.WXPAY, openId, when, state, (String) response.get("trade_state_desc"));
140 140 } else {
141   - LOG.info("Wechat query transaction status failed: {}", result.statusCode);
  141 + LOG.error("Failed to query wechat prepay order state: {}\n{}", request.getPaymentId(), result.responseText);
142 142 ErrorMessage message = JsonUtils.fromJsonString(result.responseText, ErrorMessage.class);
143 143 throw new PaymentPipelineException(ErrorCode.SYSTEM_UNKNOWN_ERROR, "发起微信订单查询失败: " + message.getMessage());
144 144 }
... ... @@ -167,11 +167,11 @@ public class WechatPartnerHttpClient extends WechatHttpClient {
167 167 headers[0] = HttpHeader.create(WechatConstants.HEADER_USER_AGENT, WechatConstants.USER_AGENT);
168 168 headers[1] = HttpHeader.create(WechatConstants.HEADER_ACCEPT, WechatConstants.ACCEPT_JSON);
169 169 headers[2] = HttpHeader.create(WechatConstants.HEADER_AUTHORIZATION, authorization);
170   - LOG.info("Sending close wechat prepay order request...");
  170 + LOG.info("Sending close wechat prepay order request: {}", request.getPaymentId());
171 171 LOG.debug("Authorization: {}\n{}", authorization, payload);
172 172 HttpResult result = send(wechatBaseUri + uri, headers, payload);
173 173 verifyHttpResult(result);
174   - LOG.info("Close wechat prepay order statusCode: {}", result.statusCode);
  174 + LOG.error("Failed to close wechat prepay order: {}\n{}", request.getPaymentId(), result.responseText);
175 175 if (result.statusCode != 200 && result.statusCode != 204) {
176 176 ErrorMessage message = JsonUtils.fromJsonString(result.responseText, ErrorMessage.class);
177 177 throw new PaymentPipelineException(ErrorCode.INVALID_OBJECT_STATE, "关闭微信订单失败: " + message.getMessage());
... ... @@ -192,7 +192,7 @@ public class WechatPartnerHttpClient extends WechatHttpClient {
192 192 headers[1] = HttpHeader.create(WechatConstants.HEADER_ACCEPT, WechatConstants.ACCEPT_JSON);
193 193 headers[2] = HttpHeader.create(WechatConstants.HEADER_AUTHORIZATION, authorization);
194 194  
195   - LOG.info("Sending wechat payment refund request...");
  195 + LOG.info("Sending wechat payment refund request: {}", request.getPaymentId());
196 196 LOG.debug("Authorization: {}\n{}", authorization, payload);
197 197 HttpResult result = send(wechatBaseUri + NATIVE_REFUND, headers, payload);
198 198 verifyHttpResult(result);
... ... @@ -203,7 +203,7 @@ public class WechatPartnerHttpClient extends WechatHttpClient {
203 203 return new OnlineRefundResponse((String) response.get("out_refund_no"), (String) response.get("refund_id"),
204 204 when, state, (String) response.get("status"));
205 205 } else {
206   - LOG.info("send wechat payment refund failed: {}", result.statusCode);
  206 + LOG.error("Failed to send wechat refund request: {}\n{}", request.getPaymentId(), result.responseText);
207 207 ErrorMessage message = JsonUtils.fromJsonString(result.responseText, ErrorMessage.class);
208 208 throw new PaymentPipelineException(ErrorCode.SYSTEM_UNKNOWN_ERROR, "发起微信退款失败: " + message.getMessage());
209 209 }
... ... @@ -226,7 +226,7 @@ public class WechatPartnerHttpClient extends WechatHttpClient {
226 226 .header(CONTENT_TYPE, CONTENT_TYPE_JSON).header(WechatConstants.HEADER_AUTHORIZATION, authorization)
227 227 .header(WechatConstants.HEADER_ACCEPT, WechatConstants.ACCEPT_JSON)
228 228 .header(WechatConstants.HEADER_USER_AGENT, WechatConstants.USER_AGENT);
229   - LOG.info("Sending wechat refund query request...");
  229 + LOG.info("Sending query wechat refund state: {}", request.getRefundId());
230 230 LOG.debug("Authorization: {}\n", authorization);
231 231 HttpResult result = execute(httpRequest.GET().build());
232 232 verifyHttpResult(result);
... ... @@ -239,7 +239,7 @@ public class WechatPartnerHttpClient extends WechatHttpClient {
239 239 } else if (result.statusCode == 404) {
240 240 throw new PaymentPipelineException(ErrorCode.OBJECT_NOT_FOUND, "发起微信退款查询失败: 退款单不存在");
241 241 } else {
242   - LOG.info("Wechat query mch refund failed: {}", result.statusCode);
  242 + LOG.error("Failed to send wechat refund state: {}\n{}", request.getRefundId(), result.responseText);
243 243 ErrorMessage message = JsonUtils.fromJsonString(result.responseText, ErrorMessage.class);
244 244 throw new PaymentPipelineException(ErrorCode.SYSTEM_UNKNOWN_ERROR, "微信退款查询失败: " + message.getMessage());
245 245 }
... ...
cashier-pipeline/src/main/java/com/diligrp/cashier/pipeline/domain/card/UserCardDTO.java
... ... @@ -13,12 +13,12 @@ public class UserCardDTO {
13 13 // 持卡人名称
14 14 private String name;
15 15 // 卡余额
16   - private String amount;
  16 + private Long amount;
17 17  
18 18 public UserCardDTO() {
19 19 }
20 20  
21   - public UserCardDTO(Long customerId, Long accountId, String cardNo, String name, String amount) {
  21 + public UserCardDTO(Long customerId, Long accountId, String cardNo, String name, Long amount) {
22 22 this.customerId = customerId;
23 23 this.accountId = accountId;
24 24 this.cardNo = cardNo;
... ... @@ -58,11 +58,11 @@ public class UserCardDTO {
58 58 this.name = name;
59 59 }
60 60  
61   - public String getAmount() {
  61 + public Long getAmount() {
62 62 return amount;
63 63 }
64 64  
65   - public void setAmount(String amount) {
  65 + public void setAmount(Long amount) {
66 66 this.amount = amount;
67 67 }
68 68 }
... ...
cashier-trade/src/main/java/com/diligrp/cashier/trade/service/impl/TradeAssistantServiceImpl.java
... ... @@ -65,6 +65,7 @@ public class TradeAssistantServiceImpl implements ITradeAssistantService {
65 65 List<OnlinePayment> onlinePayments = onlinePaymentDao.listOnlinePayments(trade.getTradeId(), TradeType.TRADE.getCode(), null);
66 66 for (OnlinePayment payment : onlinePayments) {
67 67 if (!PaymentState.isFinished(payment.getState())) {
  68 + LOG.info("Trying to close payment order in process: {}", payment.getPaymentId());
68 69 PaymentPipeline<?> pipeline = paymentPipelineManager.findPipelineById(payment.getPipelineId(), PaymentPipeline.class);
69 70 if (pipeline instanceof OnlinePipeline<?> onlinePipeline) {
70 71 // 理论上只存在一条支付中的支付记录,否则后面的支付通道关闭失败时,会回滚前面支付记录的状态修改
... ...