fix: 微信支付,登录接口。

This commit is contained in:
tianyongbao
2026-01-16 14:33:21 +08:00
parent 7efbad95aa
commit d7702ee991
34 changed files with 2581 additions and 145 deletions

View File

@@ -114,6 +114,12 @@
<artifactId>intc-iot</artifactId>
<version>${revision}</version>
</dependency>
<!-- 微信对接模块 -->
<dependency>
<groupId>com.intc</groupId>
<artifactId>intc-weixin</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>

View File

@@ -11,6 +11,7 @@ import com.intc.common.core.domain.R;
import com.intc.common.core.domain.model.LoginBody;
import com.intc.common.core.domain.model.RegisterBody;
import com.intc.common.core.domain.model.SocialLoginBody;
import com.intc.common.core.exception.ServiceException;
import com.intc.common.core.utils.*;
import com.intc.common.encrypt.annotation.ApiEncrypt;
import com.intc.common.json.utils.JsonUtils;
@@ -23,6 +24,7 @@ import com.intc.common.social.utils.SocialUtils;
import com.intc.common.sse.dto.SseMessageDto;
import com.intc.common.sse.utils.SseMessageUtils;
import com.intc.common.tenant.helper.TenantHelper;
import com.intc.fishery.domain.AquUser;
import com.intc.system.domain.bo.SysTenantBo;
import com.intc.system.domain.vo.SysClientVo;
import com.intc.system.domain.vo.SysTenantVo;
@@ -36,6 +38,8 @@ import com.intc.web.domain.vo.TenantListVo;
import com.intc.web.service.IAuthStrategy;
import com.intc.web.service.SysLoginService;
import com.intc.web.service.SysRegisterService;
import com.intc.weixin.domain.bo.ReqWxLogin;
import com.intc.weixin.service.WxLoginService;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -43,6 +47,7 @@ import me.zhyd.oauth.model.AuthResponse;
import me.zhyd.oauth.model.AuthUser;
import me.zhyd.oauth.request.AuthRequest;
import me.zhyd.oauth.utils.AuthStateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -75,6 +80,9 @@ public class AuthController {
private final ISysClientService clientService;
private final ScheduledExecutorService scheduledExecutorService;
@Autowired(required = false)
private WxLoginService wxLoginService;
/**
* 登录方法
@@ -239,4 +247,70 @@ public class AuthController {
return R.ok(result);
}
/**
* 微信小程序登录
*
* @param request 微信登录请求
* @return 结果
*/
@ApiEncrypt
@PostMapping("/wechat_login")
public R<AquUser> wechatLogin(@Validated @RequestBody ReqWxLogin request) {
try {
log.info("收到微信登录请求: clientId={}, tenantId={}", request.getClientId(), request.getTenantId());
// 1. 检查服务是否可用
if (wxLoginService == null) {
log.error("微信登录服务未启用,请检查配置: wx.miniapp.app-id");
return R.fail("微信登录服务未启用,请联系管理员");
}
// 2. 校验客户端
SysClientVo client = clientService.queryByClientId(request.getClientId());
if (ObjectUtil.isNull(client)) {
log.error("客户端不存在: clientId={}", request.getClientId());
return R.fail(MessageUtils.message("auth.grant.type.error"));
}
if (!SystemConstants.NORMAL.equals(client.getStatus())) {
log.error("客户端已被禁用: clientId={}, status={}", request.getClientId(), client.getStatus());
return R.fail(MessageUtils.message("auth.grant.type.blocked"));
}
// 3. 校验租户
if (StringUtils.isNotBlank(request.getTenantId())) {
try {
loginService.checkTenant(request.getTenantId());
} catch (Exception e) {
log.error("租户校验失败: tenantId={}", request.getTenantId(), e);
return R.fail("租户校验失败: " + e.getMessage());
}
}
// 4. 执行微信登录
AquUser aquUser = wxLoginService.loginByWeChat(
request.getCode(),
request.getJsCode(),
request.getTenantId()
);
if (aquUser == null) {
log.error("微信登录失败,未返回用户信息");
return R.fail("登录失败,请重试");
}
// 5. 返回用户信息
log.info("微信登录成功: userId={}, mobilePhone={}",
aquUser.getId(), aquUser.getMobilePhone());
return R.ok(aquUser);
} catch (ServiceException e) {
log.error("微信登录业务异常: {}", e.getMessage(), e);
return R.fail(e.getMessage());
} catch (Exception e) {
log.error("微信登录系统异常", e);
return R.fail("登录失败: " + e.getMessage());
}
}
}

View File

