Преглед на файлове

fix:"优化汇聚商户入网接口"

soobin преди 3 месеца
родител
ревизия
06fa0e84b2

+ 30 - 0
src/main/java/com/szwl/constant/JoinpayConstant.java

@@ -173,6 +173,36 @@ public class JoinpayConstant {
     }
 
     /**
+     * 认证状态
+     */
+    public static final Map<String, String> AUTH_STATUS = new HashMap<>();
+    public static final String AUTH_STATUS_R4001 = "R4001";
+    public static final String AUTH_STATUS_R4002 = "R4002";
+    public static final String AUTH_STATUS_R4003 = "R4003";
+    public static final String AUTH_STATUS_R4004 = "R4004";
+
+    static {
+        AUTH_STATUS.put(AUTH_STATUS_R4001, "未认证");
+        AUTH_STATUS.put(AUTH_STATUS_R4002, "认证中");
+        AUTH_STATUS.put(AUTH_STATUS_R4003, "认证失败");
+        AUTH_STATUS.put(AUTH_STATUS_R4004, "认证成功");
+    }
+
+    /**
+     * 审批状态
+     */
+    public static final Map<String, String> APPROVE_STATUS = new HashMap<>();
+    public static final String APPROVE_STATUS_P1000 = "P1000";
+    public static final String APPROVE_STATUS_P0001 = "P0001";
+    public static final String APPROVE_STATUS_P2000 = "P2000";
+
+    static {
+        APPROVE_STATUS.put(APPROVE_STATUS_P1000, "审批通过");
+        APPROVE_STATUS.put(APPROVE_STATUS_P0001, "未审批");
+        APPROVE_STATUS.put(APPROVE_STATUS_P2000, "审批未通过");
+    }
+
+    /**
      * 业务响应码
      */
     public static final Map<String, String> biz_code = new HashMap<>();

+ 55 - 18
src/main/java/com/szwl/controller/CallbackController.java

@@ -3,12 +3,16 @@ package com.szwl.controller;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.JsonNodeFactory;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.szwl.constant.HuifuConstant;
 import com.szwl.constant.JoinpayConstant;
+import com.szwl.model.entity.TJoinpayMch;
 import com.szwl.model.entity.WithdrawalRecord;
 import com.szwl.model.utils.RSAUtil;
