From ec863e471edf043d8c3c480c238010eb0c953bc6 Mon Sep 17 00:00:00 2001 From: hupeng Date: Thu, 12 Mar 2020 14:16:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E6=94=AF=E4=BB=98=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=B0=8F=E7=A8=8B=E5=BA=8F=E6=B8=A0=E9=81=93,?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=B0=8F=E7=A8=8B=E5=BA=8F=E4=B8=8E=E5=85=B6?= =?UTF-8?q?=E4=BB=96=E6=94=AF=E4=BB=98appid=E5=86=B2=E7=AA=81=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/YxStoreOrderServiceImpl.java | 22 +++- .../co/yixiang/constant/ShopConstants.java | 9 +- .../java/co/yixiang/enums/OrderInfoEnum.java | 3 + .../yixiang/mp/config/WxPayConfiguration.java | 30 ++++- .../yixiang/mp/service/YxMiniPayService.java | 112 ++++++++++++++++++ .../co/yixiang/mp/service/YxPayService.java | 6 +- .../shop/rest/SystemConfigController.java | 3 +- .../service/impl/YxStoreOrderServiceImpl.java | 15 ++- 8 files changed, 184 insertions(+), 16 deletions(-) create mode 100644 yshop-mp/src/main/java/co/yixiang/mp/service/YxMiniPayService.java diff --git a/yshop-api/src/main/java/co/yixiang/modules/order/service/impl/YxStoreOrderServiceImpl.java b/yshop-api/src/main/java/co/yixiang/modules/order/service/impl/YxStoreOrderServiceImpl.java index ec1e7f06..0f59623f 100644 --- a/yshop-api/src/main/java/co/yixiang/modules/order/service/impl/YxStoreOrderServiceImpl.java +++ b/yshop-api/src/main/java/co/yixiang/modules/order/service/impl/YxStoreOrderServiceImpl.java @@ -18,6 +18,7 @@ import co.yixiang.common.web.vo.Paging; import co.yixiang.constant.ShopConstants; import co.yixiang.domain.AlipayConfig; import co.yixiang.domain.vo.TradeVo; +import co.yixiang.enums.AppFromEnum; import co.yixiang.enums.BillDetailEnum; import co.yixiang.enums.BillEnum; import co.yixiang.enums.OrderInfoEnum; @@ -63,6 +64,7 @@ import co.yixiang.modules.user.web.vo.YxUserQueryVo; import co.yixiang.modules.user.web.vo.YxWechatUserQueryVo; import co.yixiang.mp.service.YxPayService; import co.yixiang.mp.service.YxTemplateService; +import co.yixiang.mp.service.YxMiniPayService; import co.yixiang.service.AlipayService; import co.yixiang.utils.OrderUtil; import com.alibaba.fastjson.JSON; @@ -161,6 +163,8 @@ public class YxStoreOrderServiceImpl extends BaseServiceImpl + * @Date 2020/3/12 + **/ +@Service +@AllArgsConstructor +public class YxMiniPayService { + + private final RedisHandler redisHandler; + + /** + * 小程序支付 + * + * @param orderId + * @param openId 小程序openid + * @param body + * @param totalFee + * @return + * @throws WxPayException + */ + public WxPayMpOrderResult wxPay(String orderId, String openId, String body, + Integer totalFee,String attach) throws WxPayException { + + String apiUrl = redisHandler.getVal("api_url"); + if (StrUtil.isBlank(apiUrl)) throw new ErrorRequestException("请配置api地址"); + + WxPayService wxPayService = WxPayConfiguration.getWxAppPayService(); + WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest(); + + orderRequest.setTradeType("JSAPI"); + orderRequest.setOpenid(openId); + orderRequest.setBody(body); + orderRequest.setOutTradeNo(orderId); + orderRequest.setTotalFee(totalFee); + orderRequest.setSpbillCreateIp("127.0.0.1"); + orderRequest.setNotifyUrl(apiUrl + "/api/wechat/notify"); + orderRequest.setAttach(attach); + + + WxPayMpOrderResult orderResult = wxPayService.createOrder(orderRequest); + + return orderResult; + + } + + + + /** + * 退款 + * @param orderId + * @param totalFee + * @throws WxPayException + */ + public void refundOrder(String orderId, Integer totalFee) throws WxPayException { + String apiUrl = redisHandler.getVal("api_url"); + if (StrUtil.isBlank(apiUrl)) throw new ErrorRequestException("请配置api地址"); + + WxPayService wxPayService = WxPayConfiguration.getWxAppPayService(); + WxPayRefundRequest wxPayRefundRequest = new WxPayRefundRequest(); + + wxPayRefundRequest.setTotalFee(totalFee);//订单总金额 + wxPayRefundRequest.setOutTradeNo(orderId); + wxPayRefundRequest.setOutRefundNo(orderId); + wxPayRefundRequest.setRefundFee(totalFee);//退款金额 + wxPayRefundRequest.setNotifyUrl(apiUrl + "/api/notify/refund"); + + wxPayService.refund(wxPayRefundRequest); + } + + + /** + * 企业打款 + * @param openid + * @param no + * @param userName + * @param amount + * @throws WxPayException + */ + public void entPay(String openid,String no,String userName,Integer amount) throws WxPayException{ + WxPayService wxPayService = WxPayConfiguration.getWxAppPayService(); + EntPayRequest entPayRequest = new EntPayRequest(); + + entPayRequest.setOpenid(openid); + entPayRequest.setPartnerTradeNo(no); + entPayRequest.setCheckName("FORCE_CHECK"); + entPayRequest.setReUserName(userName); + entPayRequest.setAmount(amount); + entPayRequest.setDescription("提现"); + entPayRequest.setSpbillCreateIp("127.0.0.1"); + wxPayService.getEntPayService().entPay(entPayRequest); + + } + + +} diff --git a/yshop-mp/src/main/java/co/yixiang/mp/service/YxPayService.java b/yshop-mp/src/main/java/co/yixiang/mp/service/YxPayService.java index 6f99f7e8..a0ebe81c 100644 --- a/yshop-mp/src/main/java/co/yixiang/mp/service/YxPayService.java +++ b/yshop-mp/src/main/java/co/yixiang/mp/service/YxPayService.java @@ -19,7 +19,7 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; /** - * @ClassName YxPayService + * @ClassName 公众号支付YxPayService * @Author hupeng <610796224@qq.com> * @Date 2020/3/1 **/ @@ -30,10 +30,10 @@ public class YxPayService { private final RedisHandler redisHandler; /** - * 微信公众号支付/小程序支付 + * 微信公众号支付 * * @param orderId - * @param openId 公众号/小程序openid + * @param openId 公众号openid * @param body * @param totalFee * @return diff --git a/yshop-shop/src/main/java/co/yixiang/modules/shop/rest/SystemConfigController.java b/yshop-shop/src/main/java/co/yixiang/modules/shop/rest/SystemConfigController.java index da4f8183..a8274e9f 100644 --- a/yshop-shop/src/main/java/co/yixiang/modules/shop/rest/SystemConfigController.java +++ b/yshop-shop/src/main/java/co/yixiang/modules/shop/rest/SystemConfigController.java @@ -61,8 +61,9 @@ public class SystemConfigController { //重新配置微信相关 if(key.equals("wechat_appid")){ WxMpConfiguration.removeWxMpService(); + WxPayConfiguration.removeWxPayService(); } - if(key.equals("wxpay_appId")){ + if(key.equals("wxpay_mchId") || key.equals("wxapp_appId")){ WxPayConfiguration.removeWxPayService(); } RedisUtil.set(key,value.toString(),0); diff --git a/yshop-shop/src/main/java/co/yixiang/modules/shop/service/impl/YxStoreOrderServiceImpl.java b/yshop-shop/src/main/java/co/yixiang/modules/shop/service/impl/YxStoreOrderServiceImpl.java index e86d0563..cfc52541 100644 --- a/yshop-shop/src/main/java/co/yixiang/modules/shop/service/impl/YxStoreOrderServiceImpl.java +++ b/yshop-shop/src/main/java/co/yixiang/modules/shop/service/impl/YxStoreOrderServiceImpl.java @@ -21,6 +21,7 @@ import co.yixiang.modules.shop.service.YxUserBillService; import co.yixiang.modules.shop.service.YxUserService; import co.yixiang.modules.shop.service.dto.*; import co.yixiang.modules.shop.service.mapper.YxStoreOrderMapper; +import co.yixiang.mp.service.YxMiniPayService; import co.yixiang.mp.service.YxPayService; import co.yixiang.utils.OrderUtil; import co.yixiang.utils.QueryHelp; @@ -57,11 +58,12 @@ public class YxStoreOrderServiceImpl implements YxStoreOrderService { private final YxStoreOrderStatusService yxStoreOrderStatusService; private final YxUserService userService; private final YxPayService payService; + private final YxMiniPayService miniPayService; public YxStoreOrderServiceImpl(YxStoreOrderRepository yxStoreOrderRepository, YxStoreOrderCartInfoRepository yxStoreOrderCartInfoRepository, YxUserRepository userRepository, YxStorePinkRepository storePinkRepository, YxStoreOrderMapper yxStoreOrderMapper, YxUserBillService yxUserBillService, YxStoreOrderStatusService yxStoreOrderStatusService, - YxUserService userService, YxPayService payService) { + YxUserService userService, YxPayService payService, YxMiniPayService miniPayService) { this.yxStoreOrderRepository = yxStoreOrderRepository; this.yxStoreOrderCartInfoRepository = yxStoreOrderCartInfoRepository; this.userRepository = userRepository; @@ -71,6 +73,7 @@ public class YxStoreOrderServiceImpl implements YxStoreOrderService { this.yxStoreOrderStatusService = yxStoreOrderStatusService; this.userService = userService; this.payService = payService; + this.miniPayService = miniPayService; } @Override @@ -155,8 +158,14 @@ public class YxStoreOrderServiceImpl implements YxStoreOrderService { }else{ BigDecimal bigDecimal = new BigDecimal("100"); try { - payService.refundOrder(resources.getOrderId(), - bigDecimal.multiply(resources.getPayPrice()).intValue()); + if(OrderInfoEnum.PAY_CHANNEL_1.getValue().equals(resources.getIsChannel())){ + miniPayService.refundOrder(resources.getOrderId(), + bigDecimal.multiply(resources.getPayPrice()).intValue()); + }else{ + payService.refundOrder(resources.getOrderId(), + bigDecimal.multiply(resources.getPayPrice()).intValue()); + } + } catch (WxPayException e) { log.info("refund-error:{}",e.getMessage()); }