@@ -329,3 +329,77 @@ justauth:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: ${justauth.address}/social-callback?source=gitea
--- # 微信支付选项配置
wx:
# 微信公众号配置
mp:
# 公众号appId必填
app-id: wx182a393d5c5e3479
# 公众号Secret必填
secret: 559d7bf12a781651c9772f525faa38e2
# 公众号token选填用于消息加解密
token: your_token_here
# 公众号EncodingAESKey选填用于消息加解密
aes-key: your_aes_key_here_43_characters_base64
# 微信小程序配置
miniapp:
# 小程序appId必填
app-id: wx9fb4034ebe52af77
# 小程序Secret必填
secret: 9b0eb221d9fa6bb46a463c24304f6d12
# 小程序token选填用于消息加解密
token: your_miniapp_token
# 小程序EncodingAESKey选填用于消息加解密
aes-key: your_miniapp_aes_key_43_characters_b64
# 消息格式XML或者JSON
msg-data-format: JSON
# 微信支付配置
pay:
# 商户号(必填)
mch-id: 1671289865
# 商户密钥V2版本必填
mch-key: your_mch_key_here_32_characters_md5
# 证书路径(退款等操作需要,选填)
key-path: classpath:cert/apiclient_cert.p12
# apiV3秘钥V3版本必填
api-v3-key: lms8a288e6694a429a2f15c718b1b17e
# 证书序列号V3版本必填
cert-serial-no: 6EFD85369A957FB27680825035E456065FD575D2
# 私钥路径V3版本选填
private-key-path: classpath:cert/apiclient_key.pem
# 私钥内容V3版本选填与private-key-path二选一
private-content: "-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDLEVxkdX6NJtDo\nzXOzkxn7kqR3MMc05/duLON4yjmLhTPQD8iiDoCOEuZEy8dLloi1OlXO3zu/F5jd\n9ynk8x++Px5A8gBQ16GZAMH18BQDzcFzy0EPe9ckiN3IXO8GT8Ht9oP430ugxF6t\nGM7Ixh93v48n7tUOZTISX5TzZCbXOiITH40b++/LB2LaMo9xAC4dEQs+2S4x5gO9\nPAh637ZAtVlbYxmJMYxzUM09KyXAoDlmO6YlO25EBkei7ZbyQob698s35+rSeq93\noFfUiegEL35SWeuuwp8ZFFvq24EUW7/n4U50/rS5hIFerEfcrFj2yPhP3sQtd4I+\nFjaEKzQLAgMBAAECggEBALxeUV9a4labUCT0GETWyr5j7C4oUFHSb+KCv0uYA0NZ\n/5McYRd67mNcQsBEa43BiPTbtSdeSnTbtdEI6pLXuHVo5W6HTiWvsNZWLpYt6tMQ\ndUgtnh932D2qvFiVZKBtMc7E4uzkbaonHk/heEgkCKKzTl9Tm81rr8P9aBVSrPjt\n6Xs7lORsD9bCoweYwfcrHELb+sLek/dOd9eCyabq7r5FV4EqOwJhw8btD7xgjw+o\nuVF3kWyhLSEwjpN/oo4w5r4yVPlMnSTn7MtTRFyJcU/w5YBk8MedGSTKRIvzPv4s\nRWU3ChTP5evGAh/FnpP6JGEhyvYGW0DqmuJUXK1n0fECgYEA/sSCT6Z+HSlwu/ui\nOSlDDFKZ/ci7vJcuksgf5Tw5Kj0fBVhgImO8hTS9nqCQx73JJTsUpTzyYOVxUd9b\nAqp42dgVbDYTmkfBi0xAZpnQD4Z4LUj6OkS2k3+2CPNN+jQpibGjGy11NDV/U8EQ\nP/9ioz+PoqwENG6wsaCT9LOC2DkCgYEAzAzUXJdH5T2LpSeO8e2NHtW6flemsJJ0\n+m0O03OWxQr6KNjFpNkTFoK6A2NYOiyqMZcQb+viHGFTFpFHkozo3QPaXpZsz3BC\ny9nQzqDbP3/MtfksE/MXOOw0qtdqT3csIxiXZqIjGYqAU08xcKyItZJGnIh/aKYn\nyobDnKkCRmMCgYB9mvbAPE6bJA4/r/03/17eGW9wjuH4RfUhSudmxn1MlNvRb9Pd\nwJx2dB00sucOg0RDRdCU8upw2U44Vk1xkAiLJpzRQAwEGXKTseFidFz++oYPlZZA\n2hXFvMZLvWDphYQhLeJDiPLq7aE78siHNOs1nyW6xuI/037r5EZt838ECQKBgQDC\n3+XY3+ob92Fsw5DzYIoMTtajXxalP9pUaN9l9tihKtCrPgvUWjSupP79yV0zggCx\nB7L9EOyLai+uN+WBAu5KVimxeDxHCNHiWg3fqSR7SpS5nlUIYHtnM79BAiZX6lrO\n0eeWb3bSJ8JSzilLkJunvSGO0ZXM3hLWi0o6TfcMPQKBgQDlmSC6/Ja4M+lGZEMx\nraCryScSi1kj3KkZFcGQEEejltpet2u06af/qA+tmMW7uxjLj5R80yqsYmUqS6Md\npHc1U7XsqU2MinqVJz47H8WZwYMDDLjNOI2f4coqbtBBOA6GKt+gYYqYxkpvVanT\noShAmWqOcPsioBVCFRVGvMlcNA==\n-----END PRIVATE KEY-----\n"
# 支付选项列表配置
pay-item:
pay-items:
- id: 1
amount: 9900 # 金额,单位:分 (99元)
add-month: 1 # 增加月份
title: "一个月会员"
description: "享受一个月全部功能"
- id: 2
amount: 29900 # 299元
add-month: 3 # 3个月
title: "三个月会员"
description: "享受三个月全部功能"
- id: 3
amount: 59900 # 599元
add-month: 6 # 6个月
title: "半年会员"
description: "享受半年全部功能"
- id: 4
amount: 99900 # 999元
add-month: 12 # 12个月
title: "一年会员"
description: "享受一年全部功能,最划算"
# 支付回调通知配置
pay-notify:
# 支付回调通知URL需根据实际域名配置
notify-url: "https://yourdomain.com/weixin/pay_notify"
# 微信商户号与上面wx.pay.mch-id保持一致
mch-id: "1671289865"