zhibing.pu
2024-08-13 00ee134d5bcb07e9a07633963e68ba7e9fa215c2
优化支付
8个文件已修改
133 ■■■■ 已修改文件
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java 61 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PayMoneyUtil.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushMinistryOfTransportUtil.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/model/PaymentRecord.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/IPaymentRecordService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/PaymentRecordServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
@@ -310,13 +310,14 @@
                orderMoney = v;
            }
        }
        String code = orderId + "_3_fei";
        if(payType == 1){//微信支付
            if(ToolUtil.isEmpty(userInfo.getAppletsOpenId())){
                return ResultUtil.error("未授权微信,无法完成支付");
            }
            resultUtil = payMoneyUtil.weixinpay("完成订单",orderId +"",orderId + "_3_fei",orderMoney+"","/base/wxPayOrderTaxi","JSAPI",userInfo.getAppletsOpenId());
            resultUtil = payMoneyUtil.weixinpay("完成订单",orderId +"", code,orderMoney+"","/base/wxPayOrderTaxi","JSAPI",userInfo.getAppletsOpenId());
            if(resultUtil.getCode()==200){
                paymentRecordService.saveData(1, null, null, orderId, 3, 1, orderMoney, null, 1);//添加预支付数据
                paymentRecordService.saveData(1, null, null, orderId, 3, 1, orderMoney, null, 1, code);//添加预支付数据
                resultUtil = resultUtil;
            }else{
                resultUtil = ResultUtil.error("获取支付信息失败", "");
@@ -325,7 +326,7 @@
        if(payType == 2){//支付宝支付
            resultUtil = payMoneyUtil.alipay("完成订单","完成订单", "",orderId + ",3" ,orderMoney+"","/base/aliPayOrderTaxi");
            if(resultUtil.getCode()==200){
                paymentRecordService.saveData(1, null, null, orderId, 3, 2, orderMoney, null, 1);//添加预支付数据
                paymentRecordService.saveData(1, null, null, orderId, 3, 2, orderMoney, null, 1, code);//添加预支付数据
                resultUtil = resultUtil;
            }else{
                resultUtil = ResultUtil.error("获取支付信息失败", "");
@@ -772,15 +773,16 @@
        }
        CancleOrder query = cancleOrderService.query(1, 3, orderCrossCity.getCompanyId());
        if(null != query){
            String code = id + "_3_fei";
            if(payType == 1){//微信支付
                if(ToolUtil.isEmpty(userInfo.getAppletsOpenId())){
                    return ResultUtil.error("未授权微信,无法完成支付");
                }
                orderCancel.setPayType(1);
                orderCancelService.updateById(orderCancel);
                resultUtil = payMoneyUtil.weixinpay("订单取消",id +"",id + "_3_fei",query.getMoney()+"","/base/wxCancelOrderTaxi","JSAPI",userInfo.getAppletsOpenId());
                resultUtil = payMoneyUtil.weixinpay("订单取消",id +"", code,query.getMoney()+"","/base/wxCancelOrderTaxi","JSAPI",userInfo.getAppletsOpenId());
                if(resultUtil.getCode()==200){
                    paymentRecordService.saveData(1, null, null, id, 3, 1, query.getMoney(), null, 1);//添加预支付数据
                    paymentRecordService.saveData(1, null, null, id, 3, 1, query.getMoney(), null, 1, code);//添加预支付数据
                    resultUtil = resultUtil;
                }else{
                    resultUtil = ResultUtil.error("获取支付信息失败", "");
@@ -791,7 +793,7 @@
                orderCancelService.updateById(orderCancel);
                resultUtil = payMoneyUtil.alipay("订单取消","订单取消", "",id + ",3",query.getMoney()+"","/base/aliCancelOrderTaxi");
                if(resultUtil.getCode()==200){
                    paymentRecordService.saveData(1, null, null, id, 3, 2, query.getMoney(), null, 1);//添加预支付数据
                    paymentRecordService.saveData(1, null, null, id, 3, 2, query.getMoney(), null, 1, code);//添加预支付数据
                    resultUtil = resultUtil;
                }else{
                    resultUtil = ResultUtil.error("获取支付信息失败", "");
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -646,16 +646,16 @@
        CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, orderPrivateCar.getCompanyId());
        if(null != query){
            String code = id + "_1_" + UUIDUtil.getRandomCode(3);
            if(payType == 1){//微信支付
                if(ToolUtil.isEmpty(userInfo.getAppletsOpenId())){
                    return ResultUtil.error("未授权微信,无法完成支付");
                }
                String code = id + "_1_" + UUIDUtil.getRandomCode(3);
                orderCancel.setPayType(1);
                orderCancelService.updateById(orderCancel);
                resultUtil =  payMoneyUtil.weixinpay("订单取消",id +"",code,query.getMoney()+"","/base/wxCancelOrderTaxi","JSAPI",userInfo.getAppletsOpenId());
                if(resultUtil.getCode()==200){
                    paymentRecordService.saveData(1, null, null, id, 1, 1, query.getMoney(), null, 1);//添加预支付数据
                    paymentRecordService.saveData(1, null, null, id, 1, 1, query.getMoney(), null, 1, code);//添加预支付数据
                    new Thread(()->{
                        int num = 1;
                        int min = 5000;
@@ -710,9 +710,9 @@
            if(payType == 2){//支付宝支付
                orderCancel.setPayType(2);
                orderCancelService.updateById(orderCancel);
                resultUtil =  payMoneyUtil.alipay("订单取消","订单取消", "",id + "_1_" + UUIDUtil.getRandomCode(3),query.getMoney()+"","/base/aliCancelOrderTaxi");
                resultUtil =  payMoneyUtil.alipay("订单取消","订单取消", "",code,query.getMoney()+"","/base/aliCancelOrderTaxi");
                if(resultUtil.getCode()==200){
                    paymentRecordService.saveData(1, null, null, id, 1, 2, query.getMoney(), null, 1);//添加预支付数据
                    paymentRecordService.saveData(1, null, null, id, 1, 2, query.getMoney(), null, 1, code);//添加预支付数据
                    resultUtil = resultUtil;
                }else{
                    resultUtil = ResultUtil.error("支付失败", "");
@@ -911,6 +911,9 @@
        list.addAll(list1);
        return list;
    }
    @Override
    public ResultUtil payPrivateCarOrder(Integer payType, Integer orderId, Integer couponId, Integer type) throws Exception {
@@ -921,6 +924,39 @@
        if(orderPrivateCar.getState() != 7){
            return ResultUtil.error("订单不在待支付状态,不允许支付", "");
        }
        String code = orderId + "_1_" + UUIDUtil.getRandomCode(5);
        PaymentRecord query3 = paymentRecordService.query(1, null, null, orderId, 1, payType, null);
        if(null != query3){
            ResultUtil<Map<String, Object>> resultUtil1 = payMoneyUtil.queryWXOrder("", query3.getSerialNumber(), "JSAPI");
            if (resultUtil1.getCode() == 200) {
                /**
                 * SUCCESS--支付成功
                 * REFUND--转入退款
                 * NOTPAY--未支付
                 * CLOSED--已关闭
                 * REVOKED--已撤销(刷卡支付)
                 * USERPAYING--用户支付中
                 * PAYERROR--支付失败(其他原因,如银行返回失败)
                 * ACCEPT--已接收,等待扣款
                 */
                String result_code = resultUtil1.getData().get("result_code").toString();
                if("SUCCESS".equals(result_code)){
                    String s = resultUtil1.getData().get("trade_state").toString();
                    if ("REFUND".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s)) {
                        payMoneyUtil.closeWXOrder(query3.getSerialNumber());
                    }
                    if ("SUCCESS".equals(s) || "ACCEPT".equals(s)) {
                        return ResultUtil.error("不允许重复支付");
                    }
                    if ("NOTPAY".equals(s) || "USERPAYING".equals(s)) {
                        payMoneyUtil.closeWXOrder(query3.getSerialNumber());
                    }
                }
            }
        }
        Integer uid = orderPrivateCar.getUserId();
        Double orderMoney = orderPrivateCar.getOrderMoney();
        UserInfo userInfo = userInfoService.selectById(uid);
@@ -980,10 +1016,9 @@
            return ResultUtil.error("未授权微信,无法完成支付");
        }
        if(payType == 1){//微信支付
            String code = orderId + "_1_" + UUIDUtil.getRandomCode(3);
            resultUtil =  payMoneyUtil.weixinpay("完成订单",orderId +"",code,orderMoney+"","/base/wxPayOrderTaxi","JSAPI",userInfo.getAppletsOpenId());
            resultUtil = payMoneyUtil.weixinpay("完成订单",orderId +"", code,orderMoney+"","/base/wxPayOrderTaxi","JSAPI",userInfo.getAppletsOpenId());
            if(resultUtil.getCode()==200){
                paymentRecordService.saveData(1, null, null, orderId, 1, 1, orderMoney, null, 1);//添加预支付数据
                paymentRecordService.saveData(1, null, null, orderId, 1, 1, orderMoney, null, 1, code);//添加预支付数据
                new Thread(()->{
                    int num = 1;
                    int min = 5000;
@@ -995,8 +1030,8 @@
                            if (orderPrivateCar1.getState() != 7) {
                                break;
                            }
                            ResultUtil<Map<String, Object>> resultUtil1 = payMoneyUtil.queryWXOrder("", code, "JSAPI");
                            if (resultUtil1.getCode() == 200) {
                            ResultUtil<Map<String, Object>> resultUtil2 = payMoneyUtil.queryWXOrder("", code, "JSAPI");
                            if (resultUtil2.getCode() == 200) {
                                /**
                                 * SUCCESS--支付成功
                                 * REFUND--转入退款
@@ -1007,12 +1042,12 @@
                                 * PAYERROR--支付失败(其他原因,如银行返回失败)
                                 * ACCEPT--已接收,等待扣款
                                 */
                                String s = resultUtil1.getData().get("trade_state").toString();
                                String s = resultUtil2.getData().get("trade_state").toString();
                                if ("REFUND".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10) {
                                    break;
                                }
                                if ("SUCCESS".equals(s) || "ACCEPT".equals(s)) {
                                    String transaction_id = resultUtil1.getData().get("transaction_id").toString();
                                    String transaction_id = resultUtil2.getData().get("transaction_id").toString();
                                    payOrderPrivateCarCallback(orderId, transaction_id, 1);
                                    break;
                                }
@@ -1035,9 +1070,9 @@
        }
        if(payType == 2) {//支付宝支付
            resultUtil =  payMoneyUtil.alipay("完成订单","完成订单", "",orderId + "_1_" + UUIDUtil.getRandomCode(3),orderMoney+"","/base/aliPayOrderTaxi");
            resultUtil =  payMoneyUtil.alipay("完成订单","完成订单", "",code,orderMoney+"","/base/aliPayOrderTaxi");
            if (resultUtil.getCode()==200) {
                paymentRecordService.saveData(1, null, null, orderId, 1, 2, orderMoney, null, 1);//添加预支付数据
                paymentRecordService.saveData(1, null, null, orderId, 1, 2, orderMoney, null, 1, code);//添加预支付数据
            } else {
                resultUtil = ResultUtil.error("支付失败", "");
            }
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java
@@ -786,8 +786,8 @@
            if(ToolUtil.isEmpty(userInfo.getAppletsOpenId())){
                return ResultUtil.error("未授权微信,无法完成支付");
            }
            Integer integer = paymentRecordService.saveData(2, uid, 1, null, null, 1, money, "", 1);//添加预支付数据
            ResultUtil resultUtil = payMoneyUtil.weixinpay("余额充值",integer.toString(),integer.toString(),money+"","/base/wxCancelUserBalance","JSAPI",userInfo.getAppletsOpenId());
            Integer integer = paymentRecordService.saveData(2, uid, 1, null, null, 1, money, "", 1, "");//添加预支付数据
            ResultUtil resultUtil = payMoneyUtil.weixinpay("余额充值", integer.toString(), integer.toString(),money+"","/base/wxCancelUserBalance","JSAPI",userInfo.getAppletsOpenId());
            if(resultUtil.getCode()==200){
                PaymentRecord paymentRecord = paymentRecordService.selectById(integer);
                paymentRecordService.updateById(paymentRecord);
@@ -797,7 +797,7 @@
            }
        }
        if(payType == 2){//支付宝支付
            Integer integer = paymentRecordService.saveData(2, uid, 1, null, null, 2, money, "", 1);//添加预支付数据
            Integer integer = paymentRecordService.saveData(2, uid, 1, null, null, 2, money, "", 1, "");//添加预支付数据
            ResultUtil resultUtil = payMoneyUtil.alipay("余额充值","余额充值", "",integer.toString(),money+"","/base/aliCancelUserBalance");
            if(resultUtil.getCode()==200){
                PaymentRecord paymentRecord = paymentRecordService.selectById(integer);
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PayMoneyUtil.java
@@ -11,6 +11,10 @@
import com.alipay.api.internal.util.AlipaySignature;
import com.alipay.api.request.*;
import com.alipay.api.response.*;
import com.wechat.pay.java.core.Config;
import com.wechat.pay.java.core.RSAAutoCertificateConfig;
import com.wechat.pay.java.service.payments.jsapi.JsapiService;
import com.wechat.pay.java.service.payments.jsapi.model.CloseOrderRequest;
import org.apache.commons.collections.map.HashedMap;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.dom4j.Document;
@@ -849,7 +853,31 @@
            return ResultUtil.error(map1.get("return_msg"), new JSONObject());
        }
    }
    /**
     * 微信关闭订单
     * @param out_trade_no
     */
    public void closeWXOrder(String out_trade_no) {
        // 使用自动更新平台证书的RSA配置
        // 一个商户号只能初始化一个配置,否则会因为重复的下载任务报错
        Config config = new RSAAutoCertificateConfig.Builder()
                    .merchantId(mchId)
                    .privateKeyFromPath("D:\\app\\cert\\weixin\\1602881362\\apiclient_key.pem")
                    .merchantSerialNumber("7D555A6E50E9205504024685DF6B821319C4DD70")
                    .apiV3Key("MIIEvQIBADANBgkqhkiG9w0BAQEFAASC")
                    .build();
        // 构建service
        JsapiService service = new JsapiService.Builder().config(config).build();
        CloseOrderRequest closeRequest = new CloseOrderRequest();
        closeRequest.setMchid(mchId);
        closeRequest.setOutTradeNo(out_trade_no);
        // 方法没有返回值,意味着成功时API返回204 No Content
        service.closeOrder(closeRequest);
    }
    /**
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushMinistryOfTransportUtil.java
@@ -157,7 +157,7 @@
        Map<String, Object> query = systemPriceMapper.query(orderPrivateCar.getCompanyId(), 1, orderPrivateCar.getServerCarModelId());
        Car car = carMapper.selectById(orderPrivateCar.getCarId());
        ServerCarModel serverCarModel = serverCarModelMapper.selectById(orderPrivateCar.getServerCarModelId());
        TransactionDetails transactionDetails = transactionDetailsService.selectById(new EntityWrapper<TransactionDetails>().eq("orderType", 1).eq("orderId", orderId));
        TransactionDetails transactionDetails = transactionDetailsService.selectOne(new EntityWrapper<TransactionDetails>().eq("orderType", 1).eq("orderId", orderId));
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("OrderId", orderPrivateCar.getOrderNum());//订单号
        jsonObject.put("OnArea", 530602);//上车位置行政区划代码
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/model/PaymentRecord.java
@@ -68,6 +68,11 @@
     */
    @TableField("insertTime")
    private Date insertTime;
    /**
     * 支付流水号
     */
    @TableField("serialNumber")
    private String serialNumber;
    public Integer getId() {
        return id;
@@ -156,7 +161,15 @@
    public void setInsertTime(Date insertTime) {
        this.insertTime = insertTime;
    }
    public String getSerialNumber() {
        return serialNumber;
    }
    public void setSerialNumber(String serialNumber) {
        this.serialNumber = serialNumber;
    }
    @Override
    public String toString() {
        return "PaymentRecord{" +
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/IPaymentRecordService.java
@@ -17,7 +17,7 @@
     * @throws Exception
     */
    Integer saveData(Integer category, Integer userId, Integer type, Integer orderId, Integer orderType, Integer payType,
                  Double amount, String code, Integer state) throws Exception;
                  Double amount, String code, Integer state, String serialNumber) throws Exception;
    /**
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/PaymentRecordServiceImpl.java
@@ -30,7 +30,7 @@
     */
    @Override
    public Integer saveData(Integer category, Integer userId, Integer type, Integer orderId, Integer orderType, Integer payType,
                         Double amount, String code, Integer state) throws Exception {
                         Double amount, String code, Integer state, String serialNumber) throws Exception {
        //先删除现有数据避免重复
        PaymentRecord query = paymentRecordMapper.query(category, userId, type, orderId, orderType, payType, state);
        if(null != query){
@@ -47,6 +47,7 @@
        paymentRecord.setCode(code);
        paymentRecord.setState(state);
        paymentRecord.setInsertTime(new Date());
        paymentRecord.setSerialNumber(serialNumber);
        this.insert(paymentRecord);
        return paymentRecord.getId();
    }