|
|
@@ -222,35 +222,44 @@ public class MembershipController {
|
|
|
return Result.error("用户未登录");
|
|
|
}
|
|
|
|
|
|
+ User user = userMapper.selectById(userId);
|
|
|
+ if (user == null) {
|
|
|
+ return Result.error("用户不存在");
|
|
|
+ }
|
|
|
+
|
|
|
Long familyId = membershipService.getUserFamilyId(userId);
|
|
|
String levelCode = params.get("levelCode").toString();
|
|
|
String paymentType = params.get("paymentType").toString();
|
|
|
String period = params.get("period") != null ? params.get("period").toString() : "yearly";
|
|
|
Long couponId = ParamUtils.getLong(params.get("couponId"));
|
|
|
-
|
|
|
- PaymentOrderDTO order = membershipService.createOrder(userId, familyId, levelCode, paymentType, period, couponId);
|
|
|
+ String openid = params.get("openid") != null ? params.get("openid").toString() : null;
|
|
|
|
|
|
// trial 单:createOrder 内已直接开通(status=paid),无需支付,原样返回
|
|
|
if ("trial".equals(paymentType)) {
|
|
|
+ PaymentOrderDTO order = membershipService.createOrder(userId, familyId, levelCode, paymentType, period, couponId);
|
|
|
return Result.success(order);
|
|
|
}
|
|
|
|
|
|
- // testMode 兼容:返回订单信息,前端继续走 /notify 模拟支付(保留现有模拟逻辑)
|
|
|
+ // testMode:保持现有模拟逻辑(不触发真实虚拟/普通支付)
|
|
|
if (testMode) {
|
|
|
+ PaymentOrderDTO order = membershipService.createOrder(userId, familyId, levelCode, paymentType, period, couponId);
|
|
|
return Result.success(order);
|
|
|
}
|
|
|
|
|
|
- // sessionKey 后端从登录态取(users.session_key,@JsonIgnore 防泄露),不由前端传
|
|
|
- User user = userMapper.selectById(userId);
|
|
|
- if (user == null || user.getSessionKey() == null || user.getSessionKey().isEmpty()) {
|
|
|
+ // sessionKey 后端从登录态取,虚拟/普通支付路径均需有效 sessionKey
|
|
|
+ if (user.getSessionKey() == null || user.getSessionKey().isEmpty()) {
|
|
|
return Result.error(400, "会话失效,请重新登录");
|
|
|
}
|
|
|
|
|
|
- VirtualPayParamsDTO dto = virtualPayService.generateMembershipPayParams(order.getOrderNo(), user.getSessionKey());
|
|
|
- if (dto == null) {
|
|
|
+ // 调用新方法,按开关分流
|
|
|
+ Map<String, Object> result = membershipService.createOrderWithPayType(
|
|
|
+ userId, familyId, levelCode, paymentType, period, couponId,
|
|
|
+ user.getSessionKey(), openid);
|
|
|
+
|
|
|
+ if (result == null) {
|
|
|
return Result.error(46001, "该商品暂未开放购买");
|
|
|
}
|
|
|
- return Result.success(dto);
|
|
|
+ return Result.success(result);
|
|
|
}
|
|
|
|
|
|
/**
|