935090232@qq.com
2021-04-20 b58adf14617cd852296bec9e1ca57978741c9f0a
zq-erp/src/main/java/com/matrix/component/wechat/externalInterface/weixinUtil/WeixinServiceUtil.java
@@ -1,5 +1,6 @@
package com.matrix.component.wechat.externalInterface.weixinUtil;
import com.matrix.component.wechat.externalInterface.common.HttpsRequest2;
import com.matrix.core.exception.GlobleException;
import com.matrix.core.tools.LogUtil;
import com.matrix.core.tools.StringUtils;
@@ -18,7 +19,10 @@
import com.matrix.component.wechat.externalInterface.service.JsApiPayComService;
import com.matrix.component.wechat.externalInterface.service.RefundService;
import com.matrix.component.wechat.externalInterface.service.ScanPayQueryService;
import com.matrix.system.common.bean.BusParameterSettings;
import com.matrix.system.common.constance.AppConstance;
import com.matrix.system.common.dao.BusParameterSettingsDao;
import com.matrix.system.common.interceptor.HostInterceptor;
import com.matrix.system.shopXcx.api.tools.WxShopOrderUtil;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
@@ -43,6 +47,13 @@
   @Autowired
   private WxShopOrderUtil wxShopOrderUtil;
   @Autowired
   BusParameterSettingsDao busParameterSettingsDao;
   
   /**
    * 支付"175.9.82.254"
@@ -58,11 +69,41 @@
    * @return 预支付订单返回的结果对象(该结果对象已封装),在H5页面使用该对象信息
    * @throws Exception
    */
   public BrandWCPayRequestData createOrder(String desc,String outTradeNo, int price, String openId,String attach) throws Exception {
   public BrandWCPayRequestData createOrder(String desc, String outTradeNo, int price, String openId, String attach) throws Exception {
      Long companyId=HostInterceptor.getCompanyId();
      BusParameterSettings notifyUrl = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.WECHARPAY_NOTIFYURL, companyId);
      return buildBrandWCPayRequestData(desc, outTradeNo, price, openId, attach, notifyUrl);
   }
   /**
    * 创建充值订单
    */
   public BrandWCPayRequestData createRechargeOrder(String desc, String outTradeNo, int price, String openId, String attach) throws Exception {
      Long companyId=HostInterceptor.getCompanyId();
      BusParameterSettings notifyUrl = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.WECHARPAY_RECHARGE_NOTIFYURL, companyId);
      return buildBrandWCPayRequestData(desc, outTradeNo, price, openId, attach, notifyUrl);
   }
   private BrandWCPayRequestData buildBrandWCPayRequestData(String desc, String outTradeNo, int price, String openId, String attach, BusParameterSettings notifyUrl) throws Exception {
      // 创建微信支付预付接口
      JsApiPayBusiness jsApiPayBusiness = new JsApiPayBusiness();
      String idAddr = getIpAddr(WebUtil.getRequest());
      JsApiPayReqData jsApiPayReqData = new JsApiPayReqData(desc, outTradeNo, price, idAddr, openId, attach);
      Long companyId=HostInterceptor.getCompanyId();
      BusParameterSettings mchID = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.WECHARPAY_MCHID, companyId);
      BusParameterSettings paySecret = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.WECHARPAY_SECRET, companyId);
      BusParameterSettings appId = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.MINIPROGRAM_APPID, companyId);
      JsApiPayReqData jsApiPayReqData = new JsApiPayReqData(appId.getParamValue(),mchID.getParamValue(),
            paySecret.getParamValue(),
            notifyUrl.getParamValue(),
            desc, outTradeNo, price, idAddr, openId, attach);
      // 创建预付订单并返回请求结果
      JsApiPayResData result = jsApiPayBusiness.createPrapareOrder(jsApiPayReqData);
      // 把预付订单的信息存放在request域中
