liujie
2026-05-16 21835db89359dc5d4f89a406f006d79a473cbe9e
免密支付
3个文件已添加
4个文件已修改
226 ■■■■■ 已修改文件
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/order/XpOrder.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/model/dto/CreditPayCallDto.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/model/dto/CreditPaySuccessCallDto.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/model/vo/CreditPayCallVo.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/IXpOrderService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/order/XpOrder.java
@@ -282,4 +282,9 @@
    @ApiModelProperty(value = "信用下单接口获取的支付中心授权单号(商户订单号)")
    @TableField("auth_order_id")
    private String authOrderId;
    @ApiModelProperty(value = "信用下单接口获取的业务id")
    @TableField("business_order_id")
    private String businessOrderId;
}
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java
@@ -42,6 +42,8 @@
import com.xiaopeng.order.config.BluetoothDebugConfig;
import com.xiaopeng.order.dto.OrderNavigationDto;
import com.xiaopeng.api.model.order.OrderTrajectory;
import com.xiaopeng.order.model.dto.CreditPayCallDto;
import com.xiaopeng.order.model.dto.CreditPaySuccessCallDto;
import com.xiaopeng.order.model.dto.XpOrderCommentDto;
import com.xiaopeng.order.model.dto.XpOrderOperateDTO;
import com.xiaopeng.order.model.dto.XpOrderPayDto;
@@ -50,6 +52,7 @@
import com.xiaopeng.order.model.query.XpHistoryOrderListQuery;
import com.xiaopeng.order.model.query.XpOrderExcelQuery;
import com.xiaopeng.order.model.query.XpOrderPageQuery;
import com.xiaopeng.order.model.vo.CreditPayCallVo;
import com.xiaopeng.order.model.vo.XpOrderDetailVO;
import com.xiaopeng.order.model.vo.XpOrderHistoryVO;
import com.xiaopeng.order.model.vo.XpOrderPageVO;
@@ -930,4 +933,57 @@
    }
    /**
     * 信用支付下单回调
     */
    @PostMapping("/base/v1/mini-program/order/creditPayCall")
    @ApiOperation(value = "信用支付下单回调", tags = {"小程序-发起支付"}, response = CreditPayCallVo.class)
    public CreditPayCallVo creditPayCall(@RequestBody CreditPayCallDto dto) {
        CreditPayCallVo vo = new CreditPayCallVo();
        vo.setRetCode("0");
        vo.setRetMsg("成功");
        if (dto == null || (StringUtils.isBlank(dto.getAuthOrderId()) || StringUtils.isBlank(dto.getBusinessOrderId()))) {
            return vo;
        }
        LambdaQueryWrapper<XpOrder> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(XpOrder::getAuthOrderId, dto.getAuthOrderId());
        XpOrder order = xpOrderService.getOne(wrapper.last("LIMIT 1"));
        if (order == null) {
            return vo;
        }
        if ("SUCCESS".equals(dto.getCreditOrderStatus())) {
            // 发起扣款
            xpOrderService.creditPayCall(order);
        }
        return vo;
    }
    /**
     * 信用扣款回调
     */
    @PostMapping("/base/v1/mini-program/order/creditPaySuccessCall")
    @ApiOperation(value = "信用扣款回调", tags = {"小程序-发起支付"}, response = CreditPayCallVo.class)
    public CreditPayCallVo creditPaySuccessCall(@RequestBody CreditPaySuccessCallDto dto) {
        LambdaQueryWrapper<XpOrder> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(XpOrder::getAuthOrderId, dto.getAuthOrderId());
        XpOrder order = xpOrderService.getOne(wrapper.last("LIMIT 1"));
        if(dto.getPayStatus()==1){
            order.setStatus(9);
            order.setAppUserId(null);
            xpOrderService.updateById(order);
            CreditPayCallVo vo = new CreditPayCallVo();
            vo.setRetCode("0");
            vo.setRetMsg("成功");
            return vo;
        }
        return null;
    }
}
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/model/dto/CreditPayCallDto.java
New file
@@ -0,0 +1,22 @@
package com.xiaopeng.order.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "信用支付下单回调请求")
public class CreditPayCallDto {
    @ApiModelProperty(value = "业务方订单号")
    private String businessOrderId;
    @ApiModelProperty(value = "信用下单接口获取的支付中心授权单号")
    private String authOrderId;
    @ApiModelProperty(value = "微信支付分订单状态:SUCCESS=授权成功,CLOSED=订单关闭")
    private String creditOrderStatus;
    @ApiModelProperty(value = "支付类型")
    private String payType;
}
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/model/dto/CreditPaySuccessCallDto.java
New file
@@ -0,0 +1,93 @@
package com.xiaopeng.order.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
@ApiModel(value = "信用扣款回调请求")
public class CreditPaySuccessCallDto {
    @ApiModelProperty(value = "业务订单号")
    private String businessOrderId;
    @ApiModelProperty(value = "款项分类")
    private String category;
    @ApiModelProperty(value = "支付平台订单号")
    private String orderId;
    @ApiModelProperty(value = "支付类型:13=微信支付分")
    private Integer payType;
    @ApiModelProperty(value = "支付场景,APP支付:3,支付宝小程序:9,默认未知场景:99")
    private Integer payScene;
    @ApiModelProperty(value = "订单状态:0=未支付,1=支付成功,2=支付失败,3=订单关闭")
    private Integer payStatus;
    @ApiModelProperty(value = "订单金额,单位:分")
    private Long payFee;
    @ApiModelProperty(value = "订单标题")
    private String orderName;
    @ApiModelProperty(value = "用户ID")
    private Long userId;
    @ApiModelProperty(value = "订单创建时间")
    private Date createTime;
    @ApiModelProperty(value = "订单失效时间")
    private Date expireTime;
    @ApiModelProperty(value = "支付完成时间")
    private Date payFinishTime;
    @ApiModelProperty(value = "退款完成时间")
    private Date refundFinishTime;
    @ApiModelProperty(value = "业务扩展数据")
    private String extData;
    @ApiModelProperty(value = "备注1")
    private String remark1;
    @ApiModelProperty(value = "POS渠道")
    private String posChannel;
    @ApiModelProperty(value = "渠道商户号")
    private String channelAccountId;
    @ApiModelProperty(value = "信用单号")
    private String authOrderId;
    @ApiModelProperty(value = "信用单请求渠道单号")
    private String authOperationId;
    @ApiModelProperty(value = "渠道订单号")
    private String channelOrderId;
    @ApiModelProperty(value = "交易发起时间")
    private String initiateTime;
    @ApiModelProperty(value = "交易日期:yyyyMMdd")
    private String txDate;
    @ApiModelProperty(value = "交易时刻:HHmmss")
    private String txTime;
    @ApiModelProperty(value = "支付宝PID")
    private String pid;
    @ApiModelProperty(value = "实收金额,单位:分")
    private Long receivedAmount;
    @ApiModelProperty(value = "支付交易号")
    private String transactionId;
    @ApiModelProperty(value = "优惠说明")
    private String thirdPartyDiscountInstruction;
}
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/model/vo/CreditPayCallVo.java
New file
@@ -0,0 +1,16 @@
package com.xiaopeng.order.model.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "信用支付下单回调响应")
public class CreditPayCallVo {
    @ApiModelProperty(value = "响应码:0-成功")
    private String retCode;
    @ApiModelProperty(value = "响应描述")
    private String retMsg;
}
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/IXpOrderService.java
@@ -310,4 +310,11 @@
     */
    OrderStatusFromOrderIdVo queryOrderStatusFromOrderId(Long orderId);
    /**
     * 订单支付成功后的回调
     * @param order
     */
    void creditPayCall(XpOrder order);
}
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -3353,9 +3353,10 @@
            creditOrderCreateDto.setUid(Long.valueOf(uid));
            creditOrderCreateDto.setBusinessId("xp-robotaxi");
            creditOrderCreateDto.setCategory("009001");
            creditOrderCreateDto.setBusinessOrderId("");
            creditOrderCreateDto.setBusinessOrderId(OrderCodeUtil.getOrderCode("MMZF"));
            creditOrderCreateDto.setSubject("小鹏集团|robotaxi");
            creditOrderCreateDto.setPayType("13");
            creditOrderCreateDto.setPayCallbackUrl("");
            // 信用下单
