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()); }