jiangqs
2023-08-26 06272f6bb1002badb75f67d6c44a1b00bba32a76
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/NotifyController.java
@@ -18,6 +18,7 @@
import com.ruoyi.order.service.order.OrderService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -27,6 +28,8 @@
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.security.GeneralSecurityException;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Map;
import java.util.Objects;
@@ -39,6 +42,7 @@
@Api(value = "微信通知控制", tags = "微信通知控制", description = "微信通知控制")
@RestController
@RequestMapping("/app/notify")
@Log4j2
public class NotifyController extends BaseController {
    public static final String WECHAT_PAY_SERIAL = "Wechatpay-Serial";
@@ -51,7 +55,7 @@
    @Resource
    private OrderService orderService;
    @Autowired
    @Resource
    private WxPayService wxService;
    @Resource
    private BackMessageService backMessageService;
@@ -60,8 +64,21 @@
    @ApiOperation(value = "微信支付/退款通知")
    public String payNotify(@RequestBody String notifyData, HttpServletRequest request, HttpServletResponse response) throws WxPayException {
        Enumeration<String> headerNames = request.getHeaderNames();
        while (headerNames.hasMoreElements()){
            String name = headerNames.nextElement();
            log.info("request headerNames:  {}", name);
        }
        Collection<String> headerNames1 = response.getHeaderNames();
        for (String name : headerNames1) {
            log.info("request headerNames:  {}", name);
        }
        // 获取请求头
        SignatureHeader signatureHeader = getSignatureHeader(response);
        SignatureHeader signatureHeader = getSignatureHeader(request);
        log.info("微信支付/退款通知:  {}", notifyData);
        NotifyResponse responseData = GSON.fromJson(notifyData, NotifyResponse.class);
        String eventType = responseData.getEventType();
@@ -88,7 +105,6 @@
        // 保存支付/退款回调信息
        backMessageService.saveBackMessage(resultType, resultMessage);
        return WxPayNotifyV3Response.success("成功");
    }
@@ -97,10 +113,10 @@
    public String profitSharingNotify(@RequestBody String notifyData, HttpServletRequest request, HttpServletResponse response) throws WxPayException {
        ProfitSharingV3Service sharingV3Service = wxService.getProfitSharingV3Service();
        // ProfitSharingNotifyResult
        log.info("微信分账通知:  {}", notifyData);
        // 获取请求头
        SignatureHeader signatureHeader = getSignatureHeader(response);
        SignatureHeader signatureHeader = getSignatureHeader(request);
        ProfitSharingNotifyNewResult notifyResult = getProfitSharingNotifyData(notifyData, signatureHeader);
        ProfitSharingNotifyResult result = notifyResult.getResult();
@@ -162,12 +178,19 @@
                beforeSign.getBytes(StandardCharsets.UTF_8), header.getSigned());
    }
    private SignatureHeader getSignatureHeader(HttpServletResponse response){
    private SignatureHeader getSignatureHeader(HttpServletRequest request){
        SignatureHeader signatureHeader = new SignatureHeader();
        signatureHeader.setSerialNo(response.getHeader(WECHAT_PAY_SERIAL));
        signatureHeader.setSigned(response.getHeader(WECHAT_PAY_SIGNATURE));
        signatureHeader.setNonce(response.getHeader(WECHAT_PAY_NONCE));
        signatureHeader.setTimeStamp(response.getHeader(WECHAT_PAY_TIMESTAMP));
        signatureHeader.setSerialNo(request.getHeader(WECHAT_PAY_SERIAL));
        signatureHeader.setSigned(request.getHeader(WECHAT_PAY_SIGNATURE));
        signatureHeader.setNonce(request.getHeader(WECHAT_PAY_NONCE));
        signatureHeader.setTimeStamp(request.getHeader(WECHAT_PAY_TIMESTAMP));
        log.info("timeStamp:{}   nonce : {}   signed:{}  serialNo:{}",
                signatureHeader.getTimeStamp(),
                signatureHeader.getNonce(),
                signatureHeader.getSigned(),
                signatureHeader.getSerialNo());
        return signatureHeader;
    }
}