@@ -3373,6 +3374,7 @@
                order.setPayType(3);
                order.setAuthOrderId(data.getAuthOrderId());
                order.setBusinessOrderId(creditOrderCreateDto.getBusinessOrderId());
                return R.ok(resultMap);
            }
@@ -4760,6 +4762,29 @@
        return orderStatusFromOrderIdVo;
    }
    @Override
    public void creditPayCall(XpOrder order) {
        CreditOrderWxPayDto dto = new CreditOrderWxPayDto();
        dto.setBusinessId("xp-robotaxi");
        dto.setBusinessOrderId(order.getBusinessOrderId());
        dto.setAuthOrderId(order.getAuthOrderId());
        dto.setCategory("009001");
        dto.setPayCallbackUrl("");
        dto.setTotalAmount(order.getOrderMoney().multiply(BigDecimal.valueOf(100)).longValue());
        dto.setSubject("小鹏集团|robotaxi");
        dto.setPayType("13");
        List<CreditOrderCreateDto.PostPayment> postPayments = new ArrayList<>();
        CreditOrderCreateDto.PostPayment postPayment = new CreditOrderCreateDto.PostPayment();
        postPayment.setName("收费标准");
        postPayment.setDescription("行程价格动态浮动,具体详情可在费用详情或计价规则查看");
        dto.setPostPayments(postPayments);
        R<CreditOrderWxPayVo> creditOrderWxPayVoR = xpPayFrontClient.creditOrderWxPay(dto);
    }
    /**
     * 发票列表