소스 검색

fix(cfc-backend): validate openid before WeChat prepay - reject phone-prefixed/mock openid (resolves PARAM_ERROR 无效的openid)

User 2 달 전
부모
커밋
5d25495ac1
1개의 변경된 파일5개의 추가작업 그리고 2개의 파일을 삭제
  1. 5 2
      cfc-backend/src/main/java/com/etotem/cfc/service/ProductOrderService.java

+ 5 - 2
cfc-backend/src/main/java/com/etotem/cfc/service/ProductOrderService.java

@@ -198,11 +198,14 @@ public class ProductOrderService {
         Integer moneyAmount = order.getMoneyAmount();
         if (moneyAmount != null && moneyAmount > 0) {
             User user = userMapper.selectById(userId);
-            if (user == null || user.getOpenid() == null || user.getOpenid().isEmpty()) {
+            String openid = user == null ? null : user.getOpenid();
+            boolean invalidOpenid = openid == null || openid.isEmpty()
+                    || openid.startsWith("phone:") || openid.startsWith("mock_openid_");
+            if (invalidOpenid) {
                 if (pointsUsed > 0) {
                     pointsService.refundUserPoints(userId, pointsUsed, "支付失败退款:" + orderNo);
                 }
-                return Result.error("用户openid不存在,无法支付");
+                return Result.error("未绑定微信账号,请通过微信登录后再支付");
             }
             Map<String, Object> wechatPayParams = paymentService.createWechatPrepay(
                     orderNo, order.getProductName(), moneyAmount, user.getOpenid());