zhanglin8526
2023-08-26 ab7d9936acebe01f1b74cfeab510d0b42a8e77f1
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/NotifyController.java
@@ -1,9 +1,37 @@
package com.ruoyi.order.controller.miniapp;
import com.github.binarywang.wxpay.bean.ecommerce.*;
import com.github.binarywang.wxpay.bean.notify.WxPayNotifyV3Response;
import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingNotifyData;
import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingNotifyResult;
import com.github.binarywang.wxpay.exception.WxPayException;
import com.github.binarywang.wxpay.service.ProfitSharingV3Service;
import com.github.binarywang.wxpay.service.WxPayService;
import com.github.binarywang.wxpay.v3.auth.Verifier;
import com.github.binarywang.wxpay.v3.util.AesUtils;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.order.domain.vo.ProfitSharingNotifyNewResult;
import com.ruoyi.order.enums.WxPayNotifyEventTypeEnum;
import com.ruoyi.order.service.account.BackMessageService;
import com.ruoyi.order.service.order.OrderService;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.ApiOperation;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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;
/**
 * @program: ruoyi
@@ -14,9 +42,10 @@
@Api(value = "微信通知控制", tags = "微信通知控制", description = "微信通知控制")
@RestController
@RequestMapping("/app/notify")
@Log4j2
public class NotifyController extends BaseController {
    /*public static final String WECHAT_PAY_SERIAL = "Wechatpay-Serial";
    public static final String WECHAT_PAY_SERIAL = "Wechatpay-Serial";
    public static final String WECHAT_PAY_SIGNATURE = "Wechatpay-Signature";
    public static final String WECHAT_PAY_TIMESTAMP = "Wechatpay-Timestamp";
    public static final String WECHAT_PAY_NONCE = "Wechatpay-Nonce";
@@ -26,7 +55,7 @@
    @Resource
    private OrderService orderService;
    @Autowired
    @Resource
    private WxPayService wxService;
    @Resource
    private BackMessageService backMessageService;
@@ -35,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();
@@ -63,7 +105,6 @@
        // 保存支付/退款回调信息
        backMessageService.saveBackMessage(resultType, resultMessage);
        return WxPayNotifyV3Response.success("成功");
    }
@@ -72,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();
@@ -137,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;
    }*/
    }
}