diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/notify/NotifyApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/notify/NotifyApplicationService.java index 4c3b201..d4a6e37 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/notify/NotifyApplicationService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/notify/NotifyApplicationService.java @@ -71,47 +71,4 @@ public class NotifyApplicationService extends BaseApplicationService { } return notificationVo; } - - private WxPayOrderNotifyResult parseOrderNotifyResult(String xmlResult) throws WxPayException { - WxPayService wxPayService = new WxPayServiceImpl(); - WxPayOrderNotifyResult result = null; - WxPayConfig wxPayConfig = new WxPayConfig(); - wxPayConfig.setMchId(mchId); - wxPayConfig.setMchKey(v3Key); - wxPayService.setConfig(wxPayConfig); - // 解析并校验参数 - try { - result = wxPayService.parseOrderNotifyResult(xmlResult); - } catch (Exception e) { - e.printStackTrace(); - } - return result; - } - - /** - * 验证微信参数 - */ - private void checkWxPayParams(WxPayOrderNotifyResult params, PaymentChannelOrder paymentChannelOrder) { - //校验结果是否成功 - if (!RETURN_VALUE_SUCCESS.equalsIgnoreCase(params.getResultCode()) - && RETURN_VALUE_SUCCESS.equalsIgnoreCase(params.getReturnCode())) { - String err = "returnCode=" + params.getReturnCode() + ",resultCode=" + params.getResultCode() + - ",errCode={}" + params.getErrCode() + ",errCodeDes={}" + params.getErrCodeDes(); - log.error(err); - throw new BizException("支付结果为失败"); - } - checkCommonParams(new BigDecimal(params.getTotalFee()), paymentChannelOrder); - } - - /** - * 验证订单数据 - */ - private void checkCommonParams(BigDecimal amount, PaymentChannelOrder paymentChannelOrder) { - if (!PaymentChannelOrderStatusEnum.UNPAID.equals(paymentChannelOrder.getStatus())) { - throw new BizException("支付订单状态不正确"); - } - if (!(paymentChannelOrder.getAmount().multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_UP).compareTo(amount) == 0)) { - throw new BizException("支付金额错误"); - } - } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/processor/wechat/WeChatPayProcessor.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/processor/wechat/WeChatPayProcessor.java index c80224a..5f0a7b4 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/processor/wechat/WeChatPayProcessor.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/paymentchannelorder/processor/wechat/WeChatPayProcessor.java @@ -2,21 +2,10 @@ package com.qniao.dam.application.service.paymentchannelorder.processor.wechat; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; -import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest; -import com.github.binarywang.wxpay.bean.result.WxPayUnifiedOrderResult; -import com.github.binarywang.wxpay.config.WxPayConfig; -import com.github.binarywang.wxpay.constant.WxPayConstants; -import com.github.binarywang.wxpay.exception.WxPayException; -import com.github.binarywang.wxpay.service.WxPayService; -import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl; -import com.github.binarywang.wxpay.util.SignUtils; import com.qniao.dam.api.command.paymentchannelorder.user.request.ThirdPartyField; import com.qniao.dam.application.service.paymentchannelorder.processor.IChannelPayService; import com.qniao.dam.application.service.paymentchannelorder.processor.wechat.utils.WXPayV3Util; -import com.qniao.dam.application.service.paymentchannelorder.processor.wechat.vobj.ChannelPaymentField; -import com.qniao.dam.application.service.paymentchannelorder.processor.wechat.vobj.WeChatPaymentBasic; import com.qniao.dam.domain.aggregate.paymentchannelorder.entity.PaymentChannelOrder; import com.qniao.dau.application.UecServerApplicationService; import com.qniao.dau.application.request.GetWechatSessionDto; @@ -28,9 +17,6 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; -import java.math.RoundingMode; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -109,122 +95,4 @@ public class WeChatPayProcessor extends IChannelPayService { throw new BizException("发起微信预支付失败"); } } - - public WxPayConfig getWxPayConfig(String appId) { - WxPayConfig wxPayConfig = new WxPayConfig(); - wxPayConfig.setMchId(mchId); - wxPayConfig.setMchKey(v3Key); - wxPayConfig.setAppId(appId); - wxPayConfig.setTradeType("JSAPI"); - wxPayConfig.setNotifyUrl(notifyUrl); - return wxPayConfig; - } - - - /** - * 构建微信统一下单请求数据 - * - * @param paymentChannelOrder - * @param wxPayConfig - * @return - */ - public WxPayUnifiedOrderRequest buildUnifiedOrderRequest(PaymentChannelOrder paymentChannelOrder, WxPayConfig - wxPayConfig, String openId) { - // 微信统一下单请求对象 - WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest(); - request.setBody(paymentChannelOrder.getComment()); - request.setOutTradeNo(paymentChannelOrder.getId().toString()); - request.setTotalFee(paymentChannelOrder.getAmount().multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_UP).intValue()); - request.setSpbillCreateIp("127.0.0.1"); - //todo 是否需要记在渠道支付单中 - request.setTimeExpire(LocalDateTime.now().plusMinutes(30L).format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); - request.setNotifyUrl(wxPayConfig.getNotifyUrl()); - request.setTradeType(wxPayConfig.getTradeType()); - if (request.getTradeType().equals("JSAPI")) { - request.setOpenid(openId); - } - return request; - } - - private WeChatPaymentBasic getWeChatPaymentBasic(WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest, WxPayConfig - wxPayConfig) { - WxPayService wxPayService = new WxPayServiceImpl(); - wxPayService.setConfig(wxPayConfig); - WxPayUnifiedOrderResult wxPayUnifiedOrderResult = null; - try { - String timestamp = String.valueOf(System.currentTimeMillis() / 1000); - String nonceStr = String.valueOf(System.currentTimeMillis()); - log.info("发起微信支付参数 配置:{},参数: {}", wxPayUnifiedOrderRequest, wxPayConfig); - wxPayUnifiedOrderResult = wxPayService.unifiedOrder(wxPayUnifiedOrderRequest); - WeChatPaymentBasic weChatPaymentBasic = new WeChatPaymentBasic(); - if (wxPayConfig.getTradeType().equals("JSAPI")) { - log.info("微信预支付返回结果:{}", wxPayUnifiedOrderResult); - weChatPaymentBasic.setAppId(wxPayUnifiedOrderResult.getAppid()); - weChatPaymentBasic.setNonceStr(nonceStr); - weChatPaymentBasic.setTimeStamp(timestamp); - weChatPaymentBasic.setPackages("prepay_id=" + wxPayUnifiedOrderResult.getPrepayId()); - weChatPaymentBasic.setSignType(WxPayConstants.SignType.MD5); - weChatPaymentBasic.setPaySign(sign(weChatPaymentBasic, wxPayConfig)); - log.info("微信预支付调起参数:{}", weChatPaymentBasic); - } else if (wxPayConfig.getTradeType().equals("APP")) { - log.info("微信预支付返回结果:{}", wxPayUnifiedOrderResult); - String packageValue = "Sign=WXPay"; - weChatPaymentBasic.setSign(appSign(wxPayUnifiedOrderResult.getPrepayId(), - wxPayConfig.getMchId(), - timestamp, - nonceStr, - wxPayConfig.getAppId(), - packageValue, - wxPayConfig)); - weChatPaymentBasic.setPrepayid(wxPayUnifiedOrderResult.getPrepayId()); - weChatPaymentBasic.setPartnerid(wxPayConfig.getMchId()); - weChatPaymentBasic.setAppId(wxPayUnifiedOrderResult.getAppid()); - weChatPaymentBasic.setPackages(packageValue); - weChatPaymentBasic.setTimeStamp(timestamp); - weChatPaymentBasic.setNonceStr(nonceStr); - log.info("微信预支付调起参数:{}", weChatPaymentBasic); - } - return weChatPaymentBasic; - } catch (WxPayException e) { - log.info(e.getMessage()); - throw new BizException("发起微信预支付异常"); - } - } - - - private String sign(WeChatPaymentBasic weChatPaymentBasicVo, WxPayConfig wxPayConfig) { - Map payInfo = new HashMap<>(); - payInfo.put("appId", weChatPaymentBasicVo.getAppId()); - payInfo.put("timeStamp", weChatPaymentBasicVo.getTimeStamp()); - payInfo.put("nonceStr", weChatPaymentBasicVo.getNonceStr()); - payInfo.put("package", weChatPaymentBasicVo.getPackages()); - payInfo.put("signType", WxPayConstants.SignType.MD5); - return SignUtils.createSign(payInfo, wxPayConfig.getSignType(), wxPayConfig.getMchKey(), null); - } - - private String appSign(String prepayid, String partnerid, String timestamp, String noncestr, String - appid, String packageValue, WxPayConfig wxPayConfig) { - Map configMap = new HashMap<>(); - configMap.put("prepayid", prepayid); - configMap.put("partnerid", partnerid); - configMap.put("package", packageValue); - configMap.put("timestamp", timestamp); - configMap.put("noncestr", noncestr); - configMap.put("appid", appid); - return SignUtils.createSign(configMap, wxPayConfig.getSignType(), wxPayConfig.getMchKey(), null); - } - - private Map transformToMap(WeChatPaymentBasic weChatPaymentBasic) { - Map map = new HashMap<>(); - map.put(ChannelPaymentField.APPID, weChatPaymentBasic.getAppId()); - map.put(ChannelPaymentField.TIMESTAMP, weChatPaymentBasic.getTimeStamp()); - map.put(ChannelPaymentField.NONCE_STR, weChatPaymentBasic.getNonceStr()); - map.put(ChannelPaymentField.PACKAGES, weChatPaymentBasic.getPackages()); - map.put(ChannelPaymentField.SIGN_TYPE, weChatPaymentBasic.getSignType()); - map.put(ChannelPaymentField.PAY_SIGN, weChatPaymentBasic.getPaySign()); - map.put(ChannelPaymentField.PRE_PAY_ID, weChatPaymentBasic.getPrepayid()); - map.put(ChannelPaymentField.PARTNER_ID, weChatPaymentBasic.getPartnerid()); - map.put(ChannelPaymentField.SIGN, weChatPaymentBasic.getSign()); - return map; - } }