|
|
@@ -558,6 +558,13 @@ public class PayScoreServiceImpl implements PayScoreService {
|
|
|
return "PS" + (System.currentTimeMillis() / 1000) + orderId;
|
|
|
}
|
|
|
|
|
|
+ private String generatePreAuthOutOrderNo(String deviceId) {
|
|
|
+ // 预授权模式:无本地订单ID,PS(2) + 时间戳(10) + 设备ID后10位 = 最多22字符
|
|
|
+ String safeDeviceId = deviceId.replaceAll("[^A-Za-z0-9]", "");
|
|
|
+ String suffix = safeDeviceId.length() > 10 ? safeDeviceId.substring(safeDeviceId.length() - 10) : safeDeviceId;
|
|
|
+ return "PS" + (System.currentTimeMillis() / 1000) + suffix;
|
|
|
+ }
|
|
|
+
|
|
|
private String formatDateTime(LocalDateTime dateTime) {
|
|
|
return dateTime.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
|
|
|
}
|
|
|
@@ -725,7 +732,6 @@ public class PayScoreServiceImpl implements PayScoreService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
public Map<String, Object> preCreatePayScoreOrder(Long userId, String deviceId, String openId) {
|
|
|
log.info("[支付分服务] 预创建服务订单(需确认模式)- userId: {}, deviceId: {}", userId, deviceId);
|
|
|
|
|
|
@@ -749,23 +755,12 @@ public class PayScoreServiceImpl implements PayScoreService {
|
|
|
openId = user.getOpenid();
|
|
|
}
|
|
|
|
|
|
- // 1. 创建本地预订单(金额为0,识别后回调更新)
|
|
|
- Order order = new Order();
|
|
|
- order.setOrderNo(com.haha.common.utils.OrderUtils.getOrderNo());
|
|
|
- order.setUserId(userId);
|
|
|
- order.setDeviceId(deviceId);
|
|
|
- order.setTotalAmount(BigDecimal.ZERO);
|
|
|
- order.setPayChannel(PaymentChannel.WECHAT_PAYSCORE.getCode());
|
|
|
- order.setPayType("微信支付分");
|
|
|
- order.setStatus(OrderStatus.PENDING_PAYMENT.getCode());
|
|
|
- order.setPayStatus(PayStatus.UNPAID.getCode());
|
|
|
- order.setCreateTime(LocalDateTime.now());
|
|
|
- orderService.save(order);
|
|
|
- log.info("[支付分服务] 预订单已创建 - orderId: {}", order.getId());
|
|
|
-
|
|
|
- // 2. 创建微信支付分服务订单
|
|
|
+ // 生成商户服务订单号(不创建本地订单,由 AI 识别回调统一创建)
|
|
|
+ String outOrderNo = generatePreAuthOutOrderNo(deviceId);
|
|
|
+
|
|
|
+ // 创建微信支付分服务订单
|
|
|
PayScoreCreateRequest request = new PayScoreCreateRequest();
|
|
|
- request.setOutOrderNo(generateOutOrderNo(order.getId()));
|
|
|
+ request.setOutOrderNo(outOrderNo);
|
|
|
request.setServiceIntroduction("智能零售服务");
|
|
|
request.setOpenId(openId);
|
|
|
request.setRiskFundName("DEPOSIT");
|
|
|
@@ -776,16 +771,7 @@ public class PayScoreServiceImpl implements PayScoreService {
|
|
|
PayScoreResult result = payScoreStrategy.createServiceOrder(request);
|
|
|
|
|
|
if (result.isSuccess()) {
|
|
|
- // 更新订单的支付分字段
|
|
|
- order.setPayScoreOrderId(result.getOutOrderNo());
|
|
|
- order.setPayScoreState(result.getState());
|
|
|
- if (wxPayConfig != null) {
|
|
|
- order.setServiceId(wxPayConfig.getServiceId());
|
|
|
- }
|
|
|
- order.setServiceStartTime(LocalDateTime.now());
|
|
|
- orderService.updateById(order);
|
|
|
-
|
|
|
- // 3. 将支付分信息存入 Redis,供回调创建订单时关联
|
|
|
+ // 将支付分信息存入 Redis,供 AI 识别回调创建订单时关联
|
|
|
if (stringRedisTemplate != null) {
|
|
|
String redisKey = REDIS_KEY_PREFIX + deviceId + ":" + userId;
|
|
|
JSONObject json = new JSONObject();
|
|
|
@@ -794,20 +780,21 @@ public class PayScoreServiceImpl implements PayScoreService {
|
|
|
if (wxPayConfig != null) {
|
|
|
json.put("serviceId", wxPayConfig.getServiceId());
|
|
|
}
|
|
|
- json.put("orderId", order.getId());
|
|
|
stringRedisTemplate.opsForValue().set(redisKey, json.toJSONString(), REDIS_TTL_MINUTES, TimeUnit.MINUTES);
|
|
|
log.info("[支付分服务] 支付分信息已存入Redis - key: {}, ttl: {}min", redisKey, REDIS_TTL_MINUTES);
|
|
|
}
|
|
|
|
|
|
Map<String, Object> data = new HashMap<>();
|
|
|
data.put("success", true);
|
|
|
- data.put("orderId", order.getId());
|
|
|
data.put("outOrderNo", result.getOutOrderNo());
|
|
|
data.put("package", result.getPackageStr());
|
|
|
- log.info("[支付分服务] 预创建服务订单成功 - orderId: {}, outOrderNo: {}", order.getId(), result.getOutOrderNo());
|
|
|
+ if (wxPayConfig != null) {
|
|
|
+ data.put("mchId", wxPayConfig.getMchId());
|
|
|
+ }
|
|
|
+ log.info("[支付分服务] 预创建服务订单成功 - outOrderNo: {}", result.getOutOrderNo());
|
|
|
return data;
|
|
|
} else {
|
|
|
- log.error("[支付分服务] 预创建服务订单失败 - orderId: {}, error: {}", order.getId(), result.getErrorMsg());
|
|
|
+ log.error("[支付分服务] 预创建服务订单失败 - error: {}", result.getErrorMsg());
|
|
|
Map<String, Object> errorData = new HashMap<>();
|
|
|
errorData.put("success", false);
|
|
|
errorData.put("errorMsg", result.getErrorMsg());
|