diff --git a/pigx-visual/pigx-pay-platform/src/main/java/com/pig4cloud/pigx/pay/handler/impl/AlipayWapPayOrderHandler.java b/pigx-visual/pigx-pay-platform/src/main/java/com/pig4cloud/pigx/pay/handler/impl/AlipayWapPayOrderHandler.java index 579fcf4a4..77a77cb9e 100644 --- a/pigx-visual/pigx-pay-platform/src/main/java/com/pig4cloud/pigx/pay/handler/impl/AlipayWapPayOrderHandler.java +++ b/pigx-visual/pigx-pay-platform/src/main/java/com/pig4cloud/pigx/pay/handler/impl/AlipayWapPayOrderHandler.java @@ -20,7 +20,7 @@ package com.pig4cloud.pigx.pay.handler.impl; import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.extra.servlet.JakartaServletUtil; -import cn.hutool.extra.servlet.ServletUtil; +import cn.hutool.extra.spring.SpringUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.alipay.api.AlipayApiException; @@ -39,12 +39,12 @@ import com.pig4cloud.pigx.pay.mapper.PayTradeOrderMapper; import com.pig4cloud.pigx.pay.utils.ChannelPayApiConfigKit; import com.pig4cloud.pigx.pay.utils.OrderStatusEnum; import com.pig4cloud.pigx.pay.utils.PayChannelNameEnum; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; /** @@ -131,10 +131,13 @@ public class AlipayWapPayOrderHandler extends AbstractPayOrderHandler { model.setTotalAmount(NumberUtil.div(tradeOrder.getAmount(), "100", 2).toString()); model.setProductCode(goodsOrder.getGoodsId()); model.setPassbackParams(String.valueOf(TenantContextHolder.getTenantId())); + + Boolean isMicro = SpringUtil.getProperty("security.micro", Boolean.class, true); + try { log.info("拉起支付宝wap 支付参数 {}", model); AliPayApi.wapPay(response, model, ChannelPayApiConfigKit.get().getReturnUrl(), - ChannelPayApiConfigKit.get().getNotifyUrl() + "/admin/notify/ali/callbak"); + String.format("%s/api/%s/notify/ali/callbak", ChannelPayApiConfigKit.get().getNotifyUrl(), isMicro ? "pay" : "admin")); } catch (AlipayApiException e) { log.error("支付宝手机支付失败", e); diff --git a/pigx-visual/pigx-pay-platform/src/main/java/com/pig4cloud/pigx/pay/handler/impl/WeChatMpPayOrderHandler.java b/pigx-visual/pigx-pay-platform/src/main/java/com/pig4cloud/pigx/pay/handler/impl/WeChatMpPayOrderHandler.java index 6d84669f3..f42535a0f 100644 --- a/pigx-visual/pigx-pay-platform/src/main/java/com/pig4cloud/pigx/pay/handler/impl/WeChatMpPayOrderHandler.java +++ b/pigx-visual/pigx-pay-platform/src/main/java/com/pig4cloud/pigx/pay/handler/impl/WeChatMpPayOrderHandler.java @@ -18,7 +18,7 @@ package com.pig4cloud.pigx.pay.handler.impl; import cn.hutool.extra.servlet.JakartaServletUtil; -import cn.hutool.extra.servlet.ServletUtil; +import cn.hutool.extra.spring.SpringUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -39,11 +39,11 @@ import com.pig4cloud.pigx.pay.mapper.PayTradeOrderMapper; import com.pig4cloud.pigx.pay.utils.ChannelPayApiConfigKit; import com.pig4cloud.pigx.pay.utils.OrderStatusEnum; import com.pig4cloud.pigx.pay.utils.PayChannelNameEnum; +import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import jakarta.servlet.http.HttpServletRequest; import java.util.Map; /** @@ -119,7 +119,8 @@ public class WeChatMpPayOrderHandler extends AbstractPayOrderHandler { String ip = JakartaServletUtil.getClientIP(request); WxPayApiConfig wxPayApiConfig = WxPayApiConfigKit.getWxPayApiConfig(); - // 预订单参数 + // 判断是否是单体架构 + Boolean isMicro = SpringUtil.getProperty("security.micro", Boolean.class, true); Map params = UnifiedOrderModel.builder() .appid(wxPayApiConfig.getAppId()) .mch_id(wxPayApiConfig.getMchId()) @@ -129,7 +130,7 @@ public class WeChatMpPayOrderHandler extends AbstractPayOrderHandler { .out_trade_no(String.valueOf(tradeOrder.getOrderId())) .total_fee(goodsOrder.getAmount()) .spbill_create_ip(ip) - .notify_url(ChannelPayApiConfigKit.get().getNotifyUrl() + "/admin/notify/wx/callbak") + .notify_url(String.format("%s/api/%s/notify/wx/callbak", ChannelPayApiConfigKit.get().getNotifyUrl(), isMicro ? "pay" : "admin")) .trade_type(TradeType.JSAPI.getTradeType()) .openid(goodsOrder.getUserId()) .build() diff --git a/pigx-visual/pigx-pay-platform/src/main/java/com/pig4cloud/pigx/pay/handler/impl/YungouosMergePayOrderHandler.java b/pigx-visual/pigx-pay-platform/src/main/java/com/pig4cloud/pigx/pay/handler/impl/YungouosMergePayOrderHandler.java index 709aa30ac..1e51cca52 100644 --- a/pigx-visual/pigx-pay-platform/src/main/java/com/pig4cloud/pigx/pay/handler/impl/YungouosMergePayOrderHandler.java +++ b/pigx-visual/pigx-pay-platform/src/main/java/com/pig4cloud/pigx/pay/handler/impl/YungouosMergePayOrderHandler.java @@ -2,7 +2,7 @@ package com.pig4cloud.pigx.pay.handler.impl; import cn.hutool.core.util.NumberUtil; import cn.hutool.extra.servlet.JakartaServletUtil; -import cn.hutool.extra.servlet.ServletUtil; +import cn.hutool.extra.spring.SpringUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.pig4cloud.pigx.common.data.tenant.TenantContextHolder; import com.pig4cloud.pigx.pay.entity.PayChannel; @@ -15,12 +15,11 @@ import com.pig4cloud.pigx.pay.utils.ChannelPayApiConfigKit; import com.pig4cloud.pigx.pay.utils.OrderStatusEnum; import com.pig4cloud.pigx.pay.utils.PayChannelNameEnum; import com.yungouos.pay.merge.MergePay; +import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import jakarta.servlet.http.HttpServletRequest; - /** * @author lengleng * @date 2021/1/4 @@ -32,77 +31,84 @@ import jakarta.servlet.http.HttpServletRequest; @RequiredArgsConstructor public class YungouosMergePayOrderHandler extends AbstractPayOrderHandler { - private final PayTradeOrderMapper tradeOrderMapper; + private final PayTradeOrderMapper tradeOrderMapper; - private final PayGoodsOrderMapper goodsOrderMapper; + private final PayGoodsOrderMapper goodsOrderMapper; - private final PayChannelMapper channelMapper; + private final PayChannelMapper channelMapper; - private final HttpServletRequest request; + private final HttpServletRequest request; - /** - * 准备支付参数 - * @return - */ - @Override - public PayChannel preparePayParams() { - PayChannel channel = channelMapper.selectOne( - Wrappers.lambdaQuery().eq(PayChannel::getChannelId, PayChannelNameEnum.MERGE_PAY.name())); + /** + * 准备支付参数 + * + * @return + */ + @Override + public PayChannel preparePayParams() { + PayChannel channel = channelMapper.selectOne( + Wrappers.lambdaQuery().eq(PayChannel::getChannelId, PayChannelNameEnum.MERGE_PAY.name())); - if (channel == null) { - throw new IllegalArgumentException("聚合支付渠道配置为空"); - } + if (channel == null) { + throw new IllegalArgumentException("聚合支付渠道配置为空"); + } - return channel; - } + return channel; + } - /** - * 创建交易订单 - * @param goodsOrder 商品订单 - * @return - */ - @Override - public PayTradeOrder createTradeOrder(PayGoodsOrder goodsOrder) { - PayTradeOrder tradeOrder = new PayTradeOrder(); - tradeOrder.setOrderId(goodsOrder.getPayOrderId()); - tradeOrder.setAmount(goodsOrder.getAmount()); - tradeOrder.setChannelId(PayChannelNameEnum.MERGE_PAY.getName()); - tradeOrder.setChannelMchId(ChannelPayApiConfigKit.get().getChannelMchId()); - tradeOrder.setClientIp(JakartaServletUtil.getClientIP(request)); - tradeOrder.setCurrency("CNY"); - tradeOrder.setStatus(OrderStatusEnum.INIT.getStatus()); - tradeOrder.setBody(goodsOrder.getGoodsName()); - tradeOrderMapper.insert(tradeOrder); - return tradeOrder; - } + /** + * 创建交易订单 + * + * @param goodsOrder 商品订单 + * @return + */ + @Override + public PayTradeOrder createTradeOrder(PayGoodsOrder goodsOrder) { + PayTradeOrder tradeOrder = new PayTradeOrder(); + tradeOrder.setOrderId(goodsOrder.getPayOrderId()); + tradeOrder.setAmount(goodsOrder.getAmount()); + tradeOrder.setChannelId(PayChannelNameEnum.MERGE_PAY.getName()); + tradeOrder.setChannelMchId(ChannelPayApiConfigKit.get().getChannelMchId()); + tradeOrder.setClientIp(JakartaServletUtil.getClientIP(request)); + tradeOrder.setCurrency("CNY"); + tradeOrder.setStatus(OrderStatusEnum.INIT.getStatus()); + tradeOrder.setBody(goodsOrder.getGoodsName()); + tradeOrderMapper.insert(tradeOrder); + return tradeOrder; + } - /** - * 调起渠道支付 - * @param goodsOrder 商品订单 - * @param tradeOrder 交易订单 - * @return obj - */ - @Override - public Object pay(PayGoodsOrder goodsOrder, PayTradeOrder tradeOrder) { - PayChannel channel = ChannelPayApiConfigKit.get(); + /** + * 调起渠道支付 + * + * @param goodsOrder 商品订单 + * @param tradeOrder 交易订单 + * @return obj + */ + @Override + public Object pay(PayGoodsOrder goodsOrder, PayTradeOrder tradeOrder) { + PayChannel channel = ChannelPayApiConfigKit.get(); - String money = NumberUtil.div(tradeOrder.getAmount(), "100", 2).toString(); + String money = NumberUtil.div(tradeOrder.getAmount(), "100", 2).toString(); - return MergePay.nativePay(String.valueOf(tradeOrder.getOrderId()), money, channel.getChannelMchId(), - tradeOrder.getBody(), "1", TenantContextHolder.getTenantId().toString(), - ChannelPayApiConfigKit.get().getNotifyUrl() + "/admin/notify/merge/callbak", - ChannelPayApiConfigKit.get().getReturnUrl(), "", "", "", channel.getParam()); - } + // 判断是否是单体架构 + Boolean isMicro = SpringUtil.getProperty("security.micro", Boolean.class, true); - /** - * 更新订单信息 - * @param goodsOrder 商品订单 - * @param tradeOrder 交易订单 - */ - @Override - public void updateOrder(PayGoodsOrder goodsOrder, PayTradeOrder tradeOrder) { - tradeOrderMapper.updateById(tradeOrder); - goodsOrderMapper.updateById(goodsOrder); - } + return MergePay.nativePay(String.valueOf(tradeOrder.getOrderId()), money, channel.getChannelMchId(), + tradeOrder.getBody(), "1", TenantContextHolder.getTenantId().toString(), + String.format("%s/api/%s/notify/merge/callbak", ChannelPayApiConfigKit.get().getNotifyUrl(), isMicro ? "pay" : "admin"), + ChannelPayApiConfigKit.get().getReturnUrl(), "", "", "", channel.getParam()); + } + + /** + * 更新订单信息 + * + * @param goodsOrder 商品订单 + * @param tradeOrder 交易订单 + */ + @Override + public void updateOrder(PayGoodsOrder goodsOrder, PayTradeOrder tradeOrder) { + tradeOrderMapper.updateById(tradeOrder); + goodsOrderMapper.updateById(goodsOrder); + } } diff --git a/pigx-visual/pigx-pay-platform/src/main/java/com/pig4cloud/pigx/pay/service/impl/PayRefundOrderServiceImpl.java b/pigx-visual/pigx-pay-platform/src/main/java/com/pig4cloud/pigx/pay/service/impl/PayRefundOrderServiceImpl.java index 18459cf00..1b8fdabf8 100755 --- a/pigx-visual/pigx-pay-platform/src/main/java/com/pig4cloud/pigx/pay/service/impl/PayRefundOrderServiceImpl.java +++ b/pigx-visual/pigx-pay-platform/src/main/java/com/pig4cloud/pigx/pay/service/impl/PayRefundOrderServiceImpl.java @@ -17,11 +17,15 @@ package com.pig4cloud.pigx.pay.service.impl; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.pig4cloud.pigx.pay.entity.PayChannel; import com.pig4cloud.pigx.pay.entity.PayRefundOrder; import com.pig4cloud.pigx.pay.handler.PayOrderRefundHandler; +import com.pig4cloud.pigx.pay.mapper.PayChannelMapper; import com.pig4cloud.pigx.pay.mapper.PayRefundOrderMapper; import com.pig4cloud.pigx.pay.service.PayRefundOrderService; +import com.pig4cloud.pigx.pay.utils.PayChannelNameEnum; import com.pig4cloud.pigx.pay.utils.RefundNameEnum; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -37,26 +41,29 @@ import java.util.Map; @Service @RequiredArgsConstructor public class PayRefundOrderServiceImpl extends ServiceImpl - implements PayRefundOrderService { + implements PayRefundOrderService { - private final Map refundHandlerMap; + private final Map refundHandlerMap; - /** - * 退款操作 - * @param refundOrder refundOrder - * @return true/false - */ - @Override - public Boolean refund(PayRefundOrder refundOrder) { - String channelId = refundOrder.getChannelId(); - // 判断用哪个通道 - if (StrUtil.containsAnyIgnoreCase(channelId, "ali")) { - refundHandlerMap.get(RefundNameEnum.ALIPAY.getName()).handle(refundOrder); - } - else { - throw new UnsupportedOperationException(); - } - return null; - } + private final PayChannelMapper channelMapper; + + /** + * 退款操作 + * + * @param refundOrder refundOrder + * @return true/false + */ + @Override + public Boolean refund(PayRefundOrder refundOrder) { + PayChannel payChannel = channelMapper.selectOne(Wrappers.lambdaQuery().eq(PayChannel::getChannelMchId, refundOrder.getChannelMchId())); + + + // 判断用哪个通道 + if (StrUtil.equals(payChannel.getChannelId(), PayChannelNameEnum.ALIPAY_WAP.getName())) { + refundHandlerMap.get(RefundNameEnum.ALIPAY.getName()).handle(refundOrder); + } + + throw new UnsupportedOperationException("暂不支持该渠道退款"); + } }