+import com.szwl.service.TJoinpayMchService;
 import com.szwl.service.WithdrawalRecordService;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -35,28 +39,34 @@ public class CallbackController {
     @Autowired
     private WithdrawalRecordService withdrawalRecordService;
 
+    @Autowired
+    private TJoinpayMchService joinpayMchService;
+
     @ApiOperation("汇聚提现回调")
     @PostMapping("/withdrawJoinPay")
     public Object withdrawJoinPay(@RequestBody Map<String, Object> rawData) {
-        log.info("汇聚提现回调,参数,rawData={}", rawData);
-        String respCode = (String) rawData.get("resp_code");
-        Map<String, Object> data = (Map<String, Object>) rawData.get("data");
+        try{
+            String respCode = (String) rawData.get("resp_code");
+            Map<String, Object> data = (Map<String, Object>) rawData.get("data");
 
-        // 交易状态
-        String orderStatus = (String)data.get("order_status");
-        // 分账方编号
-        String mchOrderNo = (String)data.get("mch_order_no");
-        LambdaQueryWrapper<WithdrawalRecord> query = Wrappers.lambdaQuery();
-        query.eq(WithdrawalRecord::getOrderNo, mchOrderNo);
-        WithdrawalRecord withdrawalRecord = withdrawalRecordService.getOne(query);
-        withdrawalRecord.setStatus(2);
-        if (JoinpayConstant.order_status2.equals(orderStatus)) {
-            withdrawalRecord.setArrivalDate(new Date());
-            withdrawalRecord.setStatus(1);
+            // 交易状态
+            String orderStatus = (String)data.get("order_status");
+            // 分账方编号
+            String mchOrderNo = (String)data.get("mch_order_no");
+            LambdaQueryWrapper<WithdrawalRecord> query = Wrappers.lambdaQuery();
+            query.eq(WithdrawalRecord::getOrderNo, mchOrderNo);
+            WithdrawalRecord withdrawalRecord = withdrawalRecordService.getOne(query);
+            withdrawalRecord.setStatus(2);
+            if (JoinpayConstant.order_status2.equals(orderStatus)) {
+                withdrawalRecord.setArrivalDate(new Date());
+                withdrawalRecord.setStatus(1);
+            }
+            String bizMsg = (String)data.get("biz_msg");
+            withdrawalRecord.setResultMsg(bizMsg);
+            withdrawalRecordService.updateById(withdrawalRecord);
+        } catch (Exception e) {
+            log.error("汇聚商户入网回调异常,参数,rawData={}", rawData, e);
         }
-        String bizMsg = (String)data.get("biz_msg");
-        withdrawalRecord.setResultMsg(bizMsg);
-        withdrawalRecordService.updateById(withdrawalRecord);
 
         ObjectNode jsonNodes = JsonNodeFactory.instance.objectNode();
         jsonNodes.put("resp_code", "A1000");
@@ -114,7 +124,34 @@ public class CallbackController {
     @ApiOperation("汇聚商户入网回调")
     @PostMapping("/joinPayMerchant")
     public Object joinPayMerchant(@RequestBody Map<String, Object> rawData) {
-        return "";
+        try {
+            String respCode = (String) rawData.get("resp_code");
+            ObjectMapper mapper = new ObjectMapper();
+            if (JoinpayConstant.resp_code1.equals(respCode)) {
+                String dataStr = (String) rawData.get("data");
+                Map<String, Object> data = mapper.readValue(dataStr, new TypeReference<Map<String, Object>>() {});
+                String authStatus = (String) data.get("auth_status");
+                String altMchNo = (String) data.get("alt_mch_no");
+                LambdaQueryWrapper<TJoinpayMch> query = Wrappers.lambdaQuery();
+                query.eq(TJoinpayMch::getAltMchNo, altMchNo);
+                TJoinpayMch joinpayMch = joinpayMchService.getOne(query);
+                if (JoinpayConstant.AUTH_STATUS_R4004.equals(authStatus)) {
+                    // 认证成功
+                    joinpayMch.setStatus("1");
+                } else {
+                    // 认证失败
+                    joinpayMch.setStatus("2");
+                    joinpayMch.setBizMsg((String) data.get("biz_msg"));
+                }
+                joinpayMchService.updateById(joinpayMch);
+            }
+        } catch (Exception e) {
+            log.error("汇聚商户入网回调异常,参数,rawData={}", rawData, e);
+        }
+        ObjectNode jsonNodes = JsonNodeFactory.instance.objectNode();
+        jsonNodes.put("resp_code", "A1000");
+        jsonNodes.put("resp_msg", "success");
+        return jsonNodes;
     }
 
 }

+ 88 - 35
src/main/java/com/szwl/controller/TJoinpayMchController.java

@@ -1,6 +1,8 @@
 package com.szwl.controller;
 
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.bean.copier.CopyOptions;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.szwl.constant.JoinpayConstant;
@@ -29,8 +31,8 @@ import org.springframework.web.bind.annotation.*;
 import java.util.Date;
 import java.util.List;
 import java.util.Optional;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+
+import static com.szwl.constant.ResponseCodesEnum.B0001;
 
 /**
  * <p>
@@ -214,28 +216,6 @@ public class TJoinpayMchController {
         return R.ok();
     }
 
-    @ApiOperation("上传照片审核")
-    @PostMapping("/uploadPhotos")
-    public ResponseModel<?> uploadPhotos(@RequestBody TJoinpayMch tJoinpayMch) {
-        UserLicense userLicense = userLicenseService.getById(tJoinpayMch.getAdminId());
-        TJoinpayMch mch = tJoinpayMchService.getById(tJoinpayMch.getId());
-        String cardNegative = Base64Util.imgToBase64(userLicense.getIdCardFront());
-        String cardPositive = Base64Util.imgToBase64(userLicense.getIdCardBack());
-        if (tJoinpayMch.getType().equals("0")) {
-            //对公
-            String tradeLicence = Base64Util.imgToBase64(userLicense.getBusinessLicense());
-            String openAccountLicence = Base64Util.imgToBase64(userLicense.getAccountLicense());
-            String str = tJoinpayMchService.sendCardBusiness(mch, cardPositive, cardNegative, tradeLicence, openAccountLicence, tJoinpayMch.getStatus());
-            return R.ok(str);
-        }
-        if (tJoinpayMch.getType().equals("1")) {
-            //个人
-            String str = tJoinpayMchService.sendCard(mch, cardPositive, cardNegative, tJoinpayMch.getStatus());
-            return R.ok(str);
-        }
-        return R.ok();
-    }
-
     @ApiOperation(value = "获取提现信息")
     @GetMapping("/getMch")
     public ResponseModel<TJoinpayMch> getMch(@RequestParam String id) {
@@ -261,6 +241,90 @@ public class TJoinpayMchController {
 
     }
 
+    @ApiOperation(value = "商户入网")
+    @PostMapping("/createMch")
+    public ResponseModel<?> createMch(@RequestBody TJoinpayMch joinpayMch) {
+        // 步骤
+        Integer steps = joinpayMch.getBindingSteps();
+        LambdaQueryWrapper<TJoinpayMch> query = Wrappers.lambdaQuery();
+        query.eq(TJoinpayMch::getAdminId, joinpayMch.getAdminId());
+        TJoinpayMch tJoinpayMch = tJoinpayMchService.getOne(query);
+        switch (steps) {
+            case 0:
+                // 提交证件信息
+                joinpayMch.setBindingSteps(1);
+                if (tJoinpayMch == null) {
+                    // 没有,直接保存
+                    joinpayMch.setCreateDate(new Date());
+                    joinpayMch.setModifyDate(new Date());
+                    tJoinpayMchService.save(joinpayMch);
+                } else {
+                    // 有,更新
+                    joinpayMch.setModifyDate(new Date());
+                    BeanUtil.copyProperties(joinpayMch, tJoinpayMch,
+                            CopyOptions.create()
+                                    .setIgnoreNullValue(true)  // 忽略源对象中的 null 值
+                                    .setIgnoreError(true)     // 忽略类型不匹配等错误
+                    );
+                    tJoinpayMchService.updateById(tJoinpayMch);
+                }
+                return R.ok();
+            case 1:
+                // 提交结算信息
+                joinpayMch.setBindingSteps(2);
+                joinpayMch.setModifyDate(new Date());
+                BeanUtil.copyProperties(joinpayMch, tJoinpayMch,
+                        CopyOptions.create()
+                                .setIgnoreNullValue(true)  // 忽略源对象中的 null 值
+                                .setIgnoreError(true)     // 忽略类型不匹配等错误
+                                .setIgnoreProperties("id", "createDate", "modifyDate", "bindingSteps", "altMchNo")
+                );
+                tJoinpayMchService.updateById(tJoinpayMch);
+                return R.ok();
+            case 2:
+                // 提交信息审核
+                tJoinpayMch.setModifyDate(new Date());
+                tJoinpayMch.setBindingSteps(3);
+                String result = "";
+                String altMchNo = tJoinpayMch.getAltMchNo();
+                if (StringUtils.isEmpty(tJoinpayMch.getAltMchNo())) {
+                    // 没入网,入网接口
+                    result = tJoinpayMchService.newCreateMch(tJoinpayMch);
+                } else {
+                    // 已入网有,修改接口
+                    result = tJoinpayMchService.newUpdateMch(tJoinpayMch);
+                }
+                if (JoinpayConstant.biz_code1.equals(result)) {
+                    return R.ok();
+                }
+                return R.fail(result);
+        }
+        return R.fail(B0001);
+    }
+
+    @ApiOperation("上传照片审核")
+    @PostMapping("/uploadPhotos")
+    public ResponseModel<?> uploadPhotos(@RequestBody TJoinpayMch tJoinpayMch) {
+        UserLicense userLicense = userLicenseService.getById(tJoinpayMch.getAdminId());
+        Integer altMerchantType = tJoinpayMch.getAltMerchantType();
+        TJoinpayMch mch = tJoinpayMchService.getById(tJoinpayMch.getId());
+        String cardNegative = Base64Util.imgToBase64(userLicense.getIdCardFront());
+        String cardPositive = Base64Util.imgToBase64(userLicense.getIdCardBack());
+        if (JoinpayConstant.ALT_MERCHANT_TYPE_ENTERPRISE == altMerchantType) {
+            //对公
+            String tradeLicence = Base64Util.imgToBase64(userLicense.getBusinessLicense());
+            String openAccountLicence = Base64Util.imgToBase64(userLicense.getAccountLicense());
+            String str = tJoinpayMchService.sendCardBusiness(mch, cardPositive, cardNegative, tradeLicence, openAccountLicence, tJoinpayMch.getStatus());
+            return R.ok(str);
+        }
+        if (JoinpayConstant.ALT_MERCHANT_TYPE_PERSON == altMerchantType) {
+            //个人
+            String str = tJoinpayMchService.sendCard(mch, cardPositive, cardNegative, tJoinpayMch.getStatus());
+            return R.ok(str);
+        }
+        return R.ok();
+    }
+
     @ApiOperation(value = "更新图片审核状态")
     @PostMapping("/updateApproveStatus")
     public ResponseModel<?> updateApproveStatus(@RequestBody TJoinpayMch mch) {
@@ -269,16 +333,5 @@ public class TJoinpayMchController {
         return R.ok(str);
     }
 
-    @ApiOperation(value = "商户入网")
-    @PostMapping("/createMch")
-    public ResponseModel<?> createMch(@RequestBody TJoinpayMch joinpayMch) {
-        String result = tJoinpayMchService.newCreateMch(joinpayMch);
-        if (JoinpayConstant.ORDER_STATSUS_P3004.equals(result)) {
-            return R.ok();
-        }
-        return R.fail(result);
-    }
-
-
 }
 

+ 2 - 2
src/main/java/com/szwl/mapper/TJoinpayMchMapper.java

@@ -5,11 +5,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
 /**
  * <p>
- * 汇聚支付用户收款信息表 Mapper 接口
+ *  Mapper 接口
  * </p>
  *
  * @author wuhs
- * @since 2022-04-29
+ * @since 2025-04-26
  */
 public interface TJoinpayMchMapper extends BaseMapper<TJoinpayMch> {
 

Файловите разлики са ограничени, защото са твърде много
+ 5 - 1
src/main/java/com/szwl/mapper/xml/TJoinpayMchMapper.xml


+ 49 - 40
src/main/java/com/szwl/model/entity/TJoinpayMch.java

@@ -12,15 +12,15 @@ import lombok.EqualsAndHashCode;
 
 /**
  * <p>
- * 汇聚支付用户收款信息表
+ * 
  * </p>
  *
  * @author wuhs
- * @since 2022-04-29
+ * @since 2025-04-26
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
-@ApiModel(value="TJoinpayMch对象", description="汇聚支付用户收款信息表")
+@ApiModel(value="TJoinpayMch对象", description="")
 public class TJoinpayMch implements Serializable {
 
     private static final long serialVersionUID = 1L;
@@ -32,112 +32,121 @@ public class TJoinpayMch implements Serializable {
 
     private Date modifyDate;
 
-    @ApiModelProperty(value = "商家id;")
+    @ApiModelProperty(value = "商家ID")
     private Long adminId;
 
-    @ApiModelProperty(value = "可取余额账户;")
+    @ApiModelProperty(value = "可取余额账户")
     private BigDecimal altAvilBalance;
 
-    @ApiModelProperty(value = "担保账户 : 担保账户里面得担保余额,金额以分为单位;")
+    @ApiModelProperty(value = "担保账户")
     private BigDecimal altGuarBalance;
 
-    @ApiModelProperty(value = "主账户余额;")
+    @ApiModelProperty(value = "主账户余额")
     private BigDecimal altMainBalance;
 
-    @ApiModelProperty(value = "分账方名称;")
+    @ApiModelProperty(value = "分账方名称")
     private String altMchName;
 
-    @ApiModelProperty(value = "分账方账号;")
+    @ApiModelProperty(value = "分账方账号")
     private String altMchNo;
 
-    @ApiModelProperty(value = "分账方商户简称;")
+    @ApiModelProperty(value = "分账方商户简称")
     private String altMchShortName;
 
-    @ApiModelProperty(value = "分账方商户类型,10:个人,11:个体工商户,12:企业;")
+    @ApiModelProperty(value = "分账方商户类型,10:个人,12:企业")
     private Integer altMerchantType;
 
-    @ApiModelProperty(value = "银行账户名称,分账方结算银行账户名称;")
+    @ApiModelProperty(value = "银行账户名称")
     private String bankAccountName;
 
-    @ApiModelProperty(value = "银行账号;")
+    @ApiModelProperty(value = "银行账号")
     private String bankAccountNo;
 
-    @ApiModelProperty(value = "账户类型      * 1 借记卡,4 对公账户;")
+    @ApiModelProperty(value = "账户类型 ,1:借记卡,4:对公账户;")
     private Integer bankAccountType;
 
-    @ApiModelProperty(value = "联行号;")
+    @ApiModelProperty(value = "联行号")
     private String bankChannelNo;
 
-    @ApiModelProperty(value = "业务响应码;")
+    @ApiModelProperty(value = "业务响应码")
     private String bizCode;
 
-    @ApiModelProperty(value = "业务联系人手机;")
+    @ApiModelProperty(value = "业务响应备注")
+    private String bizMsg;
+
+    @ApiModelProperty(value = "业务联系人手机")
     private String busiContactMobileNo;
 
-    @ApiModelProperty(value = "业务联系人姓名;")
+    @ApiModelProperty(value = "业务联系人姓名")
     private String busiContactName;
 
-    @ApiModelProperty(value = "身份证有效期;")
+    @ApiModelProperty(value = "身份证有效期")
     private String idCardExpiry;
 
-    @ApiModelProperty(value = "身份证;")
+    @ApiModelProperty(value = "身份证")
     private String idCardNo;
 
-    @ApiModelProperty(value = "法人;")
+    @ApiModelProperty(value = "法人")
     private String legalPerson;
 
-    @ApiModelProperty(value = "营业执照有效期;")
+    @ApiModelProperty(value = "营业执照有效期")
     private String licenseExpiry;
 
-    @ApiModelProperty(value = "营业执照编号;")
+    @ApiModelProperty(value = "营业执照编号")
     private String licenseNo;
 
-    @ApiModelProperty(value = "分账方登录名,即邮箱;")
+    @ApiModelProperty(value = "分账方登录名")
     private String loginName;
 
-    @ApiModelProperty(value = "经营地址;")
+    @ApiModelProperty(value = "经营地址")
     private String manageAddr;
 
-    @ApiModelProperty(value = "经营范围;")
+    @ApiModelProperty(value = "经营范围")
     private String manageScope;
 
-    @ApiModelProperty(value = "商户状态;")
+    @ApiModelProperty(value = "商户状态")
     private String orderStatus;
 
-    @ApiModelProperty(value = "电话;")
+    @ApiModelProperty(value = "电话")
     private String phoneNo;
 
-    @ApiModelProperty(value = "受理响应码;")
+    @ApiModelProperty(value = "受理响应码")
     private String respCode;
 
-    @ApiModelProperty(value = "结算周期;")
+    @ApiModelProperty(value = "结算周期")
     private Integer riskDay;
 
-    @ApiModelProperty(value = "结算周期类型      * 1 工作日,2 自然日,3 月结日;")
+    @ApiModelProperty(value = "结算周期类型 ,1:工作日,2:自然日,3:月结日")
     private Integer settDateType;
 
-    @ApiModelProperty(value = "结算方式      * 1 由汇聚自动结算      * 2 由商户平台手工结算(结算接口);")
+    @ApiModelProperty(value = "结算方式 ,1:自动结算,2:手工结算")
     private Integer settMode;
 
-    @ApiModelProperty(value = "开通状态;")
+    @ApiModelProperty(value = "认证状态,0:认证中,1:认证成功,2:认证失败")
     private String status;
 
-    @ApiModelProperty(value = "签约状态;")
+    @ApiModelProperty(value = "认证备注")
+    private String remarks;
+
+    @ApiModelProperty(value = "签约状态")
     private String signStatus;
 
-    @ApiModelProperty(value = "签约流水号;")
+    @ApiModelProperty(value = "签约流水号")
     private String signTrxNo;
 
-    @ApiModelProperty(value = "图片审核备注;")
+    @ApiModelProperty(value = "图片审核备注")
     private String approveNote;
 
-    @ApiModelProperty(value = "图片审核状态;")
+    @ApiModelProperty(value = "图片审核状态")
     private String approveStatus;
 
     private String type;
-    /**
-     * 步骤  0:图片未上传  1:图片已上传
-     */
+
+    @ApiModelProperty(value = "步骤  0:图片未上传  1:图片已上传")
     private String step;
 
+    @ApiModelProperty(value = "绑定步骤,0:证件信息,1:结算信息,2:信息审核,3:签约")
+    private Integer bindingSteps;
+
+
 }

+ 7 - 0
src/main/java/com/szwl/service/TJoinpayMchService.java

@@ -96,4 +96,11 @@ public interface TJoinpayMchService extends MyIService<TJoinpayMch> {
      * @return
      */
     String newCreateMch(TJoinpayMch joinpayMch);
+
+    /**
+     * 新入网修改接口
+     * @param tJoinpayMch
+     * @return
+     */
+    String newUpdateMch(TJoinpayMch tJoinpayMch);
 }

+ 154 - 106
src/main/java/com/szwl/service/impl/TJoinpayMchServiceImpl.java

@@ -415,15 +415,12 @@ public class TJoinpayMchServiceImpl extends ServiceImpl<TJoinpayMchMapper, TJoin
     @Override
     public String sendCard(TJoinpayMch mch, String cardPositive, String cardNegative, String staus) {
 
-//        String url = "https://www.joinpay.com/allocFunds";
         String url = "https://upload.joinpay.com/allocFunds";
 
         if (StringUtils.isEmpty(mch.getAltMchNo())) {
             return "找不到商家编号";
         }
-//        String card_positive = ImageToBase64ByLocal(cardPositive);
         String card_positive = cardPositive;
-//        String card_negative = ImageToBase64ByLocal(cardNegative);
         String card_negative = cardNegative;
 
         JSONObject requestData = new JSONObject(new LinkedHashMap());
@@ -447,13 +444,10 @@ public class TJoinpayMchServiceImpl extends ServiceImpl<TJoinpayMchMapper, TJoin
 
         String sign = createMD5Sign(requestJson, JoinpayConstant.key);
         requestJson.put("sign", sign.toUpperCase());
-//        logger.info("请求参数:" + requestJson);
         String back = null;
         org.json.JSONObject jsonObject;
         try {
-
             jsonObject = HttpClientUtils.postJson(url, requestJson.toString());
-//            logger.info("响应参数:" + jsonObject);
 
             // 判断请求是否正确,受理成功
             if (jsonObject.has("resp_code")) {
@@ -465,32 +459,17 @@ public class TJoinpayMchServiceImpl extends ServiceImpl<TJoinpayMchMapper, TJoin
             // 处理data
             if (jsonObject.has("data")) {
                 org.json.JSONObject data = jsonObject.getJSONObject("data");
-                String biz_code = data.getString("biz_code");
-                if (biz_code.equals("B100000")) {
+                String bizCode = data.getString("biz_code");
+                if (JoinpayConstant.biz_code1.equals(bizCode)) {
                     String approve_status = "审核中";
                     mch.setApproveStatus(approve_status);
                     mch.setApproveNote("");
-                    mch.setStep("1");
-                    back = approve_status;
-                }
-                if (biz_code.equals("B100002")) {
-                    String approve_status = "上传失败";
-                    String approve_note = data.getString("biz_msg");
-                    mch.setApproveNote(approve_note);
-                    mch.setApproveStatus(approve_status);
-                    back = approve_status;
-                }
-                if (biz_code.equals("B101017")) {
-                    String approve_status = "上传失败";
-                    String approve_note = data.getString("biz_msg");
-                    mch.setApproveNote(approve_note);
-                    mch.setApproveStatus(approve_status);
                     back = approve_status;
-                }
-                String approve_note = data.getString("biz_msg");
-                mch.setApproveNote(approve_note);
-                if (StringUtils.isEmpty(back)) {
-                    back = approve_note;
+                    mch.setStep("1");
+                } else {
+                    String bizMsg = data.getString("biz_msg");
+                    mch.setApproveNote(bizMsg);
+                    back = bizMsg;
                 }
                 updateById(mch);
             }
@@ -511,15 +490,12 @@ public class TJoinpayMchServiceImpl extends ServiceImpl<TJoinpayMchMapper, TJoin
     @Override
     public String sendCardBusiness(TJoinpayMch mch, String cardPositive, String cardNegative, String tradeLicence, String openAccountLicence, String staus) {
 
-//        String url = "https://www.joinpay.com/allocFunds";
         String url = "https://upload.joinpay.com/allocFunds";
 
         if (StringUtils.isEmpty(mch.getAltMchNo())) {
             return "找不到商家编号";
         }
-//        String card_positive = ImageToBase64ByLocal(cardPositive);
         String card_positive = cardPositive;
-//        String card_negative = ImageToBase64ByLocal(cardNegative);
         String card_negative = cardNegative;
         String trade_licence = tradeLicence;
         String open_account_licence = openAccountLicence;
@@ -564,27 +540,17 @@ public class TJoinpayMchServiceImpl extends ServiceImpl<TJoinpayMchMapper, TJoin
             // 处理data
             if (jsonObject.has("data")) {
                 org.json.JSONObject data = jsonObject.getJSONObject("data");
-                String biz_code = data.getString("biz_code");
-                if (biz_code.equals("B100000")) {
+                String bizCode = data.getString("biz_code");
+                if (JoinpayConstant.biz_code1.equals(bizCode)) {
                     String approve_status = "审核中";
                     mch.setApproveStatus(approve_status);
                     mch.setApproveNote("");
                     back = approve_status;
                     mch.setStep("1");
-                }
-                if (biz_code.equals("B100002")) {
-                    String approve_status = "上传失败";
-                    String approve_note = data.getString("biz_msg");
-                    mch.setApproveNote(approve_note);
-                    mch.setApproveStatus(approve_status);
-                    back = approve_status;
-                }
-                if (biz_code.equals("B101017")) {
-                    String approve_status = "上传失败";
-                    String approve_note = data.getString("biz_msg");
-                    mch.setApproveNote(approve_note);
-                    mch.setApproveStatus(approve_status);
-                    back = approve_status;
+                } else {
+                    String bizMsg = data.getString("biz_msg");
+                    mch.setApproveNote(bizMsg);
+                    back = bizMsg;
                 }
                 updateById(mch);
             }
@@ -620,7 +586,6 @@ public class TJoinpayMchServiceImpl extends ServiceImpl<TJoinpayMchMapper, TJoin
 
         String sign = createMD5Sign(requestJson, JoinpayConstant.key);
         requestJson.put("sign", sign.toUpperCase());
-//        logger.info("请求参数:" + requestJson);
         String back = null;
         org.json.JSONObject jsonObject;
         try {
@@ -637,18 +602,18 @@ public class TJoinpayMchServiceImpl extends ServiceImpl<TJoinpayMchMapper, TJoin
             // 处理data
             if (jsonObject.has("data")) {
                 org.json.JSONObject data = jsonObject.getJSONObject("data");
-                String biz_code = data.getString("biz_code");
-                String approve_status = data.getString("approve_status");
-                String approve_note = data.getString("approve_note");
-                if (biz_code.equals("B100000")) {
-                    if (approve_status.equals("P1000")) {
+                String bizCode = data.getString("biz_code");
+                String approveStatus = data.getString("approve_status");
+                String approveNote = data.getString("approve_note");
+                if (JoinpayConstant.biz_code1.equals(bizCode)) {
+                    if (JoinpayConstant.APPROVE_STATUS_P1000.equals(approveStatus)) {
                         mch.setApproveStatus("审核通过");
                         mch.setApproveNote("");
-                        back = approve_status;
-                    } else if (approve_status.equals("P2000")) {
+                        back = approveStatus;
+                    } else if (JoinpayConstant.APPROVE_STATUS_P2000.equals(approveStatus)) {
                         mch.setApproveStatus("审核不通过");
-                        mch.setApproveNote(approve_note);
-                        back = approve_status;
+                        mch.setApproveNote(approveNote);
+                        back = approveStatus;
                     }
                 }
                 updateById(mch);
@@ -932,8 +897,8 @@ public class TJoinpayMchServiceImpl extends ServiceImpl<TJoinpayMchMapper, TJoin
         joinpayMch.setAltMchName(altMchName);
 
         // 格式为16 位随机字符串:16 位随机字符串
-//        String aeskey1 = getRandomString(16);
-//        String aeskey2 = getRandomString(16);
+        String asekeyOne = getRandomString(16);
+        String aeskeyTwo = getRandomString(16);
 
         requestData.put("login_name", loginName);
         requestData.put("alt_mch_name", altMchName);
@@ -941,10 +906,8 @@ public class TJoinpayMchServiceImpl extends ServiceImpl<TJoinpayMchMapper, TJoin
         requestData.put("busi_contact_name", joinpayMch.getBusiContactName());
         requestData.put("busi_contact_mobile_no", joinpayMch.getBusiContactMobileNo());
         requestData.put("phone_no", joinpayMch.getPhoneNo());
-//        requestData.put("legal_person", AESUtil.encrypt(joinpayMch.getLegalPerson(), aeskey1, aeskey2));
-//        requestData.put("id_card_no", AESUtil.encrypt(joinpayMch.getIdCardNo(), aeskey1, aeskey2));
-        requestData.put("legal_person", joinpayMch.getLegalPerson());
-        requestData.put("id_card_no", joinpayMch.getIdCardNo());
+        requestData.put("legal_person", AESUtil.encrypt(joinpayMch.getLegalPerson(), asekeyOne, aeskeyTwo));
+        requestData.put("id_card_no", AESUtil.encrypt(joinpayMch.getIdCardNo(), asekeyOne, aeskeyTwo));
         requestData.put("id_card_expiry", joinpayMch.getIdCardExpiry());
         // 企业必填:营业执照编号 / 营业执照有效期
         if (JoinpayConstant.ALT_MERCHANT_TYPE_ENTERPRISE == altMerchantType) {
@@ -975,15 +938,13 @@ public class TJoinpayMchServiceImpl extends ServiceImpl<TJoinpayMchMapper, TJoin
             // 个人用借记卡
             requestData.put("bank_account_type", JoinpayConstant.BANK_ACCOUNT_TYPE_ONE);
         }
-//        requestData.put("bank_account_name", AESUtil.encrypt(joinpayMch.getBankAccountName(), aeskey1, aeskey2));
-//        requestData.put("bank_account_no", AESUtil.encrypt(joinpayMch.getBankAccountNo(), aeskey1, aeskey2));
-        requestData.put("bank_account_name", joinpayMch.getBankAccountName());
-        requestData.put("bank_account_no", joinpayMch.getBankAccountNo());
+        requestData.put("bank_account_name", AESUtil.encrypt(joinpayMch.getBankAccountName(), asekeyOne, aeskeyTwo));
+        requestData.put("bank_account_no", AESUtil.encrypt(joinpayMch.getBankAccountNo(), asekeyOne, aeskeyTwo));
         requestData.put("notify_url", JoinpayConstant.MERCHANT_URL);
 
         JSONObject requestJson = new JSONObject(new TreeMap<String, Object>());
-        requestJson.put("method", "altmch.create");
-        requestJson.put("version", "1.1");
+        requestJson.put("method", "altmch.add");
+        requestJson.put("version", "2.0");
         requestJson.put("data", requestData);
         // 32位随机字符串
         String uuid = UUID.randomUUID().toString().trim().replaceAll("-", "");
@@ -993,11 +954,12 @@ public class TJoinpayMchServiceImpl extends ServiceImpl<TJoinpayMchMapper, TJoin
 
         String sign = createMD5Sign(requestJson, JoinpayConstant.key);
         requestJson.put("sign", sign.toUpperCase());
+        requestJson.put("aes_key", RSAUtil.encrypt(asekeyOne + ":" + aeskeyTwo, JoinpayConstant.publickey));
 
         String result = "";
         try {
             org.json.JSONObject jsonObject = HttpClientUtils.postJson(url, requestJson.toString());
-
+            log.info("创建商户结果:{}", jsonObject);
             String respCode = jsonObject.getString("resp_code");
             String respMsg = jsonObject.getString("resp_msg");
             joinpayMch.setRespCode(respCode);
@@ -1005,55 +967,141 @@ public class TJoinpayMchServiceImpl extends ServiceImpl<TJoinpayMchMapper, TJoin
                 // 受理成功
                 if (jsonObject.has("data")) {
                     org.json.JSONObject data = jsonObject.getJSONObject("data");
-                    if (data.has("biz_code")) {
-                        joinpayMch.setBizCode(data.getString("biz_code"));
-                    }
-
-                    if (data.has("alt_mch_no")) {
+                    String bizCode = data.getString("biz_code");
+                    joinpayMch.setBizCode(bizCode);
+                    if (JoinpayConstant.biz_code1.equals(bizCode)) {
+                        // 受理成功
                         joinpayMch.setAltMchNo(data.getString("alt_mch_no"));
+                        String orderStatus = data.getString("order_status");
+                        joinpayMch.setOrderStatus(orderStatus);
+                        joinpayMch.setStatus("0");  // 认证中
+                        result = bizCode;
+                    } else {
+                        // 受理失败
+                        String bizMsg = data.getString("biz_msg");
+                        joinpayMch.setBizMsg(data.getString("biz_msg"));
+                        result = bizMsg;
                     }
-
-                    if (data.has("order_status")) {
-                        joinpayMch.setOrderStatus(data.getString("order_status"));
-                    }
+                    updateById(joinpayMch);
+                    return result;
                 }
 
             }
             return respMsg;
 
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
 
+    @Override
+    public String newUpdateMch(TJoinpayMch joinpayMch) {
+
+        String url = "https://www.joinpay.com/allocFunds";
+
+        JSONObject requestData = new JSONObject(new LinkedHashMap());
+
+
+        // 格式为16 位随机字符串:16 位随机字符串
+        String aes_key1 = getRandomString(16);
+        String aes_key2 = getRandomString(16);
+
+        requestData.put("alt_mch_no", joinpayMch.getAltMchNo());
+        if (StringUtils.isNotEmpty(joinpayMch.getApproveStatus())) {
+            if (!joinpayMch.getApproveStatus().equals("审核通过")) {
+                requestData.put("legal_person", joinpayMch.getLegalPerson());
+                requestData.put("id_card_no", joinpayMch.getIdCardNo());
+            }
+        }
+        Integer altMerchantType = joinpayMch.getAltMerchantType();
+        if (JoinpayConstant.ALT_MERCHANT_TYPE_ENTERPRISE == altMerchantType) {
+            // 企业用对公账户
+            requestData.put("bank_account_type", JoinpayConstant.BANK_ACCOUNT_TYPE_FOUR);
+            joinpayMch.setBankAccountType(JoinpayConstant.BANK_ACCOUNT_TYPE_FOUR);
+            String bankAccountName = joinpayMch.getBankAccountName();
+            if (StringUtils.isNotEmpty(joinpayMch.getApproveStatus()) && !joinpayMch.getApproveStatus().equals("审核通过")) {
+                requestData.put("alt_mch_name", bankAccountName);
+                requestData.put("license_no", joinpayMch.getLicenseNo());
+            }
+        } else if (JoinpayConstant.ALT_MERCHANT_TYPE_PERSON == altMerchantType) {
+            // 个人用借记卡
+            requestData.put("bank_account_type", JoinpayConstant.bank_account_type1);
+            joinpayMch.setBankAccountType(JoinpayConstant.bank_account_type1);
+        }
+
+        requestData.put("bank_account_name", joinpayMch.getBankAccountName());
+        requestData.put("bank_account_no", joinpayMch.getBankAccountNo());
+        requestData.put("bank_channel_no", joinpayMch.getBankChannelNo());
+        if (joinpayMch.getSettMode() != null) {
+            requestData.put("sett_mode", joinpayMch.getSettMode());
+        } else {
+            // 由汇聚自动结算
+            requestData.put("sett_mode", JoinpayConstant.SETT_MODE_ONE);
+        }
+
+        // 结算周期类型:自然日
+        requestData.put("sett_date_type", JoinpayConstant.SETT_DATE_DAY);
+        if (joinpayMch.getRiskDay() != null) {
+            requestData.put("risk_day", joinpayMch.getRiskDay());
+        } else {
+            // 结算周期:1
+            requestData.put("risk_day", 1);
+        }
+        // 回调URL
+        requestData.put("notify_url", JoinpayConstant.MERCHANT_URL);
+        JSONObject requestJson = new JSONObject(new TreeMap<String, Object>());
+        requestJson.put("method", "altmch.modify");
+        requestJson.put("version", "1.1");
+        requestJson.put("data", requestData);
+        // 32位随机字符串
+        String uuid = UUID.randomUUID().toString().trim().replaceAll("-", "");
+        requestJson.put("rand_str", uuid);
+        requestJson.put("sign_type", JoinpayConstant.sign_type_MD5);
+        requestJson.put("mch_no", JoinpayConstant.mch_no);
+
+        String sign = createMD5Sign(requestJson, JoinpayConstant.key);
+        requestJson.put("sign", sign.toUpperCase());
+        requestJson.put("aes_key", RSAUtil.encrypt(aes_key1 + ":" + aes_key2, JoinpayConstant.publickey));
+
+        String result = "";
+        try {
+            org.json.JSONObject jsonObject = HttpClientUtils.postJson(url, requestJson.toString());
+            log.info("修改商户结果:{}", jsonObject);
+            String respCode = jsonObject.getString("resp_code");
+            String respMsg = jsonObject.getString("resp_msg");
+            joinpayMch.setRespCode(respCode);
+            if (JoinpayConstant.resp_code1.equals(respCode)) {
+                // 受理成功
+                if (jsonObject.has("data")) {
+                    org.json.JSONObject data = jsonObject.getJSONObject("data");
+                    String bizCode = data.getString("biz_code");
+                    joinpayMch.setBizCode(bizCode);
+                    if (JoinpayConstant.biz_code1.equals(bizCode)) {
+                        // 受理成功
+                        joinpayMch.setAltMchNo(data.getString("alt_mch_no"));
+                        String orderStatus = data.getString("order_status");
+                        joinpayMch.setOrderStatus(orderStatus);
+                        joinpayMch.setStatus("0");  // 认证中
+                        result = bizCode;
+                    } else {
+                        // 受理失败
+                        String bizMsg = data.getString("biz_msg");
+                        joinpayMch.setBizMsg(data.getString("biz_msg"));
+                        result = bizMsg;
+                    }
+                    updateById(joinpayMch);
+                    return result;
+                }
+
+            }
+            return respMsg;
 
-            /**
-             * 更新一下分销商户的  各种响应码 & login_name
-             */
-//            joinpayMch.setCreateDate(new Date());
-//            joinpayMch.setModifyDate(new Date());
-//            joinpayMch.setType("1");
-//            if (StringUtils.isNotEmpty(joinpayMch.getAltMchNo())) {
-//                save(joinpayMch);
-//            }
-//
-//            if (jsonObject.has("resp_code")) {
-//                String resp_code = jsonObject.getString("resp_code");
-//                mch.setRespCode(resp_code);
-//                if (JoinpayConstant.resp_code2.equals(resp_code)) {
-//                    org.json.JSONObject data = jsonObject.getJSONObject("data");
-//                    if (data.has("biz_msg")) {
-//                        return data.getString("biz_msg");
-//                    }
-//                }
-//            }
-//
 
         } catch (IOException e) {
             e.printStackTrace();
         }
-//        if (StringUtils.isNotEmpty(mch.getAltMchNo())) {
-//            return Constant.correct_code;
-//        } else {
-//            return "注册失败";
-//        }
-        return "";
+        return result;
     }