优化 分账接收方绑定

This commit is contained in:
Jack 2025-09-22 12:22:42 +08:00
parent 6f56810fdf
commit 422bd92f4a
12 changed files with 298 additions and 184 deletions

View File

@ -310,7 +310,7 @@ public class EsignContractServiceImpl extends BaseServiceImpl<EsignContractMappe
if (success && StrUtil.isNotBlank(downloadUrl)) { if (success && StrUtil.isNotBlank(downloadUrl)) {
// 1电子合同给商家申请分账功能使用务必检查是否申请过申请过忽略 // 1电子合同给商家申请分账功能使用务必检查是否申请过申请过忽略
Pair<Boolean, String> retPair = lakalaApiService.innerApplyLedgerMer(esignContract.getMch_mobile()); Pair<Boolean, String> retPair = lakalaApiService.innerApplyLedgerMer("", false);
if (!retPair.getFirst()) { if (!retPair.getFirst()) {
log.error("商家申请分账业务异常:{}", retPair.getSecond()); log.error("商家申请分账业务异常:{}", retPair.getSecond());
} }

View File

@ -90,10 +90,11 @@ public interface LakalaApiService {
/** /**
* 内部调用商户分账业务开通申请 * 内部调用商户分账业务开通申请
* *
* @param merCupNo * @param merCupNo 商户号
* @param forceReApply 如果已申请成功是否可以重新申请更改
* @return * @return
*/ */
Pair<Boolean, String> innerApplyLedgerMer(String merCupNo); Pair<Boolean, String> innerApplyLedgerMer(String merCupNo, Boolean forceReApply);
/** /**
* 发货类交易确认收货通知 * 发货类交易确认收货通知

View File

@ -57,7 +57,7 @@ public interface LklLedgerMerReceiverBindService extends IBaseService<LklLedgerM
* @param applyId * @param applyId
* @return * @return
*/ */
LklLedgerMerReceiverBind getPlatformByApplyId(String applyId); LklLedgerMerReceiverBind getMerReceiverByApplyId(String applyId);
/** /**
* 根据商户编号查询一条代理商绑定记录 * 根据商户编号查询一条代理商绑定记录
@ -91,4 +91,13 @@ public interface LklLedgerMerReceiverBindService extends IBaseService<LklLedgerM
* @return * @return
*/ */
Boolean updateAuditResult(String applyId, String merInnerNo, String merCupNo, String receiverNo, String entrustFileName, String entrustFilePath, String auditStatus, String auditStatusText, String remark); Boolean updateAuditResult(String applyId, String merInnerNo, String merCupNo, String receiverNo, String entrustFileName, String entrustFilePath, String auditStatus, String auditStatusText, String remark);
/**
* 根据入驻编号和商户编号删除商户分账接收方绑定记录
*
* @param mchId
* @param merCupNo
* @return
*/
Boolean delByMchIdAndMerCupNo(Long mchId, String merCupNo);
} }

View File

@ -579,17 +579,17 @@ public class LakalaApiServiceImpl implements LakalaApiService {
return Pair.of(true, "商家入网申请电子合同成功"); return Pair.of(true, "商家入网申请电子合同成功");
} }
/** /**
* 商户分账业务开通申请 * 商户分账业务开通申请
* *
* <p>向拉卡拉提交商户分账业务开通申请包括上传分账授权委托书等必要文件 * <p>向拉卡拉提交商户分账业务开通申请包括上传分账授权委托书等必要文件
* *
* @param merCupNo 拉卡拉商户号银联商户号 * @param merCupNo 拉卡拉商户号银联商户号
* @param forceReApply 如果已申请成功是否可以重新申请更改
* @return Pair对象第一个元素表示操作是否成功第二个元素为操作结果信息 * @return Pair对象第一个元素表示操作是否成功第二个元素为操作结果信息
*/ */
@Override @Override
public Pair<Boolean, String> innerApplyLedgerMer(String merCupNo) { public Pair<Boolean, String> innerApplyLedgerMer(String merCupNo, Boolean forceReApply) {
log.info("开始执行商户分账业务申请流程,商户号: {}", merCupNo); log.info("开始执行商户分账业务申请流程,商户号: {}", merCupNo);
// 参数校验 // 参数校验
@ -606,115 +606,147 @@ public class LakalaApiServiceImpl implements LakalaApiService {
return Pair.of(false, I18nUtil._("商家入驻信息不存在!")); return Pair.of(false, I18nUtil._("商家入驻信息不存在!"));
} }
// 商户是否已经已申请过分账业务
boolean hasApplyMer = false;
// 判断是否已经申请过 // 判断是否已经申请过
log.debug("检查商户是否已申请过分账业务,商户号: {}", merCupNo); log.debug("检查商户是否已申请过分账业务,商户号: {}", merCupNo);
LklLedgerMember lklLedgerMember = lklLedgerMemberService.getByMerCupNo(merCupNo); LklLedgerMember lklLedgerMember = lklLedgerMemberService.getByMerCupNo(merCupNo);
if (lklLedgerMember != null && Integer.valueOf(1).equals(lklLedgerMember.getAudit_status())) { if (lklLedgerMember != null
log.info("商户已申请过分账业务,无需重复申请,商户号: {}", merCupNo); && CommonConstant.Enable.equals(lklLedgerMember.getAudit_status())
&& CommonConstant.Enable.equals(shopMchEntry.getHas_apply_mer())) {
hasApplyMer = true; // 商户是否已经已申请过分账业务
log.debug("商户{}已申请过分账业务", merCupNo);
if (!Boolean.TRUE.equals(forceReApply)) {
log.info("商户{}已申请过分账业务,无需重复申请", merCupNo);
return Pair.of(true, I18nUtil._("商家已经申请过了!")); return Pair.of(true, I18nUtil._("商家已经申请过了!"));
} }
}
// 检查更新店铺初始化状态 // 检查更新店铺初始化状态
log.debug("检查并更新店铺初始化状态商户ID: {}", shopMchEntry.getId()); // log.debug("检查并更新店铺初始化状态商户ID: {}", shopMchEntry.getId());
shopMchEntryService.checkMchEntryStoreStatus(shopMchEntry.getId(), shopMchEntry); // shopMchEntryService.checkMchEntryStoreStatus(shopMchEntry.getId(), shopMchEntry);
try {
// 1. 配置初始化 // 1. 配置初始化
log.debug("初始化拉卡拉SDK"); log.debug("初始化拉卡拉SDK");
initLKLSDK(); initLKLSDK();
//2. 装配数据 //2. 装配数据
log.debug("装配分账业务申请请求参数"); log.debug("装配分账业务申请请求参数");
V2MmsOpenApiLedgerApplyLedgerMerRequest req = new V2MmsOpenApiLedgerApplyLedgerMerRequest();
req.setVersion("2.0");
req.setOrderNo(StringUtils.genLklOrderNo(8));// 14位年月日时24小时制分秒+8位的随机数
req.setOrgCode(orgCode);
req.setMerCupNo(shopMchEntry.getLkl_mer_cup_no()); // 从进件申请返回的商户号不要传入内部商户号传银联商户号才有效
req.setContactMobile(shopMchEntry.getLogin_mobile()); // 商户入驻注册的手机号
// 分账比例默认 94%
req.setSplitLowestRatio(new BigDecimal(splitLowestRatio));
req.setEleContractNo(shopMchEntry.getLkl_ec_no());
req.setSplitRange("ALL"); // ALL全部交易分账 (商户所有交易默认待分账) MARK标记交易分账(只有带分账标识交易待分账其余交易正常结算) 默认MARK
String fileName = "商家分账授权委托书.pdf";
req.setSplitEntrustFileName(fileName);
// TODO 分账结算委托书文件上传到拉卡拉服务器
String splitEntrustFilePath = shopMchEntry.getLkl_ec_file_path(); //fileUploadResp.getStr("attFileId"); String splitEntrustFilePath = shopMchEntry.getLkl_ec_file_path(); //fileUploadResp.getStr("attFileId");
req.setSplitEntrustFilePath(splitEntrustFilePath); //比如MMS/20250519/165150-39c8bbca513b4cccab1e942999021fd6.pdf;
String domain = projectDomain;
if (isProdProject()) {
domain += "/api";
}
// 给拉卡拉通知的回调地址 // 给拉卡拉通知的回调地址
String retUrl = domain + "/mobile/shop/lakala/ledger/applyLedgerMerNotify"; String notifyUrl = projectDomain + "/api/mobile/shop/lakala/ledger/applyLedgerMerNotify";
req.setRetUrl(retUrl);
log.debug("商户分账业务申请请求参数: {}", JSONUtil.toJsonStr(req)); String orderNo = StringUtils.genLklOrderNo(8); // 14位年月日时24小时制分秒+8位的随机数
String merCupNoValue = shopMchEntry.getLkl_mer_cup_no(); // 从进件申请返回的商户号不要传入内部商户号传银联商户号才有效
String contactMobile = shopMchEntry.getLogin_mobile(); // 商户入驻注册的手机号
String fileName = "商家分账授权委托书.pdf";
JSONObject paramsJSON = new JSONObject();
paramsJSON.put("version", "2.0");
paramsJSON.put("orderNo", orderNo);
paramsJSON.put("orgCode", orgCode);
paramsJSON.put("merInnerNo", merCupNoValue);
paramsJSON.put("merCupNo", merCupNoValue);
paramsJSON.put("contactMobile", contactMobile);
// 电子合同号可能为空需要检查
String eleContractNo = shopMchEntry.getLkl_ec_no();
if (StringUtils.isNotBlank(eleContractNo)) {
paramsJSON.put("eleContractNo", eleContractNo);
}
paramsJSON.put("splitEntrustFileName", fileName);
paramsJSON.put("splitEntrustFilePath", splitEntrustFilePath);
paramsJSON.put("retUrl", notifyUrl);
paramsJSON.put("splitLowestRatio", splitLowestRatio);
paramsJSON.put("splitRange", "ALL");
paramsJSON.put("settleType", "01");
// paramsJSON.put("splitLaunchMode", "MANUAL");
// paramsJSON.put("splitRuleSource", "MER");
// paramsJSON.put("sepFundSource", "TR");
String postUrl = "";
String operationType = ""; // 操作类型用于日志记录和提示信息
// 确保serverUrl不为null
String effectiveServerUrl = serverUrl != null ? serverUrl : "";
if (!isLklProd) {
effectiveServerUrl = effectiveServerUrl + "/sit";
}
if (hasApplyMer && Boolean.TRUE.equals(forceReApply)) {
// 商户分账信息变更申请
postUrl = effectiveServerUrl + "/api/v2/mms/openApi/ledger/modifyLedgerMer";
operationType = "变更";
} else {
// 商户分账业务开通申请
postUrl = effectiveServerUrl + "/api/v2/mms/openApi/ledger/applyLedgerMer";
operationType = "开通";
}
try {
//3. 发送请求 //3. 发送请求
log.info("开始向拉卡拉提交分账业务申请,订单号: {}", req.getOrderNo()); log.info("开始向拉卡拉提交分账业务{}申请,商户号: {}", operationType, merCupNo);
String responseStr = LKLSDK.httpPost(req); String responseStr = LKLSDK.httpPost(postUrl, paramsJSON.toString());
log.debug("商户分账业务{}申请请求参数: 请求地址:{}\n {}\n 响应数据:{}", operationType, postUrl, paramsJSON, responseStr);
if (StrUtil.isBlank(responseStr)) { if (StrUtil.isBlank(responseStr)) {
log.error("申请拉卡拉分账业务无返回值,订单号: {}", req.getOrderNo()); log.error("申请拉卡拉分账业务{}无返回值,商户号: {}", operationType, merCupNo);
return Pair.of(false, I18nUtil._("申请拉卡拉分账业务无返回值!")); return Pair.of(false, I18nUtil._("申请拉卡拉分账业务无返回值!"));
} }
log.debug("商户分账业务申请响应数据: {}", responseStr);
// 成功返回示例{'retCode':'000000','retMsg':'申请已受理请等待审核结果','respData':{'version':'1.0','orderNo':'KFPT20230223181025407788734','orgCode':'1','applyId':681201215598657536}} // 成功返回示例{'retCode':'000000','retMsg':'申请已受理请等待审核结果','respData':{'version':'1.0','orderNo':'KFPT20230223181025407788734','orgCode':'1','applyId':681201215598657536}}
JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr); JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr);
if (lakalaRespJSON == null) { if (lakalaRespJSON == null) {
log.error("申请拉卡拉分账业务返回值异常,订单号: {}", req.getOrderNo()); log.error("申请拉卡拉分账业务{}返回值异常,商户号: {}", operationType, merCupNo);
return Pair.of(false, I18nUtil._("申请拉卡拉分账业务返回值异常!")); return Pair.of(false, I18nUtil._("申请拉卡拉分账业务返回值异常!"));
} }
Object applyId = lakalaRespJSON.getByPath("respData.applyId"); Object applyId = lakalaRespJSON.getByPath("respData.applyId");
if (!lklSuccessCode.equals(lakalaRespJSON.getStr("retCode")) || applyId == null) { String retCode = lakalaRespJSON.getStr("retCode");
if (!lklSuccessCode.equals(retCode) || applyId == null) {
String retMsg = lakalaRespJSON.getStr("retMsg"); String retMsg = lakalaRespJSON.getStr("retMsg");
log.warn("拉卡拉分账业务申请被拒绝,订单号: {},返回码: {},返回信息: {}", log.warn("拉卡拉分账业务{}申请被拒绝,商户号: {},返回码: {},返回信息: {}",
req.getOrderNo(), lakalaRespJSON.getStr("retCode"), retMsg); operationType, merCupNo, retCode, retMsg);
return Pair.of(false, retMsg); // 提供默认错误消息防止retMsg为null
String errorMsg = StringUtils.isNotBlank(retMsg) ? retMsg : "拉卡拉分账业务申请被拒绝";
return Pair.of(false, errorMsg);
} }
JSONObject paramsJSON = new JSONObject(); paramsJSON.set("applyId", applyId);
paramsJSON.put("orderNo", req.getOrderNo()); String retMsg = lakalaRespJSON.getStr("retMsg");
paramsJSON.put("org_code", orgCode); paramsJSON.set("remark", retMsg);
paramsJSON.put("version", "2.0"); paramsJSON.set("auditStatusText", retMsg); // 直接使用retMsg避免null值
paramsJSON.put("ret_url", retUrl); paramsJSON.set("mchId", shopMchEntry.getId());
paramsJSON.put("mer_inner_no", shopMchEntry.getLkl_mer_inner_no());
paramsJSON.put("mer_cup_no", shopMchEntry.getLkl_mer_cup_no());
paramsJSON.put("contact_mobile", shopMchEntry.getLogin_mobile());
paramsJSON.put("split_lowest_ratio", req.getSplitLowestRatio());
paramsJSON.put("split_range", "MARK");
paramsJSON.put("split_launch_mode", "MANUAL");
paramsJSON.put("settle_type", "01");
paramsJSON.put("split_rule_source", "TR");
paramsJSON.put("ele_contract_no", req.getEleContractNo());
paramsJSON.put("split_entrust_file_name", req.getSplitEntrustFileName());
paramsJSON.put("split_entrust_file_path", splitEntrustFilePath);
paramsJSON.set("apply_id", applyId);
paramsJSON.set("remark", lakalaRespJSON.getStr("retMsg"));
paramsJSON.set("audit_status_text", paramsJSON.get("remark"));
paramsJSON.set("mch_id", shopMchEntry.getId());
// 新增数据 // 新增数据
// JSON 对象的键名转换为下划线命名
log.debug("准备保存分账业务申请记录"); log.debug("准备保存分账业务申请记录");
LklLedgerMember lklLedgerMemberNew = JSONUtil.toBean(StringUtils.convertCamelToSnake(paramsJSON.toString()), LklLedgerMember.class); // JSON 对象的键名转换为下划线命名
if (!lklLedgerMemberService.addOrUpdateByMerCupNo(lklLedgerMemberNew)) { String snakeCaseJson = StringUtils.convertCamelToSnake(paramsJSON.toString());
log.error("新增或更改拉卡拉分账业务申请信息失败,订单号: {}", req.getOrderNo()); if (StringUtils.isBlank(snakeCaseJson)) {
log.error("JSON转换为下划线命名格式失败商户号: {}", merCupNo);
return Pair.of(false, I18nUtil._("数据格式转换失败!"));
}
LklLedgerMember lklLedgerMemberNew = JSONUtil.toBean(snakeCaseJson, LklLedgerMember.class);
// 根据 mchId 商户号更新记录
if (lklLedgerMemberNew == null || !lklLedgerMemberService.addOrUpdateByMerCupNo(lklLedgerMemberNew)) {
log.error("新增或更改拉卡拉分账业务申请信息失败,订单号: {}", orderNo);
return Pair.of(false, I18nUtil._("新增或更改拉卡拉分账业务申请信息失败!")); return Pair.of(false, I18nUtil._("新增或更改拉卡拉分账业务申请信息失败!"));
} }
log.info("商户分账业务申请提交成功,等待审核,订单号: {}申请ID: {}", req.getOrderNo(), applyId); log.info("商户分账业务{}申请提交成功,等待审核,商户号: {}申请ID: {}", operationType, merCupNo, applyId);
return Pair.of(true, I18nUtil._("商户申请拉卡拉分账业务,提交成功,待审核中!")); return Pair.of(true, I18nUtil._("商户分账业务" + operationType + "申请已提交成功,请耐心等待拉卡拉审核"));
} catch (SDKException e) { } catch (SDKException e) {
log.error("申请拉卡拉分账业务出错,订单号: {}", req.getOrderNo(), e); log.error("申请拉卡拉分账业务出错,商户号: {}", merCupNo, e);
return Pair.of(false, I18nUtil._("申请拉卡拉分账业务出错!")); return Pair.of(false, I18nUtil._("申请拉卡拉分账业务出错!"));
} catch (Exception e) { } catch (Exception e) {
log.error("申请拉卡拉分账业务出现未预期异常,订单号: {}", req.getOrderNo(), e); log.error("申请拉卡拉分账业务出现未预期异常,商户号: {}", merCupNo, e);
return Pair.of(false, I18nUtil._("申请拉卡拉分账业务出现未预期异常!")); return Pair.of(false, I18nUtil._("申请拉卡拉分账业务出现未预期异常!"));
} }
} }
@ -1098,7 +1130,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
} }
} }
Pair<Boolean, String> resultPair = innerApplyLedgerMer(merCupNo); Pair<Boolean, String> resultPair = innerApplyLedgerMer(merCupNo, false);
if (!resultPair.getFirst()) { if (!resultPair.getFirst()) {
return CommonResult.failed(resultPair.getSecond()); return CommonResult.failed(resultPair.getSecond());
} }
@ -1397,7 +1429,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
/** /**
* 内部调用分账关系绑定申请优化版 * 内部调用分账关系绑定申请
* *
* <p>参考https://o.lakala.com/#/home/document/detail?id=386 * <p>参考https://o.lakala.com/#/home/document/detail?id=386
* 为商户绑定分账接收方包括平台方和代理商如有 * 为商户绑定分账接收方包括平台方和代理商如有
@ -1463,11 +1495,14 @@ public class LakalaApiServiceImpl implements LakalaApiService {
int successCount = 0; int successCount = 0;
int totalCount = receiverList.size(); int totalCount = receiverList.size();
// 5. 初始化SDK建议移至类初始化或统一配置 // 清理旧绑定数据
lklLedgerMerReceiverBindService.delByMchIdAndMerCupNo(shopMchEntry.getId(), merCupNo);
// 4. 初始化SDK建议移至类初始化或统一配置
log.debug("初始化拉卡拉SDK"); log.debug("初始化拉卡拉SDK");
initLKLSDK(); initLKLSDK();
// 4. 循环处理接收方绑定 // 5. 循环处理接收方绑定
for (LklLedgerReceiver receiver : receiverList) { for (LklLedgerReceiver receiver : receiverList) {
try { try {
log.debug("开始处理分账接收方绑定,接收方编号: {}", receiver.getReceiver_no()); log.debug("开始处理分账接收方绑定,接收方编号: {}", receiver.getReceiver_no());
@ -1510,18 +1545,24 @@ public class LakalaApiServiceImpl implements LakalaApiService {
continue; // 单个失败不影响其他接收方处理 continue; // 单个失败不影响其他接收方处理
} }
String applyId = (String) respJson.getByPath("respData.applyId");
log.info("拉卡拉分账接收方绑定申请提交成功,订单号: {}申请ID: {}", log.info("拉卡拉分账接收方绑定申请提交成功,订单号: {}申请ID: {}",
orderNo, respJson.getByPath("respData.applyId")); orderNo, applyId);
if (StrUtil.isBlank(applyId)) {
log.error("拉卡拉分账接收方绑定申请提交失败,订单号: {}申请ID为空", orderNo);
continue;
}
// 9. 更新参数并保存记录 // 9. 更新参数并保存记录
paramsJSON.set("orderNo", orderNo); paramsJSON.set("orderNo", orderNo);
paramsJSON.set("apply_id", respJson.getByPath("respData.applyId")); paramsJSON.set("apply_id", applyId);
paramsJSON.set("org_code", orgCode); paramsJSON.set("org_code", orgCode);
paramsJSON.set("receiver_no", receiver.getReceiver_no()); paramsJSON.set("receiver_no", receiver.getReceiver_no());
paramsJSON.set("ret_url", retUrl); paramsJSON.set("ret_url", retUrl);
paramsJSON.set("remark", respJson.getStr("retMsg")); paramsJSON.set("remark", respJson.getStr("retMsg"));
paramsJSON.set("platform_id", receiver.getPlatform_id()); paramsJSON.set("platform_id", receiver.getPlatform_id());
paramsJSON.set("mch_id", lklLedgerMember.getMch_id()); paramsJSON.set("mch_id", shopMchEntry.getId());
// 转换JSON键名格式并保存 // 转换JSON键名格式并保存
String snakeJson = StringUtils.convertCamelToSnake(paramsJSON.toString()); String snakeJson = StringUtils.convertCamelToSnake(paramsJSON.toString());
@ -1553,7 +1594,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
} }
return Pair.of(false, "商家绑定分账接收方失败"); return Pair.of(false, "商家绑定分账接收方失败");
} else if (successCount < totalCount) { } else if (successCount < totalCount) {
String message = "商家绑定分账接收方,部分提交成功(" + successCount + "/" + totalCount + "),待审核通知"; String message = String.format("商家绑定分账接收方,部分提交成功(%d/%d待审核通知", successCount, totalCount);
log.info(message); log.info(message);
return Pair.of(true, message); return Pair.of(true, message);
} else { } else {
@ -1572,7 +1613,6 @@ public class LakalaApiServiceImpl implements LakalaApiService {
* @param request HTTP请求对象 * @param request HTTP请求对象
* @return 返回处理结果JSON包含code和message字段 * @return 返回处理结果JSON包含code和message字段
*/ */
// @Transactional
@Override @Override
public JSONObject applyLedgerMerReceiverBindNotify(HttpServletRequest request) { public JSONObject applyLedgerMerReceiverBindNotify(HttpServletRequest request) {
log.debug("商家绑定分账接收方异步通知回调开始"); log.debug("商家绑定分账接收方异步通知回调开始");
@ -1590,9 +1630,10 @@ public class LakalaApiServiceImpl implements LakalaApiService {
log.debug("##### 商家绑定接收方回调参数:{} ####", paramsJSON); log.debug("##### 商家绑定接收方回调参数:{} ####", paramsJSON);
// 检查参数是否包含必要的applyId
if (paramsJSON == null || StrUtil.isBlank(paramsJSON.getStr("applyId"))) { if (paramsJSON == null || StrUtil.isBlank(paramsJSON.getStr("applyId"))) {
log.error("商家绑定分账接收方通知数据有误"); log.error("商家绑定分账接收方通知数据有误");
return JSONUtil.createObj().put("code", "FAIL").put("message", "商家绑定分账接收方通知数据有误!"); return JSONUtil.createObj().set("code", "FAIL").set("message", "商家绑定分账接收方通知数据有误!");
} }
// 3. 提取核心参数 // 3. 提取核心参数
@ -1600,28 +1641,30 @@ public class LakalaApiServiceImpl implements LakalaApiService {
String applyId = paramsJSON.getStr("applyId"); String applyId = paramsJSON.getStr("applyId");
String auditStatus = paramsJSON.getStr("auditStatus"); String auditStatus = paramsJSON.getStr("auditStatus");
LklLedgerMerReceiverBind lklLedgerMerReceiverBind = lklLedgerMerReceiverBindService.getPlatformByApplyId(applyId); // 4. 根据申请ID获取绑定记录
LklLedgerMerReceiverBind lklLedgerMerReceiverBind = lklLedgerMerReceiverBindService.getMerReceiverByApplyId(applyId);
if (lklLedgerMerReceiverBind == null || CheckUtil.isEmpty(lklLedgerMerReceiverBind.getMch_id())) { if (lklLedgerMerReceiverBind == null || CheckUtil.isEmpty(lklLedgerMerReceiverBind.getMch_id())) {
return JSONUtil.createObj().put("code", "FAIL").put("message", "无法获取到绑定记录!"); log.warn("无法获取到绑定记录applyId: {}", applyId);
return JSONUtil.createObj().set("code", "FAIL").set("message", "无法获取到绑定记录!");
} }
// 4. 参数校验防止空值 // 5. 参数校验防止空值
if (org.apache.commons.lang3.StringUtils.isAnyBlank(merCupNo, applyId, auditStatus)) { if (StrUtil.hasBlank(merCupNo, applyId, auditStatus)) {
String errorMsg = String.format("关键参数缺失merCupNo=%s, applyId=%s, auditStatus=%s", merCupNo, applyId, auditStatus); String errorMsg = String.format("关键参数缺失merCupNo=%s, applyId=%s, auditStatus=%s", merCupNo, applyId, auditStatus);
log.error(errorMsg); log.error(errorMsg);
return JSONUtil.createObj().put("code", "FAIL").put("message", "缺失关键参数"); return JSONUtil.createObj().set("code", "FAIL").set("message", "缺失必要参数");
} }
// 5. 审核状态判断仅处理通过的情况 // 6. 审核状态判断仅处理通过的情况
if (!"1".equals(auditStatus)) { if (!"1".equals(auditStatus)) {
log.warn("商家绑定分账接收方异步通知,申请被驳回不做任何操作,返回状态:{}", auditStatus); log.warn("商家绑定分账接收方异步通知,申请未通过,不做任何操作,返回状态:{}", auditStatus);
shopMchEntryService.updateMerchEntryApprovalByMerCupNo( shopMchEntryService.updateMerchEntryApprovalByMerCupNo(
merCupNo, CommonConstant.MCH_APPR_STA_NOPASS, "分账接收方绑定被驳回" merCupNo, CommonConstant.MCH_APPR_STA_NOPASS, "分账接收方绑定申请未通过"
); );
return JSONUtil.createObj().put("code", "FAIL").put("message", "分账接收方绑定被驳回"); return JSONUtil.createObj().set("code", "FAIL").set("message", "分账接收方绑定申请未通过,不做任何操作");
} }
// 6. 更新绑定记录的状态信息 // 7. 更新绑定记录的状态信息
Boolean updateSuccess = lklLedgerMerReceiverBindService.updateAuditResult( Boolean updateSuccess = lklLedgerMerReceiverBindService.updateAuditResult(
applyId, applyId,
paramsJSON.getStr("merInnerNo"), paramsJSON.getStr("merInnerNo"),
@ -1634,16 +1677,16 @@ public class LakalaApiServiceImpl implements LakalaApiService {
paramsJSON.getStr("remark") paramsJSON.getStr("remark")
); );
if (!updateSuccess) { if (!Boolean.TRUE.equals(updateSuccess)) {
log.error("更新绑定记录失败applyId{}", applyId); log.error("更新绑定记录失败applyId{}", applyId);
return JSONUtil.createObj().put("code", "FAIL").put("message", "更新状态失败"); return JSONUtil.createObj().set("code", "FAIL").set("message", "更新绑定状态失败");
} }
Long mchId = lklLedgerMerReceiverBind.getMch_id(); Long mchId = lklLedgerMerReceiverBind.getMch_id();
// 7. 成功后更新商户绑定状态为已绑定 // 8. 成功后更新商户绑定状态为已绑定
shopMchEntryService.updateMulStatus(mchId, merCupNo, 0, 0, 0, 0, 0, 1, CommonConstant.MCH_APPR_STA_PASS); shopMchEntryService.updateMulStatus(mchId, merCupNo, 0, 0, 0, 0, 0, 1, CommonConstant.MCH_APPR_STA_PASS);
// 创建店铺并初始化 // 9. 创建店铺并初始化
// 新建一个正式的已审核通过的店铺不要抛异常使用补偿机制可以独立初始化店铺 // 新建一个正式的已审核通过的店铺不要抛异常使用补偿机制可以独立初始化店铺
// 重要包含了更改 merchEntryInfo 的状态 使用法人小微个人的手机号注册商家账号作为店铺的管理员 // 重要包含了更改 merchEntryInfo 的状态 使用法人小微个人的手机号注册商家账号作为店铺的管理员
Pair<Integer, String> retPair = shopStoreBaseService.covMerchEntryInfo2StoreInfo(mchId, false); Pair<Integer, String> retPair = shopStoreBaseService.covMerchEntryInfo2StoreInfo(mchId, false);
@ -1652,23 +1695,22 @@ public class LakalaApiServiceImpl implements LakalaApiService {
log.error("进件成功,但初始化店铺失败: mchId={}, reason={}", mchId, retPair.getSecond()); log.error("进件成功,但初始化店铺失败: mchId={}, reason={}", mchId, retPair.getSecond());
} else { } else {
shopMchEntryService.updateMulStatus(mchId, merCupNo, 0, 0, 1, 0, 0, 0, 0); shopMchEntryService.updateMulStatus(mchId, merCupNo, 0, 0, 1, 0, 0, 0, 0);
log.debug("进件成功创建并初始化店铺成功mchId={}", mchId); log.info("进件成功创建并初始化店铺成功mchId={}", mchId);
} }
// 8. 检查商户绑定状态是否完成 更改总的审核状态 // 10. 检查商户绑定状态是否完成 更改总的审核状态
shopMchEntryService.checkMerchEntryFinished(mchId); shopMchEntryService.checkMerchEntryFinished(mchId);
// 9. 日志记录并返回成功响应 // 11. 日志记录并返回成功响应
log.debug("商家绑定分账接收方异步通知处理完成mchId:{} merCupNo{}", mchId, merCupNo); log.info("商家绑定分账接收方异步通知处理完成mchId:{} merCupNo{}", mchId, merCupNo);
return JSONUtil.createObj().put("code", "SUCCESS").put("message", "分账接收方绑定成功"); return JSONUtil.createObj().set("code", "SUCCESS").set("message", "分账接收方绑定成功");
} catch (Exception e) { } catch (Exception e) {
log.error("商家绑定分账接收方异步通知处理发生异常", e); log.error("商家绑定分账接收方异步通知处理发生异常", e);
return JSONUtil.createObj().put("code", "FAIL").put("message", "系统异常"); return JSONUtil.createObj().set("code", "FAIL").set("message", "系统异常");
} }
} }
/** /**
* 查询银行卡Bin信息 * 查询银行卡Bin信息
* 参考https://o.lakala.com/#/home/document/detail?id=179 * 参考https://o.lakala.com/#/home/document/detail?id=179

View File

@ -14,41 +14,77 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.suisung.mall.common.constant.CommonConstant; import com.suisung.mall.common.constant.CommonConstant;
import com.suisung.mall.common.modules.lakala.LklLedgerMerReceiverBind; import com.suisung.mall.common.modules.lakala.LklLedgerMerReceiverBind;
import com.suisung.mall.common.utils.CheckUtil;
import com.suisung.mall.core.web.service.impl.BaseServiceImpl; import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
import com.suisung.mall.shop.lakala.mapper.LklLedgerMerReceiverBindMapper; import com.suisung.mall.shop.lakala.mapper.LklLedgerMerReceiverBindMapper;
import com.suisung.mall.shop.lakala.service.LklLedgerMerReceiverBindService; import com.suisung.mall.shop.lakala.service.LklLedgerMerReceiverBindService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
@Slf4j
@Service @Service
public class LklLedgerMerReceiverBindServiceImpl extends BaseServiceImpl<LklLedgerMerReceiverBindMapper, LklLedgerMerReceiverBind> implements LklLedgerMerReceiverBindService { public class LklLedgerMerReceiverBindServiceImpl extends BaseServiceImpl<LklLedgerMerReceiverBindMapper, LklLedgerMerReceiverBind> implements LklLedgerMerReceiverBindService {
/** /**
* 根据接收方编号新增或更新记录 * 根据商户编号和接收方编号新增或更新记录
* *
* @param record * @param record 分账绑定记录
* @return * @return 操作结果成功返回true失败返回false
*/ */
@Override @Override
public Boolean addOrUpdateByMerCupNoReceiverNo(LklLedgerMerReceiverBind record) { public Boolean addOrUpdateByMerCupNoReceiverNo(LklLedgerMerReceiverBind record) {
if (record == null || StrUtil.isBlank(record.getMer_cup_no()) || StrUtil.isBlank(record.getReceiver_no())) { // 参数校验
if (record == null || StrUtil.hasBlank(record.getMer_cup_no(), record.getReceiver_no())) {
log.warn("分账绑定记录参数校验失败: record为空或关键字段缺失, mer_cup_no={}, receiver_no={}",
record != null ? record.getMer_cup_no() : "null",
record != null ? record.getReceiver_no() : "null");
return false; return false;
} }
// 构造查询条件
QueryWrapper<LklLedgerMerReceiverBind> queryWrapper = new QueryWrapper<>(); QueryWrapper<LklLedgerMerReceiverBind> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("mer_cup_no", record.getMer_cup_no()) queryWrapper.eq("mer_cup_no", record.getMer_cup_no())
.eq("receiver_no", record.getReceiver_no()) .eq("receiver_no", record.getReceiver_no())
.eq("audit_status", CommonConstant.Enable); .eq("audit_status", CommonConstant.Enable)
List<LklLedgerMerReceiverBind> existsRecordList = list(queryWrapper); .orderByAsc("id");
if (!CollectionUtil.isEmpty(existsRecordList)
&& existsRecordList.get(0) != null // 如果商户ID不为空则增加商户ID查询条件
&& existsRecordList.get(0).getId() > 0) { if (CheckUtil.isNotEmpty(record.getMch_id())) {
// update queryWrapper.eq("mch_id", record.getMch_id());
record.setId(existsRecordList.get(0).getId());
return updateById(record);
} }
return add(record); // 查询已存在的记录
LklLedgerMerReceiverBind existsRecord = findOne(queryWrapper);
// 如果存在有效记录则更新该记录
if (existsRecord != null && existsRecord.getId() != null && existsRecord.getId() > 0) {
log.debug("分账绑定记录已存在,执行更新操作: mer_cup_no={}, receiver_no={}, id={}",
record.getMer_cup_no(), record.getReceiver_no(), existsRecord.getId());
record.setId(existsRecord.getId());
boolean updateResult = updateById(record);
if (updateResult) {
log.info("分账绑定记录更新成功: mer_cup_no={}, receiver_no={}, id={}",
record.getMer_cup_no(), record.getReceiver_no(), record.getId());
} else {
log.error("分账绑定记录更新失败: mer_cup_no={}, receiver_no={}, id={}",
record.getMer_cup_no(), record.getReceiver_no(), record.getId());
}
return updateResult;
}
// 不存在有效记录则新增记录
log.debug("分账绑定记录不存在,执行新增操作: mer_cup_no={}, receiver_no={}",
record.getMer_cup_no(), record.getReceiver_no());
boolean addResult = add(record);
if (addResult) {
log.info("分账绑定记录新增成功: mer_cup_no={}, receiver_no={}",
record.getMer_cup_no(), record.getReceiver_no());
} else {
log.error("分账绑定记录新增失败: mer_cup_no={}, receiver_no={}",
record.getMer_cup_no(), record.getReceiver_no());
}
return addResult;
} }
/** /**
@ -122,7 +158,7 @@ public class LklLedgerMerReceiverBindServiceImpl extends BaseServiceImpl<LklLedg
* @return * @return
*/ */
@Override @Override
public LklLedgerMerReceiverBind getPlatformByApplyId(String applyId) { public LklLedgerMerReceiverBind getMerReceiverByApplyId(String applyId) {
if (StrUtil.isBlank(applyId)) { if (StrUtil.isBlank(applyId)) {
return null; return null;
} }
@ -171,50 +207,77 @@ public class LklLedgerMerReceiverBindServiceImpl extends BaseServiceImpl<LklLedg
/** /**
* 更新审核结果 * 更新审核结果
* *
* @param applyId * @param applyId 申请ID
* @param merInnerNo * @param merInnerNo 商户内部编号
* @param merCupNo * @param merCupNo 商户银联编号
* @param receiverNo * @param receiverNo 接收方编号
* @param entrustFileName * @param entrustFileName 委托文件名
* @param entrustFilePath * @param entrustFilePath 委托文件路径
* @param auditStatus * @param auditStatus 审核状态
* @param auditStatusText * @param auditStatusText 审核状态文本
* @param remark * @param remark 备注
* @return * @return 更新成功返回true失败返回false
*/ */
@Override @Override
public Boolean updateAuditResult(String applyId, String merInnerNo, String merCupNo, String receiverNo, String entrustFileName, String entrustFilePath, String auditStatus, String auditStatusText, String remark) { public Boolean updateAuditResult(String applyId, String merInnerNo, String merCupNo, String receiverNo,
if (StrUtil.isBlank(applyId) || StrUtil.isBlank(merCupNo) || StrUtil.isBlank(receiverNo) || StrUtil.isBlank(auditStatus)) { String entrustFileName, String entrustFilePath, String auditStatus,
String auditStatusText, String remark) {
// 检查必需参数是否为空
if (StrUtil.hasBlank(applyId, merCupNo, receiverNo, auditStatus)) {
return false; return false;
} }
UpdateWrapper<LklLedgerMerReceiverBind> updateWrapper = new UpdateWrapper<>(); UpdateWrapper<LklLedgerMerReceiverBind> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("apply_id", applyId); updateWrapper.eq("apply_id", applyId);
if (StrUtil.isNotBlank(merInnerNo)) {
// 只有当参数不为空时才更新对应字段
updateWrapper.set("mer_inner_no", merInnerNo); updateWrapper.set("mer_inner_no", merInnerNo);
}
if (StrUtil.isNotBlank(merCupNo)) {
updateWrapper.set("mer_cup_no", merCupNo); updateWrapper.set("mer_cup_no", merCupNo);
}
if (StrUtil.isNotBlank(receiverNo)) {
updateWrapper.set("receiver_no", receiverNo); updateWrapper.set("receiver_no", receiverNo);
}
if (StrUtil.isNotBlank(entrustFileName)) {
updateWrapper.set("entrust_file_name", entrustFileName); updateWrapper.set("entrust_file_name", entrustFileName);
}
if (StrUtil.isNotBlank(entrustFilePath)) {
updateWrapper.set("entrust_file_path", entrustFilePath); updateWrapper.set("entrust_file_path", entrustFilePath);
}
if (StrUtil.isNotBlank(auditStatus)) {
updateWrapper.set("audit_status", auditStatus); updateWrapper.set("audit_status", auditStatus);
}
if (StrUtil.isNotBlank(auditStatusText)) {
updateWrapper.set("audit_status_text", auditStatusText); updateWrapper.set("audit_status_text", auditStatusText);
}
if (StrUtil.isNotBlank(remark)) {
updateWrapper.set("remark", remark); updateWrapper.set("remark", remark);
}
return update(updateWrapper); return update(updateWrapper);
} }
/**
* 根据商户编号删除商户分账接收方绑定记录
*
* @param mchId 商户ID
* @param merCupNo 商户银联编号
* @return 删除成功返回true失败返回false
*/
@Override
public Boolean delByMchIdAndMerCupNo(Long mchId, String merCupNo) {
try {
log.debug("开始删除商户分账接收方绑定记录mchId={}, merCupNo={}", mchId, merCupNo);
if (CheckUtil.isEmpty(mchId) && StrUtil.isBlank(merCupNo)) {
log.warn("删除商户分账接收方绑定记录参数校验失败mchId和merCupNo不能同时为空");
return false;
}
QueryWrapper<LklLedgerMerReceiverBind> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("mer_cup_no", merCupNo)
.eq("mch_id", mchId);
boolean removeResult = remove(queryWrapper);
if (removeResult) {
log.info("商户分账接收方绑定记录删除成功mchId={}, merCupNo={}", mchId, merCupNo);
} else {
log.warn("商户分账接收方绑定记录删除失败或未找到匹配记录mchId={}, merCupNo={}", mchId, merCupNo);
}
return removeResult;
} catch (Exception e) {
log.error("删除商户分账接收方绑定记录时发生异常mchId={}, merCupNo={}", mchId, merCupNo, e);
return false;
}
}
} }