@@ -71,17 +112,16 @@
      LogUtil.info("#---签名信息:return_msg = {}" , result.getReturn_msg());
      if (result.getReturn_code().equals("SUCCESS")) {
         // 请求成功, 构建BrandWCPayRequest发起支付需要的参数
         BrandWCPayRequestData payData = new BrandWCPayRequestData(result.getPrepay_id());
         BrandWCPayRequestData payData = new BrandWCPayRequestData(result.getPrepay_id(),appId.getParamValue(),paySecret.getParamValue());
         WebUtil.getRequest().setAttribute("payData", payData);
         return payData;
      }else{
         LogUtil.error("创建微信支付订单失败msg={}",result.getReturn_msg());
         throw new GlobleException("创建微信支付订单失败,请检查程序配置");
      }
   }
   /**@Description 支付后,向微信发送请求、查询订单,看订单是否真的支付成功了
      @date 2017年6月27日
      @atuhor jiangyouyao
@@ -115,19 +155,34 @@
    * @param desc 描述
    * @param outTradeNo  提现申请编号
    * @param totalFee 提现金额(分)
    * @param spBillCreateIP 调用接口的IP
    * @param openid
    * @return
    */
   public JsApiPayComResData comPay(String desc, String outTradeNo,int totalFee, String openid){
   public JsApiPayComResData comPay(String desc, String outTradeNo,int totalFee, String openid,Long companyId){
      JsApiPayComResData result=null;
      //boolean flag=false;
      try {
         JsApiPayBusiness jsApiPayBusiness = new JsApiPayBusiness();
         // TODO 企业付款
         JsApiPayComReqData jsApiPayComReqData=new JsApiPayComReqData("","",0,"","","");
         BusParameterSettings mchID = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.WECHARPAY_MCHID, companyId);
         BusParameterSettings appId = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.MINIPROGRAM_APPID, companyId);
         BusParameterSettings paySecret = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.WECHARPAY_SECRET, companyId);
         BusParameterSettings certLocalPath = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.WECHARPAY_CERTLOCAL_PATH, companyId);
         JsApiPayComReqData jsApiPayComReqData=new JsApiPayComReqData(mchID.getParamValue(),
               appId.getParamValue(),
               paySecret.getParamValue(),
               desc,outTradeNo,totalFee,openid,"NO_CHECK","");
         JsApiPayComService jsApiPayComService=new JsApiPayComService();
         HttpsRequest2 request2= (HttpsRequest2) jsApiPayComService.getServiceRequest();
         request2.setCertLocalPath(certLocalPath.getParamValue());
         request2.setMchId(mchID.getParamValue());
         result = jsApiPayBusiness.payComOrder(jsApiPayComService, jsApiPayComReqData);
         LogUtil.info("#提现,企业付款到个人---result:{}",result);
         if (result.getResult_code().equals("SUCCESS")) {
            return result;
@@ -155,15 +210,25 @@
         int refundFee, String opUserID){
      LogUtil.info("#---outTradeNo:{}#---outRefundNo:{}#---totalFee:{}#---refundFee:{}",
            outTradeNo,outRefundNo,totalFee,refundFee);
      BusParameterSettings mchID = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.WECHARPAY_MCHID, HostInterceptor.getCompanyId());
      if(opUserID==null){
         opUserID=WechatConfigure.mchID;
         opUserID=mchID.getParamValue();
      }
      RefundResData result=null;
      boolean flag=false;
      try {
         JsApiPayBusiness jsApiPayBusiness = new JsApiPayBusiness();
         RefundReqData refundReqData=new RefundReqData(outTradeNo, outRefundNo, totalFee, refundFee,opUserID);
         Long companyId=HostInterceptor.getCompanyId();
         BusParameterSettings paySecret = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.WECHARPAY_SECRET, companyId);
         BusParameterSettings appId = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.MINIPROGRAM_APPID, companyId);
         BusParameterSettings certLocalPath = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.WECHARPAY_CERTLOCAL_PATH, companyId);
         RefundReqData refundReqData=new RefundReqData(mchID.getParamValue(),appId.getParamValue(),paySecret.getParamValue(), outTradeNo, outRefundNo, totalFee, refundFee,opUserID);
         RefundService refundService=new RefundService();
         HttpsRequest2 request2= (HttpsRequest2) refundService.getServiceRequest();
         request2.setCertLocalPath(certLocalPath.getParamValue());
         request2.setMchId(mchID.getParamValue());
         result = jsApiPayBusiness.refundComOrder(refundService, refundReqData);
         LogUtil.info("#退款,企业付款到个人---result:{}",result);
         //如果返回余额不足时
@@ -191,12 +256,12 @@
    * @return
    */
   public String getIpAddr(HttpServletRequest request) { 
          String ip = request.getHeader("x-forwarded-for");
         /* if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
              ip = request.getHeader("Proxy-Client-IP");
          }
          if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
              ip = request.getHeader("WL-Proxy-Client-IP");
          String ip = request.getHeader("x-forwarded-for");
         /* if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
              ip = request.getHeader("Proxy-Client-IP");
          }
          if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
              ip = request.getHeader("WL-Proxy-Client-IP");
          } */
          if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
              ip = request.getRemoteAddr();