zhanglin
2023-07-23 a7359ca2d8337b0796e36f3a3722790647bd7c62
微信支付,支付与结果通知
5个文件已修改
90 ■■■■■ 已修改文件
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/NotifyController.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/account/OrderPayment.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/tools/request/ecommerce/profitsharing/ProfitSharingAddReceiverRequest.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/NotifyController.java
@@ -118,8 +118,7 @@
        String tradeStateEnum=transaction.getTradeState().toString();
        if(tradeStateEnum.equals("success")){
            String outTradeNo=transaction.getOutTradeNo();
            orderService.payBack(outTradeNo);
            orderService.payBack(transaction);
        }
        Map map=new HashMap();
@@ -129,4 +128,11 @@
        return map;
    }
    @RequestMapping(value = "/shareNotify", method = RequestMethod.POST)
    @ApiOperation(value = "微信支付通知")
    public Map shareNotify(HttpServletRequest request, HttpServletResponse response) {
        return null;
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/account/OrderPayment.java
@@ -104,6 +104,8 @@
    @TableField("back_time")
    private Date backTime;
    @TableField("transaction_id")
    private String transactionId;
    @Override
    protected Serializable pkVal() {
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -13,6 +13,7 @@
import com.ruoyi.common.security.utils.CodeFactoryUtil;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.order.domain.dto.*;
import com.ruoyi.order.domain.pojo.account.OrderPayment;
import com.ruoyi.order.domain.pojo.account.OrderRefund;
import com.ruoyi.order.domain.pojo.account.PaymentMessage;
import com.ruoyi.order.domain.pojo.order.ConsumerGoods;
@@ -25,6 +26,7 @@
import com.ruoyi.order.service.order.OrderGoodsService;
import com.ruoyi.order.service.order.OrderService;
import com.ruoyi.order.service.order.UserServiceRecordService;
import com.ruoyi.order.tools.request.ecommerce.profitsharing.ProfitSharingApplyRequest;
import com.ruoyi.order.tools.request.pay.combine.CombineTransactionsJsRequest;
import com.ruoyi.order.tools.service.ProfitsSharingService;
import com.ruoyi.system.api.constant.AppErrorConstant;
@@ -42,6 +44,7 @@
import com.ruoyi.system.api.domain.poji.sys.SysUser;
import com.ruoyi.system.api.domain.vo.*;
import com.ruoyi.system.api.service.*;
import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction;
import com.wechat.pay.java.service.payments.jsapi.JsapiServiceExtension;
import com.wechat.pay.java.service.payments.jsapi.model.*;
import org.redisson.api.RLock;
@@ -712,6 +715,13 @@
        request.setPayer(payer);
        //设置订单允许分账 秒杀活动才允许分账
       /* if(order.getOrderFrom()==2){
            SettleInfo settleInfo=new SettleInfo();
            settleInfo.setProfitSharing(true);
            request.setSettleInfo(settleInfo);
        }*/
        //返回前端唤醒支付结果信息
        PrepayWithRequestPaymentResponse res = this.getJsApIResponse(request);
@@ -1035,6 +1045,40 @@
        agStockChangeDto.setUserId(order.getUserId());
        remoteActivityService.changeActivityStock(agStockChangeDto);
        // 调用支付
        PrepayRequest request = new PrepayRequest();
        Amount amount = new Amount();
        amount.setTotal(Integer.parseInt(order.getPayMoney().multiply(new BigDecimal(100)).toString()));
        request.setAmount(amount);
        request.setAppid(this.appId);
        request.setMchid(this.mchId);
        request.setDescription(order.getGoodsInfo());
        request.setNotifyUrl(this.notifyUrl);
        request.setOutTradeNo(order.getOrderId());
        Payer payer = new Payer();
        // TODO 获取openID
        payer.setOpenid("oLTPCuN5a-nBD4rAL_fa********");
        request.setPayer(payer);
        //设置订单允许分账 秒杀活动才允许分账
        if(order.getOrderFrom()==2){
            SettleInfo settleInfo=new SettleInfo();
            settleInfo.setProfitSharing(true);
            request.setSettleInfo(settleInfo);
        }
        //返回前端唤醒支付结果信息
        PrepayWithRequestPaymentResponse res = this.getJsApIResponse(request);
        appPlaceOrderVo.setAppId(this.appId);
        appPlaceOrderVo.setTimeStamp(res.getTimeStamp());
        appPlaceOrderVo.setNonceStr(res.getNonceStr());
        appPlaceOrderVo.setPackageStr(res.getPackageVal());
        appPlaceOrderVo.setTradeType(res.getSignType());
        appPlaceOrderVo.setPaySign(res.getPaySign());
        //生成自动取消订单延时任务
        Integer delayTime = 30;
        if(redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)){
@@ -1303,7 +1347,13 @@
        SysUser sysUser = remoteUserService.getSysUser(order.getUserId()).getData();
        merVerifyOrderVo.setUserName(sysUser.getNickName());
        merVerifyOrderVo.setUserMobile(sysUser.getPhonenumber());
        //
        if(order.getOrderFrom()==2){
            //profitsSharingService.applyProfitSharing();
        }
        return merVerifyOrderVo;
    }
    /**
@@ -3205,12 +3255,13 @@
     * @description  订单支付回调
     * @author  jqs
     * @date    2023/7/13 17:57
     * @param orderId
     * @param Transaction
     * @return  void
     */
    @Override
    public void payBack(String orderId) {
    public void payBack(Transaction transaction) {
        // 更新订单状态
        String orderId=transaction.getOutTradeNo();
        Order order = this.getById(orderId);
        order.setOrderStatus(2);
        order.setPayTime(new Date());
@@ -3304,7 +3355,22 @@
            }
            activityTotalChangeDto.setUserId(order.getUserId());
            remoteActivityService.changeActivityTotal(activityTotalChangeDto);
            //活动订单进行分账
            ProfitSharingApplyRequest request=new ProfitSharingApplyRequest();
            request.setAppid(this.appId);
            request.setSubMchid("");
            request.setTransactionId(transaction.getTransactionId());
            profitsSharingService.applyProfitSharing(request);
        }
        //生成支付记录
        OrderPayment orderPayment = new OrderPayment();
    }
    /**
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java
@@ -10,6 +10,7 @@
import com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo;
import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo;
import com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo;
import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction;
import java.math.BigDecimal;
import java.util.List;
@@ -412,10 +413,10 @@
     * @description  订单支付回调
     * @author  jqs
     * @date    2023/7/13 17:57
     * @param orderId
     * @param Transaction transaction
     * @return  void
     */
    void payBack(String orderId);
    void payBack(Transaction transaction);
    /**
     * 取消订单
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/tools/request/ecommerce/profitsharing/ProfitSharingAddReceiverRequest.java
@@ -7,7 +7,8 @@
/**
 * <pre>
 * 1. 电商平台可通过此接口添加分账接收方,建立分账接收方列表。后续通过发起分账请求,将电商平台下的二级商户结算后的资金,分给分账接收方列表中具体的分账接收方。 2. 添加的分账接收方统一都在电商平台维度进行管理,其他二级商户,均可向该分账接收方列表中的接收方进行分账,避免在二级商户维度重复维护。
 * 1. 电商平台可通过此接口添加分账接收方,建立分账接收方列表。后续通过发起分账请求,将电商平台下的二级商户结算后的资金,分给分账接收方列表中具体的分账接收方。
 * 2. 添加的分账接收方统一都在电商平台维度进行管理,其他二级商户,均可向该分账接收方列表中的接收方进行分账,避免在二级商户维度重复维护。
 * 文档地址:https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/ecommerce/profitsharing/chapter3_7.shtml
 * </pre>
 */