提交 bd9911d7 作者: xiaowang

Merge branch 'develop'

......@@ -76,6 +76,11 @@ spec:
secretKeyRef:
name: iuav-secret
key: WECHAT_APPLET_SECRET
- name: RABBITMQ_PASSWORD
valueFrom:
secretKeyRef:
name: iuav-secret
key: RABBITMQ_PASSWORD
volumes:
- name: log-of-app
hostPath:
......
......@@ -14,4 +14,4 @@ patches:
images:
- name: REGISTRY/NAMESPACE/IMAGE:TAG
newName: mmc-registry.cn-shenzhen.cr.aliyuncs.com/sharefly-dev/payment
newTag: 01f38f32f51899d7bdc6a4ec9743138ad2011e65
newTag: fd973dad9131dc9bae45573c0847dd344ec84f9a
......@@ -60,6 +60,17 @@
<artifactId>mysql-connector-java</artifactId>
<!--<scope>runtime</scope>-->
</dependency>
<!-- RabbitMQ -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.5.0</version> <!-- 支持开源所有版本 -->
</dependency>
<!--swagger-->
<dependency>
......
......@@ -10,6 +10,7 @@ import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
......@@ -64,6 +65,14 @@ public class WechatPayController extends BaseController {
return wechatPayService.applyRefund(applyRefundVO);
}
@ApiIgnore
@ApiOperation(value = "feign-申请退款")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("feignApplyRefund")
public ResultBody feignApplyRefund(@RequestBody ApplyRefundVO applyRefundVO) {
return wechatPayService.applyRefund(applyRefundVO);
}
@ApiOperation(value = "退款异步通知")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("refundCallback")
......
......@@ -40,7 +40,8 @@ public class AuthSignatureFilter implements AuthFilter {
*/
private static final String[] IGNORE_URLS = {"/payment/swagger-resources"
, "/payment/v2/api-docs", "/payment/repocash/walletUsers", "/payment/doc.html",
"/payment/actuator/health/readiness", "/payment/wechat/payCallback", "/payment/wechat/refundCallback"};
"/payment/actuator/health/readiness", "/payment/wechat/payCallback",
"/payment/wechat/refundCallback", "/payment/wechat/feignApplyRefund"};
/*无需加密狗无需登录白名单*/
private static final String[] USE_KEY = {"/oms/account/loginByUsbKey"};
......
......@@ -22,7 +22,9 @@ public class OrderRequestParamsVO implements Serializable {
private String description;
@ApiModelProperty(value = "订单金额(分为单位)")
private Integer amount;
@ApiModelProperty(value = "订单来源 0:产品商城 1:租赁订单 2:培训订单 ...其他后续加")
@ApiModelProperty(value = "订单来源 0:产品商城 1:租赁订单 2:培训订单 3:充值云享金 ...其他后续加")
private Integer orderPort;
@ApiModelProperty(value = "附加参数 :附加数据,在查询API和支付通知中原样返回,可作为自定义参数使用,实际情况下只有支付完成状态才会返回该字段。")
private String attach;
}
package com.mmc.payment.model.vo.wallet;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author LW
* @date 2023/8/23 13:37
* 概要:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class TopUpOrderVO {
@ApiModelProperty(value = "支付用户的openid")
private String openid;
@ApiModelProperty(value = "订单编号")
private String orderNo;
@ApiModelProperty(value = "金额(分)")
private Integer amount;
@ApiModelProperty(value = "订单状态")
private String tradeState;
@ApiModelProperty(value = "交易状态描述")
private String tradeStateDesc;
}
package com.mmc.payment.mq;
import com.mmc.payment.model.vo.wallet.TopUpOrderVO;
/**
* @Author LW
* @date 2023/8/23 11:30
* 概要:
*/
public interface PublishMsg {
void sendNewTopUpOrder(TopUpOrderVO topUpOrder, String routingKey);
}
package com.mmc.payment.mq.config;
import com.mmc.payment.mq.constant.RabbitmqConstant;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author: lw
* @Date: 2023/8/23 11:26
*/
@Configuration
public class DirectExchangeConfig {
@Bean
public DirectExchange directExchange() {
return new DirectExchange(RabbitmqConstant.USER_TOP_UP_DIRECT_EXCHANGE);
}
@Bean
public Queue directQueue1() {
return new Queue(RabbitmqConstant.USER_TOP_UP_DIRECT_QUEUE, true);
}
@Bean
public Binding bindingDirect1() {
Binding binding = BindingBuilder.bind(directQueue1()).to(directExchange()).with(RabbitmqConstant.USER_TOP_UP_ROUTING_KEY);
return binding;
}
@Bean
public Queue directQueue2() {
return new Queue(RabbitmqConstant.USER_TOP_UP_SUCCESS_QUEUE, true);
}
@Bean
public Binding bindingDirect2() {
Binding binding = BindingBuilder.bind(directQueue2()).to(directExchange()).with(RabbitmqConstant.USER_TOP_UP_SUCCESS_ROUTING_KEY);
return binding;
}
}
package com.mmc.payment.mq.constant;
/**
* @author: lw
* @Date: 2023/8/23 11:26
*/
public class RabbitmqConstant {
/**
* 用户充值订单交换机
*/
public final static String USER_TOP_UP_DIRECT_EXCHANGE = "USER_TOP_UP_DIRECT_EXCHANGE";
/**
* 充值订单队列、routing_key
*/
public final static String USER_TOP_UP_DIRECT_QUEUE = "USER_TOP_UP_DIRECT_QUEUE";
public final static String USER_TOP_UP_ROUTING_KEY = "USER_TOP_UP_ROUTING_KEY";
/**
* 充值成功队列、routing_key
*/
public final static String USER_TOP_UP_SUCCESS_QUEUE = "USER_TOP_UP_SUCCESS_QUEUE";
public final static String USER_TOP_UP_SUCCESS_ROUTING_KEY = "USER_TOP_UP_SUCCESS_ROUTING_KEY";
}
package com.mmc.payment.mq.impl;
import com.alibaba.fastjson2.JSONObject;
import com.mmc.payment.model.vo.wallet.TopUpOrderVO;
import com.mmc.payment.mq.PublishMsg;
import com.mmc.payment.mq.constant.RabbitmqConstant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @Author LW
* @date 2023/8/23 13:42
* 概要:
*/
@Slf4j
@Service
public class PublishMsgImpl implements PublishMsg {
@Autowired
RabbitTemplate rabbitTemplate;
@Override
public void sendNewTopUpOrder(TopUpOrderVO topUpOrder, String routingKey) {
log.info("############云享飞pro-充值订单-RabbitMQ-Send-##########");
log.info("sendNewTopUpOrder:{},routingKey:{}", JSONObject.toJSONString(topUpOrder), routingKey);
rabbitTemplate.convertAndSend(RabbitmqConstant.USER_TOP_UP_DIRECT_EXCHANGE, routingKey, JSONObject.toJSONString(topUpOrder));
}
}
......@@ -17,6 +17,9 @@ import com.mmc.payment.model.vo.order.ApplyRefundVO;
import com.mmc.payment.model.vo.order.OrderRequestParamsVO;
import com.mmc.payment.model.vo.order.UserPayInfoVO;
import com.mmc.payment.model.vo.order.WxPayLogVO;
import com.mmc.payment.model.vo.wallet.TopUpOrderVO;
import com.mmc.payment.mq.PublishMsg;
import com.mmc.payment.mq.constant.RabbitmqConstant;
import com.mmc.payment.service.WechatPayService;
import com.mmc.payment.util.WxConfigUtils;
import com.wechat.pay.java.core.Config;
......@@ -61,6 +64,8 @@ public class WechatPayServiceImpl implements WechatPayService {
UserAppApi userAppApi;
@Resource
WxConfigUtils wxConfigUtils;
@Resource
PublishMsg publishMsg;
@Override
@Transactional(rollbackFor = Exception.class)
......@@ -85,6 +90,7 @@ public class WechatPayServiceImpl implements WechatPayService {
Payer payer = new Payer();
payer.setOpenid(userSimpleInfo.getOpenid());
prepayRequest.setPayer(payer);
prepayRequest.setAttach(orderRequestParamsVO.getAttach());
prepayRequest.setAppid(userSystemConstant.getWxAppId());
prepayRequest.setMchid(userSystemConstant.getMchid());
prepayRequest.setDescription(orderRequestParamsVO.getDescription());
......@@ -191,12 +197,35 @@ public class WechatPayServiceImpl implements WechatPayService {
wxPayLogDO.setTradeStateDesc(transaction.getTradeStateDesc());
wechatPayDao.updateWxPayLog(wxPayLogDO);
result.put("code", "SUCCESS");
if ("TOP_UP".equals(transaction.getAttach())) {
// 充值订单,发送mq消息进行操作
sendTopUpMsg(transaction, 0);
}
if ("TOP_UP".equals(transaction.getAttach()) && "SUCCESS".equals(transaction.getTradeState().toString())) {
// 发送充值成功消息
sendTopUpMsg(transaction, 1);
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
private void sendTopUpMsg(Transaction transaction, Integer flag) {
TopUpOrderVO topUpOrderVO = new TopUpOrderVO();
topUpOrderVO.setOpenid(transaction.getPayer().getOpenid());
topUpOrderVO.setOrderNo(transaction.getOutTradeNo());
topUpOrderVO.setAmount(transaction.getAmount().getTotal());
topUpOrderVO.setTradeState(transaction.getTradeState().toString());
topUpOrderVO.setTradeStateDesc(transaction.getTradeStateDesc());
if (flag == 0) {
publishMsg.sendNewTopUpOrder(topUpOrderVO, RabbitmqConstant.USER_TOP_UP_ROUTING_KEY);
}
if (flag == 1) {
publishMsg.sendNewTopUpOrder(topUpOrderVO, RabbitmqConstant.USER_TOP_UP_SUCCESS_ROUTING_KEY);
}
}
@Override
public ResultBody closeOrder(String orderNo) {
Config config = wxConfigUtils.createConfig();
......
......@@ -13,6 +13,13 @@ spring:
jedis:
pool:
max-active: 2
#rabbitMQ
rabbitmq:
host: amqp-cn-zvp2ozhnj001.cn-shenzhen.amqp-0.vpc.mq.amqp.aliyuncs.com
port: 5672
username: MjphbXFwLWNuLXp2cDJvemhuajAwMTpMVEFJNEZ6Q3B5ckEzM1BlZ254V1M2WFY=
password: ${RABBITMQ_PASSWORD}
virtual-host: dev
springfox:
documentation:
......
......@@ -13,6 +13,13 @@ spring:
jedis:
pool:
max-active: 2
#rabbitMQ
rabbitmq:
host: amqp-cn-zvp2ozhnj001.cn-shenzhen.amqp-0.vpc.mq.amqp.aliyuncs.com
port: 5672
username: MjphbXFwLWNuLXp2cDJvemhuajAwMTpMVEFJNEZ6Q3B5ckEzM1BlZ254V1M2WFY=
password: ${RABBITMQ_PASSWORD}
virtual-host: prod
springfox:
documentation:
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论