优化 分账接收方绑定
This commit is contained in:
parent
6f56810fdf
commit
422bd92f4a
@ -310,7 +310,7 @@ public class EsignContractServiceImpl extends BaseServiceImpl<EsignContractMappe
|
||||
if (success && StrUtil.isNotBlank(downloadUrl)) {
|
||||
|
||||
// 1、(电子合同)给商家申请分账功能使用;务必检查是否申请过?申请过忽略
|
||||
Pair<Boolean, String> retPair = lakalaApiService.innerApplyLedgerMer(esignContract.getMch_mobile());
|
||||
Pair<Boolean, String> retPair = lakalaApiService.innerApplyLedgerMer("", false);
|
||||
if (!retPair.getFirst()) {
|
||||
log.error("商家申请分账业务异常:{}", retPair.getSecond());
|
||||
}
|
||||
|
||||
@ -90,10 +90,11 @@ public interface LakalaApiService {
|
||||
/**
|
||||
* 内部调用:商户分账业务开通申请
|
||||
*
|
||||
* @param merCupNo
|
||||
* @param merCupNo 商户号
|
||||
* @param forceReApply 如果已申请成功,是否可以重新申请更改?
|
||||
* @return
|
||||
*/
|
||||
Pair<Boolean, String> innerApplyLedgerMer(String merCupNo);
|
||||
Pair<Boolean, String> innerApplyLedgerMer(String merCupNo, Boolean forceReApply);
|
||||
|
||||
/**
|
||||
* 发货类交易确认收货通知
|
||||
|
||||
@ -57,7 +57,7 @@ public interface LklLedgerMerReceiverBindService extends IBaseService<LklLedgerM
|
||||
* @param applyId
|
||||
* @return
|
||||
*/
|
||||
LklLedgerMerReceiverBind getPlatformByApplyId(String applyId);
|
||||
LklLedgerMerReceiverBind getMerReceiverByApplyId(String applyId);
|
||||
|
||||
/**
|
||||
* 根据商户编号查询一条代理商绑定记录
|
||||
@ -91,4 +91,13 @@ public interface LklLedgerMerReceiverBindService extends IBaseService<LklLedgerM
|
||||
* @return
|
||||
*/
|
||||
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);
|
||||
}
|
||||
|
||||
@ -579,17 +579,17 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
return Pair.of(true, "商家入网申请电子合同成功");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 商户分账业务开通申请
|
||||
*
|
||||
* <p>向拉卡拉提交商户分账业务开通申请,包括上传分账授权委托书等必要文件。
|
||||
*
|
||||
* @param merCupNo 拉卡拉商户号(银联商户号)
|
||||
* @param merCupNo 拉卡拉商户号(银联商户号)
|
||||
* @param forceReApply 如果已申请成功,是否可以重新申请更改?
|
||||
* @return Pair对象,第一个元素表示操作是否成功,第二个元素为操作结果信息
|
||||
*/
|
||||
@Override
|
||||
public Pair<Boolean, String> innerApplyLedgerMer(String merCupNo) {
|
||||
public Pair<Boolean, String> innerApplyLedgerMer(String merCupNo, Boolean forceReApply) {
|
||||
log.info("开始执行商户分账业务申请流程,商户号: {}", merCupNo);
|
||||
|
||||
// 参数校验
|
||||
@ -606,115 +606,147 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
return Pair.of(false, I18nUtil._("商家入驻信息不存在!"));
|
||||
}
|
||||
|
||||
// 商户是否已经已申请过分账业务
|
||||
boolean hasApplyMer = false;
|
||||
|
||||
// 判断是否已经申请过?
|
||||
log.debug("检查商户是否已申请过分账业务,商户号: {}", merCupNo);
|
||||
LklLedgerMember lklLedgerMember = lklLedgerMemberService.getByMerCupNo(merCupNo);
|
||||
if (lklLedgerMember != null && Integer.valueOf(1).equals(lklLedgerMember.getAudit_status())) {
|
||||
log.info("商户已申请过分账业务,无需重复申请,商户号: {}", merCupNo);
|
||||
return Pair.of(true, I18nUtil._("商家已经申请过了!"));
|
||||
if (lklLedgerMember != null
|
||||
&& 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._("商家已经申请过了!"));
|
||||
}
|
||||
}
|
||||
|
||||
// 检查更新店铺初始化状态
|
||||
log.debug("检查并更新店铺初始化状态,商户ID: {}", shopMchEntry.getId());
|
||||
shopMchEntryService.checkMchEntryStoreStatus(shopMchEntry.getId(), shopMchEntry);
|
||||
|
||||
// 1. 配置初始化
|
||||
log.debug("初始化拉卡拉SDK");
|
||||
initLKLSDK();
|
||||
|
||||
//2. 装配数据
|
||||
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");
|
||||
req.setSplitEntrustFilePath(splitEntrustFilePath); //比如:MMS/20250519/165150-39c8bbca513b4cccab1e942999021fd6.pdf;
|
||||
|
||||
String domain = projectDomain;
|
||||
if (isProdProject()) {
|
||||
domain += "/api";
|
||||
}
|
||||
// 给拉卡拉通知的回调地址
|
||||
String retUrl = domain + "/mobile/shop/lakala/ledger/applyLedgerMerNotify";
|
||||
req.setRetUrl(retUrl);
|
||||
|
||||
log.debug("商户分账业务申请请求参数: {}", JSONUtil.toJsonStr(req));
|
||||
// log.debug("检查并更新店铺初始化状态,商户ID: {}", shopMchEntry.getId());
|
||||
// shopMchEntryService.checkMchEntryStoreStatus(shopMchEntry.getId(), shopMchEntry);
|
||||
|
||||
try {
|
||||
//3. 发送请求
|
||||
log.info("开始向拉卡拉提交分账业务申请,订单号: {}", req.getOrderNo());
|
||||
String responseStr = LKLSDK.httpPost(req);
|
||||
if (StrUtil.isBlank(responseStr)) {
|
||||
log.error("申请拉卡拉分账业务无返回值,订单号: {}", req.getOrderNo());
|
||||
return Pair.of(false, I18nUtil._("申请拉卡拉分账业务无返回值!"));
|
||||
// 1. 配置初始化
|
||||
log.debug("初始化拉卡拉SDK");
|
||||
initLKLSDK();
|
||||
|
||||
//2. 装配数据
|
||||
log.debug("装配分账业务申请请求参数");
|
||||
String splitEntrustFilePath = shopMchEntry.getLkl_ec_file_path(); //fileUploadResp.getStr("attFileId");
|
||||
|
||||
// 给拉卡拉通知的回调地址
|
||||
String notifyUrl = projectDomain + "/api/mobile/shop/lakala/ledger/applyLedgerMerNotify";
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
log.debug("商户分账业务申请响应数据: {}", responseStr);
|
||||
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 = "开通";
|
||||
}
|
||||
|
||||
//3. 发送请求
|
||||
log.info("开始向拉卡拉提交分账业务{}申请,商户号: {}", operationType, merCupNo);
|
||||
String responseStr = LKLSDK.httpPost(postUrl, paramsJSON.toString());
|
||||
log.debug("商户分账业务{}申请请求参数: 请求地址:{}\n {}\n 响应数据:{}", operationType, postUrl, paramsJSON, responseStr);
|
||||
if (StrUtil.isBlank(responseStr)) {
|
||||
log.error("申请拉卡拉分账业务{}无返回值,商户号: {}", operationType, merCupNo);
|
||||
return Pair.of(false, I18nUtil._("申请拉卡拉分账业务无返回值!"));
|
||||
}
|
||||
|
||||
// 成功返回示例:{'retCode':'000000','retMsg':'申请已受理,请等待审核结果','respData':{'version':'1.0','orderNo':'KFPT20230223181025407788734','orgCode':'1','applyId':681201215598657536}}
|
||||
JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr);
|
||||
if (lakalaRespJSON == null) {
|
||||
log.error("申请拉卡拉分账业务返回值异常,订单号: {}", req.getOrderNo());
|
||||
log.error("申请拉卡拉分账业务{}返回值异常,商户号: {}", operationType, merCupNo);
|
||||
return Pair.of(false, I18nUtil._("申请拉卡拉分账业务返回值异常!"));
|
||||
}
|
||||
|
||||
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");
|
||||
log.warn("拉卡拉分账业务申请被拒绝,订单号: {},返回码: {},返回信息: {}",
|
||||
req.getOrderNo(), lakalaRespJSON.getStr("retCode"), retMsg);
|
||||
return Pair.of(false, retMsg);
|
||||
log.warn("拉卡拉分账业务{}申请被拒绝,商户号: {},返回码: {},返回信息: {}",
|
||||
operationType, merCupNo, retCode, retMsg);
|
||||
// 提供默认错误消息,防止retMsg为null
|
||||
String errorMsg = StringUtils.isNotBlank(retMsg) ? retMsg : "拉卡拉分账业务申请被拒绝";
|
||||
return Pair.of(false, errorMsg);
|
||||
}
|
||||
|
||||
JSONObject paramsJSON = new JSONObject();
|
||||
paramsJSON.put("orderNo", req.getOrderNo());
|
||||
paramsJSON.put("org_code", orgCode);
|
||||
paramsJSON.put("version", "2.0");
|
||||
paramsJSON.put("ret_url", retUrl);
|
||||
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());
|
||||
paramsJSON.set("applyId", applyId);
|
||||
String retMsg = lakalaRespJSON.getStr("retMsg");
|
||||
paramsJSON.set("remark", retMsg);
|
||||
paramsJSON.set("auditStatusText", retMsg); // 直接使用retMsg,避免null值
|
||||
paramsJSON.set("mchId", shopMchEntry.getId());
|
||||
|
||||
// 新增数据
|
||||
// 将 JSON 对象的键名转换为下划线命名
|
||||
log.debug("准备保存分账业务申请记录");
|
||||
LklLedgerMember lklLedgerMemberNew = JSONUtil.toBean(StringUtils.convertCamelToSnake(paramsJSON.toString()), LklLedgerMember.class);
|
||||
if (!lklLedgerMemberService.addOrUpdateByMerCupNo(lklLedgerMemberNew)) {
|
||||
log.error("新增或更改拉卡拉分账业务申请信息失败,订单号: {}", req.getOrderNo());
|
||||
// 将 JSON 对象的键名转换为下划线命名
|
||||
String snakeCaseJson = StringUtils.convertCamelToSnake(paramsJSON.toString());
|
||||
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._("新增或更改拉卡拉分账业务申请信息失败!"));
|
||||
}
|
||||
|
||||
log.info("商户分账业务申请提交成功,等待审核,订单号: {},申请ID: {}", req.getOrderNo(), applyId);
|
||||
return Pair.of(true, I18nUtil._("商户申请拉卡拉分账业务,提交成功,待审核中!"));
|
||||
log.info("商户分账业务{}申请提交成功,等待审核,商户号: {},申请ID: {}", operationType, merCupNo, applyId);
|
||||
return Pair.of(true, I18nUtil._("商户分账业务" + operationType + "申请已提交成功,请耐心等待拉卡拉审核!"));
|
||||
} catch (SDKException e) {
|
||||
log.error("申请拉卡拉分账业务出错,订单号: {}", req.getOrderNo(), e);
|
||||
log.error("申请拉卡拉分账业务出错,商户号: {}", merCupNo, e);
|
||||
return Pair.of(false, I18nUtil._("申请拉卡拉分账业务出错!"));
|
||||
} catch (Exception e) {
|
||||
log.error("申请拉卡拉分账业务出现未预期异常,订单号: {}", req.getOrderNo(), e);
|
||||
log.error("申请拉卡拉分账业务出现未预期异常,商户号: {}", merCupNo, e);
|
||||
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()) {
|
||||
return CommonResult.failed(resultPair.getSecond());
|
||||
}
|
||||
@ -1397,7 +1429,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
|
||||
|
||||
/**
|
||||
* 内部调用分账关系绑定申请(优化版)
|
||||
* 内部调用分账关系绑定申请
|
||||
*
|
||||
* <p>参考:https://o.lakala.com/#/home/document/detail?id=386
|
||||
* 为商户绑定分账接收方,包括平台方和代理商(如有)。
|
||||
@ -1463,11 +1495,14 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
int successCount = 0;
|
||||
int totalCount = receiverList.size();
|
||||
|
||||
// 5. 初始化SDK(建议移至类初始化或统一配置)
|
||||
// 清理旧绑定数据
|
||||
lklLedgerMerReceiverBindService.delByMchIdAndMerCupNo(shopMchEntry.getId(), merCupNo);
|
||||
|
||||
// 4. 初始化SDK(建议移至类初始化或统一配置)
|
||||
log.debug("初始化拉卡拉SDK");
|
||||
initLKLSDK();
|
||||
|
||||
// 4. 循环处理接收方绑定
|
||||
// 5. 循环处理接收方绑定
|
||||
for (LklLedgerReceiver receiver : receiverList) {
|
||||
try {
|
||||
log.debug("开始处理分账接收方绑定,接收方编号: {}", receiver.getReceiver_no());
|
||||
@ -1510,18 +1545,24 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
continue; // 单个失败不影响其他接收方处理
|
||||
}
|
||||
|
||||
String applyId = (String) respJson.getByPath("respData.applyId");
|
||||
log.info("拉卡拉分账接收方绑定申请提交成功,订单号: {},申请ID: {}",
|
||||
orderNo, respJson.getByPath("respData.applyId"));
|
||||
orderNo, applyId);
|
||||
|
||||
if (StrUtil.isBlank(applyId)) {
|
||||
log.error("拉卡拉分账接收方绑定申请提交失败,订单号: {},申请ID为空", orderNo);
|
||||
continue;
|
||||
}
|
||||
|
||||
// 9. 更新参数并保存记录
|
||||
paramsJSON.set("orderNo", orderNo);
|
||||
paramsJSON.set("apply_id", respJson.getByPath("respData.applyId"));
|
||||
paramsJSON.set("apply_id", applyId);
|
||||
paramsJSON.set("org_code", orgCode);
|
||||
paramsJSON.set("receiver_no", receiver.getReceiver_no());
|
||||
paramsJSON.set("ret_url", retUrl);
|
||||
paramsJSON.set("remark", respJson.getStr("retMsg"));
|
||||
paramsJSON.set("platform_id", receiver.getPlatform_id());
|
||||
paramsJSON.set("mch_id", lklLedgerMember.getMch_id());
|
||||
paramsJSON.set("mch_id", shopMchEntry.getId());
|
||||
|
||||
// 转换JSON键名格式并保存
|
||||
String snakeJson = StringUtils.convertCamelToSnake(paramsJSON.toString());
|
||||
@ -1553,7 +1594,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
}
|
||||
return Pair.of(false, "商家绑定分账接收方失败");
|
||||
} else if (successCount < totalCount) {
|
||||
String message = "商家绑定分账接收方,部分提交成功(" + successCount + "/" + totalCount + "),待审核通知";
|
||||
String message = String.format("商家绑定分账接收方,部分提交成功(%d/%d),待审核通知", successCount, totalCount);
|
||||
log.info(message);
|
||||
return Pair.of(true, message);
|
||||
} else {
|
||||
@ -1572,7 +1613,6 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
* @param request HTTP请求对象
|
||||
* @return 返回处理结果JSON,包含code和message字段
|
||||
*/
|
||||
// @Transactional
|
||||
@Override
|
||||
public JSONObject applyLedgerMerReceiverBindNotify(HttpServletRequest request) {
|
||||
log.debug("商家绑定分账接收方异步通知回调开始");
|
||||
@ -1590,9 +1630,10 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
|
||||
log.debug("##### 商家绑定接收方回调参数:{} ####", paramsJSON);
|
||||
|
||||
// 检查参数是否包含必要的applyId
|
||||
if (paramsJSON == null || StrUtil.isBlank(paramsJSON.getStr("applyId"))) {
|
||||
log.error("商家绑定分账接收方通知数据有误");
|
||||
return JSONUtil.createObj().put("code", "FAIL").put("message", "商家绑定分账接收方通知数据有误!");
|
||||
return JSONUtil.createObj().set("code", "FAIL").set("message", "商家绑定分账接收方通知数据有误!");
|
||||
}
|
||||
|
||||
// 3. 提取核心参数
|
||||
@ -1600,28 +1641,30 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
String applyId = paramsJSON.getStr("applyId");
|
||||
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())) {
|
||||
return JSONUtil.createObj().put("code", "FAIL").put("message", "无法获取到绑定记录!");
|
||||
log.warn("无法获取到绑定记录,applyId: {}", applyId);
|
||||
return JSONUtil.createObj().set("code", "FAIL").set("message", "无法获取到绑定记录!");
|
||||
}
|
||||
|
||||
// 4. 参数校验(防止空值)
|
||||
if (org.apache.commons.lang3.StringUtils.isAnyBlank(merCupNo, applyId, auditStatus)) {
|
||||
// 5. 参数校验(防止空值)
|
||||
if (StrUtil.hasBlank(merCupNo, applyId, auditStatus)) {
|
||||
String errorMsg = String.format("关键参数缺失:merCupNo=%s, applyId=%s, auditStatus=%s", merCupNo, applyId, auditStatus);
|
||||
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)) {
|
||||
log.warn("商家绑定分账接收方异步通知,申请被驳回不做任何操作,返回状态:{}", auditStatus);
|
||||
log.warn("商家绑定分账接收方异步通知,申请未通过,不做任何操作,返回状态:{}", auditStatus);
|
||||
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(
|
||||
applyId,
|
||||
paramsJSON.getStr("merInnerNo"),
|
||||
@ -1634,16 +1677,16 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
paramsJSON.getStr("remark")
|
||||
);
|
||||
|
||||
if (!updateSuccess) {
|
||||
if (!Boolean.TRUE.equals(updateSuccess)) {
|
||||
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();
|
||||
// 7. 成功后更新商户绑定状态为已绑定
|
||||
// 8. 成功后更新商户绑定状态为已绑定
|
||||
shopMchEntryService.updateMulStatus(mchId, merCupNo, 0, 0, 0, 0, 0, 1, CommonConstant.MCH_APPR_STA_PASS);
|
||||
|
||||
// 创建店铺,并初始化
|
||||
// 9. 创建店铺,并初始化
|
||||
// 新建一个正式的已审核通过的店铺,不要抛异常,使用补偿机制,可以独立初始化店铺
|
||||
// 重要:包含了更改 merchEntryInfo 的状态, 使用法人、小微个人的手机号注册商家账号,作为店铺的管理员
|
||||
Pair<Integer, String> retPair = shopStoreBaseService.covMerchEntryInfo2StoreInfo(mchId, false);
|
||||
@ -1652,23 +1695,22 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
log.error("进件成功,但初始化店铺失败: mchId={}, reason={}", mchId, retPair.getSecond());
|
||||
} else {
|
||||
shopMchEntryService.updateMulStatus(mchId, merCupNo, 0, 0, 1, 0, 0, 0, 0);
|
||||
log.debug("进件成功,创建并初始化店铺成功!mchId={}", mchId);
|
||||
log.info("进件成功,创建并初始化店铺成功!mchId={}", mchId);
|
||||
}
|
||||
|
||||
// 8. 检查商户绑定状态是否完成, 更改总的审核状态
|
||||
// 10. 检查商户绑定状态是否完成, 更改总的审核状态
|
||||
shopMchEntryService.checkMerchEntryFinished(mchId);
|
||||
|
||||
// 9. 日志记录并返回成功响应
|
||||
log.debug("商家绑定分账接收方异步通知处理完成,mchId:{} merCupNo:{}", mchId, merCupNo);
|
||||
return JSONUtil.createObj().put("code", "SUCCESS").put("message", "分账接收方绑定成功");
|
||||
// 11. 日志记录并返回成功响应
|
||||
log.info("商家绑定分账接收方异步通知处理完成,mchId:{} merCupNo:{}", mchId, merCupNo);
|
||||
return JSONUtil.createObj().set("code", "SUCCESS").set("message", "分账接收方绑定成功");
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("商家绑定分账接收方异步通知处理发生异常", e);
|
||||
return JSONUtil.createObj().put("code", "FAIL").put("message", "系统异常");
|
||||
return JSONUtil.createObj().set("code", "FAIL").set("message", "系统异常");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 查询银行卡Bin信息
|
||||
* 参考:https://o.lakala.com/#/home/document/detail?id=179
|
||||
|
||||
@ -14,41 +14,77 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.suisung.mall.common.constant.CommonConstant;
|
||||
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.shop.lakala.mapper.LklLedgerMerReceiverBindMapper;
|
||||
import com.suisung.mall.shop.lakala.service.LklLedgerMerReceiverBindService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class LklLedgerMerReceiverBindServiceImpl extends BaseServiceImpl<LklLedgerMerReceiverBindMapper, LklLedgerMerReceiverBind> implements LklLedgerMerReceiverBindService {
|
||||
/**
|
||||
* 根据接收方编号新增或更新记录
|
||||
* 根据商户编号和接收方编号新增或更新记录
|
||||
*
|
||||
* @param record
|
||||
* @return
|
||||
* @param record 分账绑定记录
|
||||
* @return 操作结果,成功返回true,失败返回false
|
||||
*/
|
||||
@Override
|
||||
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;
|
||||
}
|
||||
|
||||
// 构造查询条件
|
||||
QueryWrapper<LklLedgerMerReceiverBind> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("mer_cup_no", record.getMer_cup_no())
|
||||
.eq("receiver_no", record.getReceiver_no())
|
||||
.eq("audit_status", CommonConstant.Enable);
|
||||
List<LklLedgerMerReceiverBind> existsRecordList = list(queryWrapper);
|
||||
if (!CollectionUtil.isEmpty(existsRecordList)
|
||||
&& existsRecordList.get(0) != null
|
||||
&& existsRecordList.get(0).getId() > 0) {
|
||||
// update
|
||||
record.setId(existsRecordList.get(0).getId());
|
||||
return updateById(record);
|
||||
.eq("audit_status", CommonConstant.Enable)
|
||||
.orderByAsc("id");
|
||||
|
||||
// 如果商户ID不为空,则增加商户ID查询条件
|
||||
if (CheckUtil.isNotEmpty(record.getMch_id())) {
|
||||
queryWrapper.eq("mch_id", record.getMch_id());
|
||||
}
|
||||
|
||||
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
|
||||
*/
|
||||
@Override
|
||||
public LklLedgerMerReceiverBind getPlatformByApplyId(String applyId) {
|
||||
public LklLedgerMerReceiverBind getMerReceiverByApplyId(String applyId) {
|
||||
if (StrUtil.isBlank(applyId)) {
|
||||
return null;
|
||||
}
|
||||
@ -171,50 +207,77 @@ public class LklLedgerMerReceiverBindServiceImpl extends BaseServiceImpl<LklLedg
|
||||
/**
|
||||
* 更新审核结果
|
||||
*
|
||||
* @param applyId
|
||||
* @param merInnerNo
|
||||
* @param merCupNo
|
||||
* @param receiverNo
|
||||
* @param entrustFileName
|
||||
* @param entrustFilePath
|
||||
* @param auditStatus
|
||||
* @param auditStatusText
|
||||
* @param remark
|
||||
* @return
|
||||
* @param applyId 申请ID
|
||||
* @param merInnerNo 商户内部编号
|
||||
* @param merCupNo 商户银联编号
|
||||
* @param receiverNo 接收方编号
|
||||
* @param entrustFileName 委托文件名
|
||||
* @param entrustFilePath 委托文件路径
|
||||
* @param auditStatus 审核状态
|
||||
* @param auditStatusText 审核状态文本
|
||||
* @param remark 备注
|
||||
* @return 更新成功返回true,失败返回false
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateAuditResult(String applyId, String merInnerNo, String merCupNo, String receiverNo, String entrustFileName, String entrustFilePath, String auditStatus, String auditStatusText, String remark) {
|
||||
if (StrUtil.isBlank(applyId) || StrUtil.isBlank(merCupNo) || StrUtil.isBlank(receiverNo) || StrUtil.isBlank(auditStatus)) {
|
||||
public Boolean updateAuditResult(String applyId, String merInnerNo, String merCupNo, String receiverNo,
|
||||
String entrustFileName, String entrustFilePath, String auditStatus,
|
||||
String auditStatusText, String remark) {
|
||||
// 检查必需参数是否为空
|
||||
if (StrUtil.hasBlank(applyId, merCupNo, receiverNo, auditStatus)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
UpdateWrapper<LklLedgerMerReceiverBind> updateWrapper = new UpdateWrapper<>();
|
||||
updateWrapper.eq("apply_id", applyId);
|
||||
if (StrUtil.isNotBlank(merInnerNo)) {
|
||||
updateWrapper.set("mer_inner_no", merInnerNo);
|
||||
}
|
||||
if (StrUtil.isNotBlank(merCupNo)) {
|
||||
updateWrapper.set("mer_cup_no", merCupNo);
|
||||
}
|
||||
if (StrUtil.isNotBlank(receiverNo)) {
|
||||
updateWrapper.set("receiver_no", receiverNo);
|
||||
}
|
||||
if (StrUtil.isNotBlank(entrustFileName)) {
|
||||
updateWrapper.set("entrust_file_name", entrustFileName);
|
||||
}
|
||||
if (StrUtil.isNotBlank(entrustFilePath)) {
|
||||
updateWrapper.set("entrust_file_path", entrustFilePath);
|
||||
}
|
||||
if (StrUtil.isNotBlank(auditStatus)) {
|
||||
updateWrapper.set("audit_status", auditStatus);
|
||||
}
|
||||
if (StrUtil.isNotBlank(auditStatusText)) {
|
||||
updateWrapper.set("audit_status_text", auditStatusText);
|
||||
}
|
||||
if (StrUtil.isNotBlank(remark)) {
|
||||
updateWrapper.set("remark", remark);
|
||||
}
|
||||
|
||||
// 只有当参数不为空时才更新对应字段
|
||||
updateWrapper.set("mer_inner_no", merInnerNo);
|
||||
updateWrapper.set("mer_cup_no", merCupNo);
|
||||
updateWrapper.set("receiver_no", receiverNo);
|
||||
updateWrapper.set("entrust_file_name", entrustFileName);
|
||||
updateWrapper.set("entrust_file_path", entrustFilePath);
|
||||
updateWrapper.set("audit_status", auditStatus);
|
||||
updateWrapper.set("audit_status_text", auditStatusText);
|
||||
updateWrapper.set("remark", remark);
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -137,14 +137,14 @@ public class LklLedgerReceiverServiceImpl extends BaseServiceImpl<LklLedgerRecei
|
||||
* 通过平台方(代理商) ID 记录信息转成 Lakala 接收方记录
|
||||
* 平台方一定要获取,如果有代理商也要获取
|
||||
*
|
||||
* @param platformId
|
||||
* @param distributorId 代理商id(非平台Id)
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public JSONArray buildApplyLedgerReceiverReqParams(Long platformId) {
|
||||
public JSONArray buildApplyLedgerReceiverReqParams(Long distributorId) {
|
||||
List<Long> ids = new ArrayList<>();
|
||||
if (platformId != null && platformId > 0) {
|
||||
ids.add(platformId);
|
||||
if (distributorId != null && distributorId > 0) {
|
||||
ids.add(distributorId);
|
||||
}
|
||||
// 获取平台记录和代理商记录
|
||||
List<EsignPlatformInfo> esignPlatformInfoList = esignPlatformInfoService.getDistributorAndPlatformByIds(ids.toArray(new Long[0]));
|
||||
@ -216,14 +216,14 @@ public class LklLedgerReceiverServiceImpl extends BaseServiceImpl<LklLedgerRecei
|
||||
* 内部调用:申请一个或多个分账接收方(平台方和代理商)
|
||||
*
|
||||
* @param mchId
|
||||
* @param merCupNo 用于标记接收方绑定merCupNo商家
|
||||
* @param platformId
|
||||
* @param merCupNo 用于标记接收方绑定merCupNo商家
|
||||
* @param distributorId 代理商id(非平台id)
|
||||
* @return
|
||||
*/
|
||||
@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()) {
|
||||
log.error("先新增平台或代理商信息");
|
||||
return false;
|
||||
|
||||
@ -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.service.impl.CommonService;
|
||||
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.UploadUtil;
|
||||
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())
|
||||
&& CheckUtil.isNotEmpty(shopMchEntry.getDistributor_id())
|
||||
&& StrUtil.isAllNotBlank(shopMchEntry.getLkl_mer_cup_no(), shopMchEntry.getLkl_term_no())) {
|
||||
&& !StrUtil.hasBlank(shopMchEntry.getLkl_mer_cup_no(), shopMchEntry.getLkl_term_no())) {
|
||||
// 已经进件过了,执行下一步操作
|
||||
logger.info("商户已进件,执行后续操作,商户ID: {}", mchId);
|
||||
registrationMerchantAfterHook(mchId, shopMchEntry.getLkl_mer_cup_no(), shopMchEntry.getDistributor_id());
|
||||
@ -733,7 +732,7 @@ public class LklTkServiceImpl {
|
||||
logger.info("商家进件已成功,下一步申请拉卡拉分账业务,再创建分账接收方!");
|
||||
|
||||
// 重要:给商家申请分账业务;务必检查是否申请过?申请过忽略
|
||||
Pair<Boolean, String> applyRetPair = lakalaApiService.innerApplyLedgerMer(merCupNo);
|
||||
Pair<Boolean, String> applyRetPair = lakalaApiService.innerApplyLedgerMer(merCupNo, true);
|
||||
if (!applyRetPair.getFirst()) {
|
||||
String message = "提交分账业务申请异常:" + applyRetPair.getSecond();
|
||||
shopMchEntryService.updateMerchEntryApprovalByMchId(mchId, null, message);
|
||||
|
||||
@ -168,7 +168,7 @@ lakala:
|
||||
client_id: lsycs
|
||||
client_secret: XPa1HB5d55Ig0qV8
|
||||
user_no: 29153396
|
||||
split_lowest_ratio: 94.00
|
||||
split_lowest_ratio: 20.00
|
||||
activity_id: 687
|
||||
wx_fee: 0.6 # 微信手续费 6/1000
|
||||
api_pub_key_path: payKey/lakala/dev/tk_api_public_key.txt
|
||||
|
||||
@ -167,7 +167,7 @@ lakala:
|
||||
client_id: gpff
|
||||
client_secret: uRjvaJkWS1A0VsAv
|
||||
user_no: 22874827
|
||||
split_lowest_ratio: 94.00
|
||||
split_lowest_ratio: 20.00
|
||||
activity_id: 208
|
||||
wx_fee: 0.25 # 微信手续费 千分之2.5
|
||||
api_pub_key_path: payKey/lakala/prod/tk_api_public_key.txt
|
||||
|
||||
@ -183,7 +183,7 @@ lakala:
|
||||
client_id: gpff
|
||||
client_secret: uRjvaJkWS1A0VsAv
|
||||
user_no: 22874827
|
||||
split_lowest_ratio: 94.00
|
||||
split_lowest_ratio: 20.00
|
||||
activity_id: 208
|
||||
wx_fee: 0.25 # 微信手续费 千分之2.5
|
||||
api_pub_key_path: payKey/lakala/prod/tk_api_public_key.txt
|
||||
|
||||
@ -172,7 +172,7 @@ lakala:
|
||||
client_id: lsycs
|
||||
client_secret: XPa1HB5d55Ig0qV8
|
||||
user_no: 29153396
|
||||
split_lowest_ratio: 94.00
|
||||
split_lowest_ratio: 20.00
|
||||
activity_id: 687
|
||||
wx_fee: 0.6 # 微信手续费 6/1000
|
||||
api_pub_key_path: payKey/lakala/dev/tk_api_public_key.txt
|
||||
|
||||
@ -172,7 +172,7 @@ lakala:
|
||||
client_id: lsycs
|
||||
client_secret: XPa1HB5d55Ig0qV8
|
||||
user_no: 29153396
|
||||
split_lowest_ratio: 94.00
|
||||
split_lowest_ratio: 20.00
|
||||
activity_id: 687
|
||||
wx_fee: 0.6 # 微信手续费 6/1000
|
||||
api_pub_key_path: payKey/lakala/dev/tk_api_public_key.txt
|
||||
|
||||
Loading…
Reference in New Issue
Block a user