买了个服务器,然后我在本地运行了一遍,用的是jdk11,然后微信小程序本地,配置8080端口,发现没问题,一切都正常。后来把JAVA程序打包成jar包,复制到阿里云centos服务器上。docker打包成镜像,然后启动。微信小程序后端接口走nginx80端口(走8080端口也没用),发现所有的功能都能用,唯独就是一个微信支付的接口用不了。这里我已经写死了,让他直接走成功。具体代码是这样的
public OrderPaymentVO payment(OrdersPaymentDTO ordersPaymentDTO) throws Exception {
// 1. 保留原有的用户、订单校验逻辑(不变)
Long userId = BaseContext.getCurrentId();
User user = userMapper.getById(userId);
if (user == null || user.getOpenid() == null) {
throw new IllegalArgumentException("用户信息或openid无效");
}
Orders ordersDB = orderMapper.getByNumber(ordersPaymentDTO.getOrderNumber());
if (ordersDB == null) {
throw new OrderBusinessException("订单不存在");
}
// 2. 直接标记订单为已支付(模拟成功,不变)
Orders orders = Orders.builder()
.id(ordersDB.getId())
.status(Orders.TO_BE_CONFIRMED)
.payStatus(Orders.PAID)
.checkoutTime(LocalDateTime.now())
.build();
orderMapper.update(orders);
// 3. WebSocket推送支付成功消息(不变)
Map<String, Object> wsMap = new HashMap<>();
wsMap.put("type", 3); // 3=支付成功
wsMap.put("orderId", orders.getId());
wsMap.put("content", "订单" + ordersPaymentDTO.getOrderNumber() + "支付成功");
webSocketServer.sendToAllClient(JSON.toJSONString(wsMap));
// 4. 关键修改:返回“跳过支付”的标识 + 模拟参数
// 新增 skipPay: true,告诉前端“无需调用微信支付,直接跳成功页”
OrderPaymentVO vo = OrderPaymentVO.builder()
.nonceStr(UUID.randomUUID().toString().replace("-", ""))
.paySign("SUCCESS")
.timeStamp(String.valueOf(Instant.now().getEpochSecond()))
.signType("NONE")
.packageStr("prepay_id=mock_success")
.skipPay(true) // 新增这个字段!!!前端靠它判断是否跳过支付
.build();
return vo;
}