package com.dy.pipIrrWechat.config; 
 | 
  
 | 
import com.dy.common.multiDataSource.DataSourceContext; 
 | 
import com.dy.common.util.AES; 
 | 
import com.dy.pipIrrGlobal.pojoSe.SeWechatpay; 
 | 
import com.dy.pipIrrWechat.wechatpay.PayInfo; 
 | 
import com.dy.pipIrrWechat.wechatpay.PaymentSv; 
 | 
import jakarta.servlet.*; 
 | 
import jakarta.servlet.http.HttpServletRequest; 
 | 
import lombok.SneakyThrows; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.springframework.context.ApplicationContext; 
 | 
import org.springframework.web.context.support.WebApplicationContextUtils; 
 | 
  
 | 
/** 
 | 
 * @author ZhuBaoMin 
 | 
 * @date 2024-10-23 17:13 
 | 
 * @LastEditTime 2024-10-23 17:13 
 | 
 * @Description 
 | 
 */ 
 | 
  
 | 
@Slf4j 
 | 
public class WechatFilter implements Filter { 
 | 
    private PaymentSv paymentSv; 
 | 
  
 | 
    @Override 
 | 
    public void init(FilterConfig filterConfig) throws ServletException { 
 | 
        // 从ServletContext获取ApplicationContext 
 | 
        ApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(filterConfig.getServletContext()); 
 | 
        // 从ApplicationContext中获取服务bean 
 | 
        paymentSv = applicationContext.getBean(PaymentSv.class); 
 | 
    } 
 | 
  
 | 
    @SneakyThrows 
 | 
    @Override 
 | 
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) { 
 | 
        HttpServletRequest httpRequest = (HttpServletRequest) servletRequest; 
 | 
  
 | 
        // 配置数据源 
 | 
        String wxDataSourceName = httpRequest.getHeader("tag"); 
 | 
        if (wxDataSourceName != null && wxDataSourceName.trim().length() > 0) { 
 | 
            log.info("微信开发,设置数据源名称为:" + wxDataSourceName); 
 | 
            //把组织单位标签作为数据源名称 
 | 
            DataSourceContext.set(wxDataSourceName); 
 | 
        } else { 
 | 
            log.info("用户未选择数据源"); 
 | 
        } 
 | 
  
 | 
        // 初始化微信支付信息 
 | 
        String appId = httpRequest.getHeader("appId"); 
 | 
        if (appId == null || appId.trim().length() == 0) { 
 | 
            log.info("小程序唯一标识不能为空"); 
 | 
        } else { 
 | 
            appId = AES.encrypt(appId); 
 | 
  
 | 
            SeWechatpay seWechatpay = paymentSv.getWechatpayByAppId(appId); 
 | 
            if (seWechatpay != null) { 
 | 
                PayInfo.appid = AES.decrypt(seWechatpay.getAppId()); 
 | 
                PayInfo.secret = AES.decrypt(seWechatpay.getAppSecret()); 
 | 
                PayInfo.mchid = AES.decrypt(seWechatpay.getMchId()); 
 | 
                PayInfo.key = AES.decrypt(seWechatpay.getMchKey()); 
 | 
                PayInfo.serial_no = AES.decrypt(seWechatpay.getSerialNo()); 
 | 
                PayInfo.notifyUrl = AES.decrypt(seWechatpay.getNotifyUrl()); 
 | 
                log.info(PayInfo.appid + " ; " + PayInfo.secret); 
 | 
            } else { 
 | 
                log.info("小程序唯一标识错误或其信息不存在"); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        filterChain.doFilter(servletRequest, servletResponse); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void destroy() { 
 | 
    } 
 | 
} 
 |