You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					125 lines
				
				4.9 KiB
			
		
		
			
		
	
	
					125 lines
				
				4.9 KiB
			| 
											3 years ago
										 | package com.ynxbd.common.action.pay;
 | ||
|  | 
 | ||
|  | import com.ynxbd.common.action.base.BaseAction;
 | ||
|  | import com.ynxbd.common.bean.enums.MerchantEnum;
 | ||
|  | import com.ynxbd.common.result.Result;
 | ||
|  | import com.ynxbd.common.result.ServiceException;
 | ||
|  | import com.ynxbd.common.service.*;
 | ||
|  | import com.ynxbd.wx.wxfactory.WxPayHelper;
 | ||
|  | import com.ynxbd.wx.wxfactory.bean.WxPayNotify;
 | ||
|  | import com.ynxbd.wx.wxfactory.utils.WxRespHelper;
 | ||
|  | import lombok.extern.slf4j.Slf4j;
 | ||
|  | import org.apache.struts2.convention.annotation.Action;
 | ||
|  | import org.apache.struts2.convention.annotation.Namespace;
 | ||
|  | 
 | ||
|  | import java.math.BigDecimal;
 | ||
|  | import java.util.Date;
 | ||
|  | 
 | ||
|  | 
 | ||
|  | @Slf4j
 | ||
|  | @Namespace("/wx_pay")
 | ||
|  | public class WxPayAction extends BaseAction {
 | ||
|  |     /**
 | ||
|  |      * [微信]jsapi通知
 | ||
|  |      *
 | ||
|  |      * @return 是否成功
 | ||
|  |      */
 | ||
|  |     @Action("apiNotify")
 | ||
|  |     public Result apiNotify() {
 | ||
|  |         try {
 | ||
|  |             WxPayNotify notifyInfo = WxPayHelper.payNotify(request);
 | ||
|  |             Result.respXml(WxRespHelper.respOk()); // 收到请求-解析成功
 | ||
|  | 
 | ||
|  |             String openid = notifyInfo.getOpenid();
 | ||
|  |             String bankTransNo = notifyInfo.getTransactionId();
 | ||
|  |             String outTradeNo = notifyInfo.getOutTradeNo();
 | ||
|  |             String payInfo = notifyInfo.getPayInfo();
 | ||
|  |             BigDecimal totalFee = notifyInfo.getTotalFee();
 | ||
|  |             String payDate = notifyInfo.getPayDate();
 | ||
|  |             String payTime = notifyInfo.getPayTime();
 | ||
|  | 
 | ||
|  |             String notifyType = notifyInfo.getAttach();
 | ||
|  | 
 | ||
|  |             log.info("【微信】[{}]收到通知 outTradeNo={}, bankTransNo={}", notifyType, outTradeNo, bankTransNo);
 | ||
|  | 
 | ||
|  |             switch (PEnum.toEnum(notifyType)) {
 | ||
|  |                 case RECIPE:
 | ||
|  |                     new RecipeService().recipeListPay(MerchantEnum.WX, totalFee.toString(), openid, outTradeNo, bankTransNo, null, payDate, payTime, payInfo);
 | ||
|  |                     break;
 | ||
|  | 
 | ||
|  |                 case REG: // 挂号
 | ||
|  |                     try {
 | ||
|  |                         new RegService().regPaidNotify(MerchantEnum.WX, totalFee, openid, bankTransNo, outTradeNo, null, payDate, payTime, payInfo, new Date());
 | ||
|  |                     } catch (ServiceException e) {
 | ||
|  |                         log.info("【微信】[挂号]通知异常 outTradeNo={}, bankTransNo={}, message={}", outTradeNo, bankTransNo, e.getMessage());
 | ||
|  |                     }
 | ||
|  |                     break;
 | ||
|  | 
 | ||
|  |                 case IN_HOSP:
 | ||
|  |                     boolean isInsert = new InHospService().inHospNotify(MerchantEnum.WX, openid, totalFee, outTradeNo, bankTransNo, payDate, payTime, payInfo);
 | ||
|  |                     log.info("【微信】[住院预交金] 预存{}", (isInsert ? "成功" : "失败"));
 | ||
|  |                     break;
 | ||
|  | 
 | ||
|  |                 case CASEBOOK:
 | ||
|  |                     new CasebookService().payNotify(MerchantEnum.WX, openid, totalFee, outTradeNo, bankTransNo, payInfo);
 | ||
|  |                     break;
 | ||
|  | 
 | ||
|  |                 case OUT_COLLECT:
 | ||
|  |                     new OutCollectService().ocPayNotify(MerchantEnum.WX, openid, totalFee, outTradeNo, bankTransNo, payInfo);
 | ||
|  |                     break;
 | ||
|  | 
 | ||
|  |                 case OL_REG:
 | ||
|  |                     new MicroService().InternetHospNotice(outTradeNo, bankTransNo, openid, totalFee, payDate, payTime);
 | ||
|  |                     break;
 | ||
|  | 
 | ||
|  |                 default:
 | ||
|  |                     log.info("【微信】通知类型错误,结束请求");
 | ||
|  |                     break;
 | ||
|  |             }
 | ||
|  | 
 | ||
|  |         } catch (ServiceException e) {
 | ||
|  |             Result.respXml(WxRespHelper.resp(e)); // 收到请求-解析失败
 | ||
|  |         }
 | ||
|  |         return null;
 | ||
|  |     }
 | ||
|  | 
 | ||
|  | 
 | ||
|  |     /**
 | ||
|  |      * [微信]native支付通知
 | ||
|  |      *
 | ||
|  |      * @return 是否成功
 | ||
|  |      */
 | ||
|  |     @Action("nativeNotify")
 | ||
|  |     public Result nativeNotify() {
 | ||
|  |         try {
 | ||
|  |             WxPayNotify notifyInfo = WxPayHelper.payNotify(request);
 | ||
|  |             Result.respXml(WxRespHelper.respOk()); // 收到请求-解析成功
 | ||
|  | 
 | ||
|  |             String openid = notifyInfo.getOpenid();
 | ||
|  |             String bankTransNo = notifyInfo.getTransactionId();
 | ||
|  |             String outTradeNo = notifyInfo.getOutTradeNo();
 | ||
|  |             String payInfo = notifyInfo.getPayInfo();
 | ||
|  |             BigDecimal totalFee = notifyInfo.getTotalFee();
 | ||
|  | 
 | ||
|  |             String notifyType = notifyInfo.getAttach();
 | ||
|  | 
 | ||
|  |             log.info("notifyInfo={}", notifyInfo);
 | ||
|  |             log.info("【微信】[{}] native收到通知 outTradeNo={}, bankTransNo={}", notifyType, outTradeNo, bankTransNo);
 | ||
|  | 
 | ||
|  |             switch (PQREnum.toEnum(notifyType)) {
 | ||
|  |                 case OUT_COLLECT:
 | ||
|  |                     new OutCollectService().ocPayNotify(MerchantEnum.WX, openid, totalFee, bankTransNo, outTradeNo, payInfo);
 | ||
|  |                     break;
 | ||
|  | 
 | ||
|  |                 default:
 | ||
|  |                     log.info("【微信native支付】通知类型错误,结束请求");
 | ||
|  |                     break;
 | ||
|  |             }
 | ||
|  | 
 | ||
|  |         } catch (ServiceException e) {
 | ||
|  |             Result.respXml(WxRespHelper.resp(e)); // 收到请求-解析失败
 | ||
|  |         }
 | ||
|  |         return null;
 | ||
|  |     }
 | ||
|  | }
 |