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()); // 收到请求-解析成功 PayService.WxNotify(notifyInfo); } 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; } }