View File

@ -137,14 +137,14 @@ public class LklLedgerReceiverServiceImpl extends BaseServiceImpl<LklLedgerRecei
* 通过平台方代理商 ID 记录信息转成 Lakala 接收方记录 * 通过平台方代理商 ID 记录信息转成 Lakala 接收方记录
* 平台方一定要获取如果有代理商也要获取 * 平台方一定要获取如果有代理商也要获取
* *
* @param platformId * @param distributorId 代理商id非平台Id
* @return * @return
*/ */
@Override @Override
public JSONArray buildApplyLedgerReceiverReqParams(Long platformId) { public JSONArray buildApplyLedgerReceiverReqParams(Long distributorId) {
List<Long> ids = new ArrayList<>(); List<Long> ids = new ArrayList<>();
if (platformId != null && platformId > 0) { if (distributorId != null && distributorId > 0) {
ids.add(platformId); ids.add(distributorId);
} }
// 获取平台记录和代理商记录 // 获取平台记录和代理商记录
List<EsignPlatformInfo> esignPlatformInfoList = esignPlatformInfoService.getDistributorAndPlatformByIds(ids.toArray(new Long[0])); List<EsignPlatformInfo> esignPlatformInfoList = esignPlatformInfoService.getDistributorAndPlatformByIds(ids.toArray(new Long[0]));
@ -217,13 +217,13 @@ public class LklLedgerReceiverServiceImpl extends BaseServiceImpl<LklLedgerRecei
* *
* @param mchId * @param mchId
* @param merCupNo 用于标记接收方绑定merCupNo商家 * @param merCupNo 用于标记接收方绑定merCupNo商家
* @param platformId * @param distributorId 代理商id非平台id
* @return * @return
*/ */
@Override @Override
public Boolean innerApplyLedgerReceiver(Long mchId, String merCupNo, Long platformId) { public Boolean innerApplyLedgerReceiver(Long mchId, String merCupNo, Long distributorId) {
// 接收方至少有一个平台方 // 接收方至少有一个平台方
JSONArray buildApplyLedgerReceiverReqParams = buildApplyLedgerReceiverReqParams(platformId); JSONArray buildApplyLedgerReceiverReqParams = buildApplyLedgerReceiverReqParams(distributorId);
if (buildApplyLedgerReceiverReqParams == null || buildApplyLedgerReceiverReqParams.isEmpty()) { if (buildApplyLedgerReceiverReqParams == null || buildApplyLedgerReceiverReqParams.isEmpty()) {
log.error("先新增平台或代理商信息"); log.error("先新增平台或代理商信息");
return false; return false;

View File

@ -22,7 +22,6 @@ import com.suisung.mall.common.modules.store.ShopMchEntry;
import com.suisung.mall.common.pojo.to.AddressParseResultTO; import com.suisung.mall.common.pojo.to.AddressParseResultTO;
import com.suisung.mall.common.service.impl.CommonService; import com.suisung.mall.common.service.impl.CommonService;
import com.suisung.mall.common.utils.AddressUtil; import com.suisung.mall.common.utils.AddressUtil;
import com.suisung.mall.common.utils.CheckUtil;
import com.suisung.mall.common.utils.RestTemplateHttpUtil; import com.suisung.mall.common.utils.RestTemplateHttpUtil;
import com.suisung.mall.common.utils.UploadUtil; import com.suisung.mall.common.utils.UploadUtil;
import com.suisung.mall.core.web.service.RedisService; import com.suisung.mall.core.web.service.RedisService;
@ -361,9 +360,9 @@ public class LklTkServiceImpl {
// 判断是否已经进件过进件过执行下一步操作进件异步通知的相关操作 // 判断是否已经进件过进件过执行下一步操作进件异步通知的相关操作
// 密集操作进件审核通过之后要下一步流程操作申请分账业务创建分账接收方 // 密集操作进件审核通过之后要下一步流程操作申请分账业务创建分账接收方
// && CheckUtil.isNotEmpty(shopMchEntry.getDistributor_id())
if (CommonConstant.Enable.equals(shopMchEntry.getHas_apply_mer()) if (CommonConstant.Enable.equals(shopMchEntry.getHas_apply_mer())
&& CheckUtil.isNotEmpty(shopMchEntry.getDistributor_id()) && !StrUtil.hasBlank(shopMchEntry.getLkl_mer_cup_no(), shopMchEntry.getLkl_term_no())) {
&& StrUtil.isAllNotBlank(shopMchEntry.getLkl_mer_cup_no(), shopMchEntry.getLkl_term_no())) {
// 已经进件过了执行下一步操作 // 已经进件过了执行下一步操作
logger.info("商户已进件执行后续操作商户ID: {}", mchId); logger.info("商户已进件执行后续操作商户ID: {}", mchId);
registrationMerchantAfterHook(mchId, shopMchEntry.getLkl_mer_cup_no(), shopMchEntry.getDistributor_id()); registrationMerchantAfterHook(mchId, shopMchEntry.getLkl_mer_cup_no(), shopMchEntry.getDistributor_id());
@ -733,7 +732,7 @@ public class LklTkServiceImpl {
logger.info("商家进件已成功,下一步申请拉卡拉分账业务,再创建分账接收方!"); logger.info("商家进件已成功,下一步申请拉卡拉分账业务,再创建分账接收方!");
// 重要给商家申请分账业务务必检查是否申请过申请过忽略 // 重要给商家申请分账业务务必检查是否申请过申请过忽略
Pair<Boolean, String> applyRetPair = lakalaApiService.innerApplyLedgerMer(merCupNo); Pair<Boolean, String> applyRetPair = lakalaApiService.innerApplyLedgerMer(merCupNo, true);
if (!applyRetPair.getFirst()) { if (!applyRetPair.getFirst()) {
String message = "提交分账业务申请异常:" + applyRetPair.getSecond(); String message = "提交分账业务申请异常:" + applyRetPair.getSecond();
shopMchEntryService.updateMerchEntryApprovalByMchId(mchId, null, message); shopMchEntryService.updateMerchEntryApprovalByMchId(mchId, null, message);

View File

@ -168,7 +168,7 @@ lakala:
client_id: lsycs client_id: lsycs
client_secret: XPa1HB5d55Ig0qV8 client_secret: XPa1HB5d55Ig0qV8
user_no: 29153396 user_no: 29153396
split_lowest_ratio: 94.00 split_lowest_ratio: 20.00
activity_id: 687 activity_id: 687
wx_fee: 0.6 # 微信手续费 6/1000 wx_fee: 0.6 # 微信手续费 6/1000
api_pub_key_path: payKey/lakala/dev/tk_api_public_key.txt api_pub_key_path: payKey/lakala/dev/tk_api_public_key.txt

View File

@ -167,7 +167,7 @@ lakala:
client_id: gpff client_id: gpff
client_secret: uRjvaJkWS1A0VsAv client_secret: uRjvaJkWS1A0VsAv
user_no: 22874827 user_no: 22874827
split_lowest_ratio: 94.00 split_lowest_ratio: 20.00
activity_id: 208 activity_id: 208
wx_fee: 0.25 # 微信手续费 千分之2.5 wx_fee: 0.25 # 微信手续费 千分之2.5
api_pub_key_path: payKey/lakala/prod/tk_api_public_key.txt api_pub_key_path: payKey/lakala/prod/tk_api_public_key.txt

View File

@ -183,7 +183,7 @@ lakala:
client_id: gpff client_id: gpff
client_secret: uRjvaJkWS1A0VsAv client_secret: uRjvaJkWS1A0VsAv
user_no: 22874827 user_no: 22874827
split_lowest_ratio: 94.00 split_lowest_ratio: 20.00
activity_id: 208 activity_id: 208
wx_fee: 0.25 # 微信手续费 千分之2.5 wx_fee: 0.25 # 微信手续费 千分之2.5
api_pub_key_path: payKey/lakala/prod/tk_api_public_key.txt api_pub_key_path: payKey/lakala/prod/tk_api_public_key.txt

View File

@ -172,7 +172,7 @@ lakala:
client_id: lsycs client_id: lsycs
client_secret: XPa1HB5d55Ig0qV8 client_secret: XPa1HB5d55Ig0qV8
user_no: 29153396 user_no: 29153396
split_lowest_ratio: 94.00 split_lowest_ratio: 20.00
activity_id: 687 activity_id: 687
wx_fee: 0.6 # 微信手续费 6/1000 wx_fee: 0.6 # 微信手续费 6/1000
api_pub_key_path: payKey/lakala/dev/tk_api_public_key.txt api_pub_key_path: payKey/lakala/dev/tk_api_public_key.txt

View File

@ -172,7 +172,7 @@ lakala:
client_id: lsycs client_id: lsycs
client_secret: XPa1HB5d55Ig0qV8 client_secret: XPa1HB5d55Ig0qV8
user_no: 29153396 user_no: 29153396
split_lowest_ratio: 94.00 split_lowest_ratio: 20.00
activity_id: 687 activity_id: 687
wx_fee: 0.6 # 微信手续费 6/1000 wx_fee: 0.6 # 微信手续费 6/1000
api_pub_key_path: payKey/lakala/dev/tk_api_public_key.txt api_pub_key_path: payKey/lakala/dev/tk_api_public_key.txt