diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaPayServiceImpl.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaPayServiceImpl.java
index e964a00d..a7e1c528 100644
--- a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaPayServiceImpl.java
+++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaPayServiceImpl.java
@@ -449,11 +449,10 @@ public class LakalaPayServiceImpl implements LakalaPayService {
//3. 发送请求
String responseStr = LKLSDK.httpPost(req);
+ // {'retCode':'000000','retMsg':'申请已受理,请等待审核结果','respData':{'version':'1.0','orderNo':'KFPT20230223181025407788734','orgCode':'1','applyId':681201215598657536}}
JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr);
if (lakalaRespJSON == null || !lakalaRespJSON.getStr("retCode").equals("000000")) {
throw new ApiException(I18nUtil._(lakalaRespJSON.getStr("retMsg")));
-// responseStr="{'retCode':'000000','retMsg':'申请已受理,请等待审核结果','respData':{'version':'1.0','orderNo':'KFPT20230223181025407788734','orgCode':'1','applyId':681201215598657536}}";
-// lakalaRespJSON = JSONUtil.parseObj(responseStr);
}
paramsJSON.set("apply_id", lakalaRespJSON.getByPath("respData.applyId"));
@@ -468,7 +467,7 @@ public class LakalaPayServiceImpl implements LakalaPayService {
return CommonResult.success(null, "提交成功,待审核中!");
} catch (SDKException e) {
log.error("分账申请失败:", e);
- throw new ApiException(I18nUtil._("申请失败!"), e);
+ throw new ApiException(I18nUtil._("分账申请失败!"), e);
}
}
diff --git a/mall-shop/pom.xml b/mall-shop/pom.xml
index 6f04abb6..b21aa70c 100644
--- a/mall-shop/pom.xml
+++ b/mall-shop/pom.xml
@@ -357,6 +357,10 @@
bootstrap.yml
bootstrap-${profiles.active}.yml
**/*.xml
+ **/*.crt
+ **/*.pem
+ **/*.p12
+ **/*.cer
@@ -381,6 +385,10 @@
ttf
ttc
+ p12
+ cer
+ pem
+ pfx
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/components/IpUtil.java b/mall-shop/src/main/java/com/suisung/mall/shop/components/IpUtil.java
index 576411e9..6c4ef10b 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/components/IpUtil.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/components/IpUtil.java
@@ -32,7 +32,7 @@ public class IpUtil implements ApplicationRunner {
try {
return searcher.search(ip);
} catch (Exception e) {
- log.error("IP 格式错误:{}", e);
+ log.error("IP:{} 格式错误:{}", ip, e);
return null;
}
}
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/LakalaController.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/LakalaController.java
index 25a965d3..8eb44567 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/LakalaController.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/LakalaController.java
@@ -11,7 +11,7 @@ package com.suisung.mall.shop.lakala.controller;
import cn.hutool.json.JSONObject;
import com.suisung.mall.common.api.CommonResult;
import com.suisung.mall.common.service.impl.BaseControllerImpl;
-import com.suisung.mall.shop.lakala.service.LakalaPayService;
+import com.suisung.mall.shop.lakala.service.LakalaApiService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.util.Base64Utils;
@@ -28,7 +28,7 @@ import java.io.IOException;
public class LakalaController extends BaseControllerImpl {
@Resource
- private LakalaPayService lakalaPayService;
+ private LakalaApiService lakalaPayService;
@ApiOperation(value = "本地文件转base64", notes = "本地文件转base64")
@RequestMapping(value = "/file2base64", method = RequestMethod.POST)
@@ -37,6 +37,13 @@ public class LakalaController extends BaseControllerImpl {
return str;
}
+
+ @ApiOperation(value = "获取银行卡的 BIN 信息", notes = "获取银行卡的 BIN 信息")
+ @RequestMapping(value = "/bankCardBin", method = RequestMethod.POST)
+ public JSONObject bankCardBin(@RequestBody JSONObject paramsJSON) {
+ return lakalaPayService.getBankCardBin(paramsJSON.getStr("bankCardNo"));
+ }
+
@ApiOperation(value = "商户分账业务开通申请", notes = "商户分账业务开通申请")
@RequestMapping(value = "/ledger/applyLedgerMer", method = RequestMethod.POST)
public CommonResult ledgerApplyLedgerMer(@RequestBody JSONObject paramsJSON) {
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/LklTkController.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/LklTkController.java
index cac3f141..dcda37f2 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/LklTkController.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/LklTkController.java
@@ -9,7 +9,7 @@
package com.suisung.mall.shop.lakala.controller;
import com.suisung.mall.common.service.impl.BaseControllerImpl;
-import com.suisung.mall.shop.lakala.service.impl.LklTkService;
+import com.suisung.mall.shop.lakala.service.impl.LklTkServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -24,7 +24,7 @@ import javax.annotation.Resource;
public class LklTkController extends BaseControllerImpl {
@Resource
- private LklTkService lklTkService;
+ private LklTkServiceImpl lklTkService;
@ApiOperation(value = "请求获取token(商户进件)", notes = "请求获取token(商户进件)")
@RequestMapping(value = "/token", method = RequestMethod.POST)
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LakalaPayService.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LakalaApiService.java
similarity index 94%
rename from mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LakalaPayService.java
rename to mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LakalaApiService.java
index 2166834e..b5334ce4 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LakalaPayService.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LakalaApiService.java
@@ -14,7 +14,7 @@ import com.suisung.mall.common.api.CommonResult;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-public interface LakalaPayService {
+public interface LakalaApiService {
Boolean initLKLSDK();
@@ -134,5 +134,14 @@ public interface LakalaPayService {
*/
JSONObject applyLedgerMerReceiverBindNotify(HttpServletRequest request);
+ /**
+ * 获取银行卡信息
+ * 参考:https://o.lakala.com/#/home/document/detail?id=387
+ *
+ * @param bankCardNo
+ * @return
+ */
+ JSONObject getBankCardBin(String bankCardNo);
+
}
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LklLedgerMemberService.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LklLedgerMemberService.java
index 4c11850f..38b607b4 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LklLedgerMemberService.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LklLedgerMemberService.java
@@ -13,6 +13,14 @@ import com.suisung.mall.core.web.service.IBaseService;
public interface LklLedgerMemberService extends IBaseService {
+ /**
+ * 根据银联商户号查询记录
+ *
+ * @param merCupNo
+ * @return
+ */
+ LklLedgerMember getByMerCupNo(String merCupNo);
+
/**
* 根据银联商户号新增或修改记录
*
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LklLedgerMerReceiverBindService.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LklLedgerMerReceiverBindService.java
index 002e4e03..238f54f1 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LklLedgerMerReceiverBindService.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LklLedgerMerReceiverBindService.java
@@ -21,6 +21,15 @@ public interface LklLedgerMerReceiverBindService extends IBaseService response = RestTemplateHttpUtil.sendPostFormDataBackEntity(buildLklServiceUrl(urlPath), header, formData, JSONObject.class);
+// if (ObjectUtil.isEmpty(response) || response.getStatusCode() != HttpStatus.OK) {
+// return null;
+// }
+// JSONObject result = response.getBody();
+// if (result == null) {
+// return null;
+// }
+
+ return null;
+ }
+
}
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklLedgerMemberServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklLedgerMemberServiceImpl.java
index 8a7b7b3b..f4dbb35d 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklLedgerMemberServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklLedgerMemberServiceImpl.java
@@ -26,6 +26,24 @@ import java.util.List;
public class LklLedgerMemberServiceImpl extends BaseServiceImpl implements LklLedgerMemberService {
+ /**
+ * 根据银联商户号查询记录
+ *
+ * @param merCupNo
+ * @return
+ */
+ @Override
+ public LklLedgerMember getByMerCupNo(String merCupNo) {
+ if (StrUtil.isBlank(merCupNo)) {
+ return null;
+ }
+
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq("mer_cup_no", merCupNo);
+ queryWrapper.orderByAsc("id");
+ return getOne(queryWrapper);
+ }
+
/**
* 根据银联商户号新增或修改记录
*
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklLedgerMerReceiverBindServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklLedgerMerReceiverBindServiceImpl.java
index f9613a26..d0e097e6 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklLedgerMerReceiverBindServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklLedgerMerReceiverBindServiceImpl.java
@@ -12,6 +12,7 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
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.core.web.service.impl.BaseServiceImpl;
import com.suisung.mall.shop.lakala.mapper.LklLedgerMerReceiverBindMapper;
@@ -30,13 +31,14 @@ public class LklLedgerMerReceiverBindServiceImpl extends BaseServiceImpl queryWrapper = new QueryWrapper<>();
- queryWrapper.eq("mer_cup_no", record.getMer_cup_no());
- queryWrapper.eq("receiver_no", record.getReceiver_no());
+ queryWrapper.eq("mer_cup_no", record.getMer_cup_no())
+ .eq("receiver_no", record.getReceiver_no())
+ .eq("audit_status", CommonConstant.Enable);
List existsRecordList = list(queryWrapper);
if (!CollectionUtil.isEmpty(existsRecordList)
&& existsRecordList.get(0) != null
@@ -46,7 +48,21 @@ public class LklLedgerMerReceiverBindServiceImpl extends BaseServiceImpl queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq("mer_cup_no", merCupNo)
+ .eq("receiver_no", receiverNo)
+ .eq("audit_status", CommonConstant.Enable);
+
+
+ return getOne(queryWrapper);
}
/**
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklLedgerReceiverServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklLedgerReceiverServiceImpl.java
index 80b3d4d3..09808878 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklLedgerReceiverServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklLedgerReceiverServiceImpl.java
@@ -9,8 +9,10 @@
package com.suisung.mall.shop.lakala.service.impl;
import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.suisung.mall.common.constant.CommonConstant;
import com.suisung.mall.common.modules.lakala.LklLedgerReceiver;
import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
import com.suisung.mall.shop.lakala.mapper.LklLedgerReceiverMapper;
@@ -40,9 +42,14 @@ public class LklLedgerReceiverServiceImpl extends BaseServiceImpl existsRecordList = list(queryWrapper);
- if (!CollectionUtil.isEmpty(existsRecordList)
+ if (CollectionUtil.isNotEmpty(existsRecordList)
&& existsRecordList.get(0) != null
&& existsRecordList.get(0).getId() > 0) {
// update
@@ -50,6 +57,56 @@ public class LklLedgerReceiverServiceImpl extends BaseServiceImpl queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq("receiver_no", receiverNo).eq("status", CommonConstant.Enable);
+ queryWrapper.orderByAsc("id");
+
+ return getOne(queryWrapper);
+ }
+
+ /**
+ * 根据条件查询记录
+ *
+ * @param LicenseNo
+ * @param ContactMobile
+ * @param platformId
+ * @return
+ */
+ @Override
+ public LklLedgerReceiver getByCondition(String LicenseNo, String ContactMobile, Long platformId) {
+ if (ObjectUtil.isEmpty(platformId)) {
+ platformId = 0L;
+ }
+ if (StrUtil.isBlank(LicenseNo) && StrUtil.isBlank(ContactMobile)) {
+ return null;
+ }
+
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if (StrUtil.isNotBlank(LicenseNo)) {
+ queryWrapper.eq("license_no", LicenseNo);
+ }
+ if (StrUtil.isNotBlank(ContactMobile)) {
+ queryWrapper.eq("contact_mobile", ContactMobile);
+ }
+
+ queryWrapper.eq("platform_id", platformId)
+ .eq("status", CommonConstant.Enable);
+
+ return getOne(queryWrapper);
}
}
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklTkService.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklTkServiceImpl.java
similarity index 98%
rename from mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklTkService.java
rename to mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklTkServiceImpl.java
index ed23b640..781fc7b9 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklTkService.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklTkServiceImpl.java
@@ -36,10 +36,13 @@ import java.util.HashMap;
import java.util.Map;
@Service
-public class LklTkService {
+public class LklTkServiceImpl {
- private static final Logger log = LoggerFactory.getLogger(LklTkService.class);
+ private static final Logger log = LoggerFactory.getLogger(LklTkServiceImpl.class);
@Value("${lakala.tk.server_url}")
+ private String tkServerUrl;
+
+ @Value("${lakala.server_url}")
private String serverUrl;
@Value("${lakala.tk.client_id}")
@@ -48,6 +51,9 @@ public class LklTkService {
@Value("${lakala.tk.client_secret}")
private String clientSecret;
+ @Value("${lakala.org_code}")
+ private String orgCode;
+
@Value("${spring.profiles.active}")
private String profile;
@@ -58,6 +64,10 @@ public class LklTkService {
private RedisService redisService;
protected String buildLklTkUrl(String urlPath) {
+ return tkServerUrl + urlPath;
+ }
+
+ protected String buildLklServiceUrl(String urlPath) {
return serverUrl + urlPath;
}
@@ -406,4 +416,5 @@ public class LklTkService {
return jsonObject;
}
+
}
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/page/controller/admin/ShopPageBaseController.java b/mall-shop/src/main/java/com/suisung/mall/shop/page/controller/admin/ShopPageBaseController.java
index 885ef5b9..7bccf062 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/page/controller/admin/ShopPageBaseController.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/page/controller/admin/ShopPageBaseController.java
@@ -24,6 +24,7 @@ import com.suisung.mall.shop.page.service.ShopPageBaseService;
import com.suisung.mall.shop.product.service.ShopPageUserFormService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@@ -44,6 +45,7 @@ import java.util.Map;
* @author Xinze
* @since 2021-06-11
*/
+@Slf4j
@Api(tags = "后台页面管理")
@RestController
@RequestMapping("/admin/shop/shop-page-base")
@@ -230,6 +232,8 @@ public class ShopPageBaseController extends BaseControllerImpl {
throw new ApiUserException(I18nUtil._("用户信息异常!"));
}
+ log.info("ShopPageBaseController 用户信息:{}", JSONUtil.toJsonStr(user));
+
ModelAndView view = new ModelAndView("diy");
Integer subsite_id = user.getSite_id();
@@ -244,6 +248,7 @@ public class ShopPageBaseController extends BaseControllerImpl {
//Integer tpl_id = getParameter("tpl_id", 1012);
Integer app_type = 3;
+ log.info("ShopPageBaseController 模版修改参数:{},{},{},{}", subsite_id, store_id, tpl_id, app_type);
shopPageAppService.getModel(view, subsite_id, store_id, tpl_id, app_type);
Map res = new HashMap<>();
diff --git a/mall-shop/src/main/resources/bootstrap-local.yml b/mall-shop/src/main/resources/bootstrap-local.yml
index 772c1e31..2a6dfea9 100644
--- a/mall-shop/src/main/resources/bootstrap-local.yml
+++ b/mall-shop/src/main/resources/bootstrap-local.yml
@@ -157,7 +157,7 @@ lakala:
lkl_platform_cer_path: payKey/lakala/dev/lkl_notify_cert_v2.cer
#机构代码
org_code: 1
- #商户号
+ #商户号, 测试商户号(未开通分账功能的):8222900539908Q9
merchant_no: 82229007392000A
#终端号
term_no: D9296400
diff --git a/mall-shop/src/main/resources/bootstrap-prod.yml b/mall-shop/src/main/resources/bootstrap-prod.yml
index 32b090b4..4a18fc04 100644
--- a/mall-shop/src/main/resources/bootstrap-prod.yml
+++ b/mall-shop/src/main/resources/bootstrap-prod.yml
@@ -152,24 +152,42 @@ sf-express:
enable: 2
#拉卡拉进件配置
lakala:
+ # #服务地址
+ # server_url: https://s2.lakala.com
+ # #应用Id
+ # app_id: OP10000439
+ # #商户证书序列号
+ # serial_no: 1737359895636
+ # #商户证书
+ # api_cert_path: payKey/lakala/prod/api_cert.cer
+ # #商户私钥
+ # api_pri_key_path: payKey/lakala/prod/api_private_key.pem
+ # #拉卡拉平台证书
+ # lkl_platform_cer_path: payKey/lakala/prod/lkl_platform.cer
+ # #机构代码
+ # org_code: 980688
+ # #商户号
+ # merchant_no: 8226330599900LN
+ # #终端号码,M0780629(B2B收银台) M0780798(专业化扫码)
+ # term_no: M0780798
#服务地址
- server_url: https://s2.lakala.com
+ server_url: https://test.wsmsd.cn/sit
#应用Id
- app_id: OP10000439
+ app_id: OP00000003
#商户证书序列号
- serial_no: 1737359895636
+ serial_no: 00dfba8194c41b84cf
#商户证书
- api_cert_path: payKey/lakala/prod/api_cert.cer
+ api_cert_path: payKey/lakala/dev/OP00000003_cert.cer
#商户私钥
- api_pri_key_path: payKey/lakala/prod/api_private_key.pem
+ api_pri_key_path: payKey/lakala/dev/OP00000003_private_key.pem
#拉卡拉平台证书
- lkl_platform_cer_path: payKey/lakala/prod/lkl_platform.cer
+ lkl_platform_cer_path: payKey/lakala/dev/lkl_notify_cert_v2.cer
#机构代码
- org_code: 980688
- #商户号
- merchant_no: 8226330599900LN
- #终端号码,M0780629(B2B收银台) M0780798(专业化扫码)
- term_no: M0780798
+ org_code: 1
+ #商户号, 测试商户号(未开通分账功能的):8222900539908Q9
+ merchant_no: 82229007392000A
+ #终端号
+ term_no: D9296400
#拉卡拉拓客进件配置
tk:
#服务地址
diff --git a/mall-shop/src/main/resources/payKey/lakala/dev/OP00000003_cert.cer b/mall-shop/src/main/resources/payKey/lakala/dev/OP00000003_cert.cer
new file mode 100644
index 00000000..f85afd02
--- /dev/null
+++ b/mall-shop/src/main/resources/payKey/lakala/dev/OP00000003_cert.cer
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDYTCCAkmgAwIBAgIJAN+6gZTEG4TPMA0GCSqGSIb3DQEBCwUAMEkxCzAJBgNV
+BAYTAlVTMREwDwYDVQQIEwhzaGFuZ2hhaTERMA8GA1UEBxMIc2hhbmdoYWkxFDAS
+BgNVBAMUC2xha2FsYV8yMDIxMB4XDTIxMDYxODA3MjEzNFoXDTMxMDYxOTA3MjEz
+NFowSTELMAkGA1UEBhMCVVMxETAPBgNVBAgTCHNoYW5naGFpMREwDwYDVQQHEwhz
+aGFuZ2hhaTEUMBIGA1UEAxQLbGFrYWxhXzIwMjEwggEiMA0GCSqGSIb3DQEBAQUA
+A4IBDwAwggEKAoIBAQDvDBZyHUDndAGxrIcsCV2njhNO3vCEZotTaWYSYwtDvkcA
+b1EjsBFabXZaKigpqFXk5XXNI3NIHP9M8XKzIgGvc65NpLAfRjVql8JiTvLyYd1g
+IUcOXMInabu+oX7dQSI1mS8XzqaoVRhDZQWhXcJW9bxMulgnzvk0Ggw07AjGF7si
++hP/Va8SJmN7EJwfQq6TpSxR+WdIHpbWdhZ+NHwitnQwAJTLBFvfk28INM39G7XO
+sXdVLfsooFdglVTOHpNuRiQAj9gShCCNrpGsNQxDiJIxE43qRsNsRwigyo6DPJk/
+klgDJa417E2wgP8VrwiXparO4FMzOGK15quuoD7DAgMBAAGjTDBKMAkGA1UdEwQC
+MAAwEQYJYIZIAYb4QgEBBAQDAgTwMAsGA1UdDwQEAwIFoDAdBgNVHSUEFjAUBggr
+BgEFBQcDAgYIKwYBBQUHAwEwDQYJKoZIhvcNAQELBQADggEBAI21YYAlH+Pc1ISv
+nbQrGqL8suGL0Hh/8hGaFfrJEJEKr9OeC8jElUhck2MTmfu/Y1lB7r8RBrhGPXi4
+kTXmB6ADs/9+ezNW3WXyFj7fhs3JcZ3mo33T9wyQySDKd//JrEtrTsc/s2PZ602y
+qNmPomXSzjrlugaMyC7LI9sR44mc7sQnchjHoxrQFD5/usTFW72UQfYCORsQWYMt
+0KKEyAcpRL51RE3xbX1WDtduFYGP62PbwLAn2nCL/j1wlF5hltWj7sditWqKgso5
+F8BTffn2Bb0RdsNxqwMy1cTPrWLeXVOqMDu3ge7hvoav8lZKTjk5Kmqhs7wNAQXK
+mg9qSwo=
+-----END CERTIFICATE-----
diff --git a/mall-shop/src/main/resources/payKey/lakala/dev/OP00000003_private_key.pem b/mall-shop/src/main/resources/payKey/lakala/dev/OP00000003_private_key.pem
new file mode 100644
index 00000000..7d95886c
--- /dev/null
+++ b/mall-shop/src/main/resources/payKey/lakala/dev/OP00000003_private_key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDvDBZyHUDndAGx
+rIcsCV2njhNO3vCEZotTaWYSYwtDvkcAb1EjsBFabXZaKigpqFXk5XXNI3NIHP9M
+8XKzIgGvc65NpLAfRjVql8JiTvLyYd1gIUcOXMInabu+oX7dQSI1mS8XzqaoVRhD
+ZQWhXcJW9bxMulgnzvk0Ggw07AjGF7si+hP/Va8SJmN7EJwfQq6TpSxR+WdIHpbW
+dhZ+NHwitnQwAJTLBFvfk28INM39G7XOsXdVLfsooFdglVTOHpNuRiQAj9gShCCN
+rpGsNQxDiJIxE43qRsNsRwigyo6DPJk/klgDJa417E2wgP8VrwiXparO4FMzOGK1
+5quuoD7DAgMBAAECggEBANhmWOt1EAx3OBFf3f4/fEjylQgRSiqRqg8Ymw6KGuh4
+mE4Md6eW/B6geUOmZjVP7nIIR1wte28M0REWgn8nid8LGf+v1sB5DmIwgAf+8G/7
+qCwd8/VMg3aqgQtRp0ckb5OV2Mv0h2pbnltkWHR8LDIMwymyh5uCApbn/aTrCAZK
+NXcPOyAn9tM8Bu3FHk3Pf24Er3SN+bnGxgpzDrFjsDSHjDFT9UMIc2WdA3tuMv9X
+3DDn0bRCsHnsIw3WrwY6HQ8mumdbURk+2Ey3eRFfMYxyS96kOgBC2hqZOlDwVPAK
+TPtS4hoq+cQ0sRaJQ4T0UALJrBVHa+EESgRaTvrXqAECgYEA+WKmy9hcvp6IWZlk
+9Q1JZ+dgIVxrO65zylK2FnD1/vcTx2JMn73WKtQb6vdvTuk+Ruv9hY9PEsf7S8gH
+STTmzHOUgo5x0F8yCxXFnfji2juoUnDdpkjtQK5KySDcpQb5kcCJWEVi9v+zObM0
+Zr1Nu5/NreE8EqUl3+7MtHOu1TMCgYEA9WM9P6m4frHPW7h4gs/GISA9LuOdtjLv
+AtgCK4cW2mhtGNAMttD8zOBQrRuafcbFAyU9de6nhGwetOhkW9YSV+xRNa7HWTeI
+RgXJuJBrluq5e1QGTIwZU/GujpNaR4Qiu0B8TodM/FME7htsyxjmCwEfT6SDYlke
+MzTbMa9Q0DECgYBqsR/2+dvD2YMwAgZFKKgNAdoIq8dcwyfamUQ5mZ5EtGQL2yw4
+8zibHh/LiIxgUD1Kjk/qQgNsX45NP4iOc0mCkrgomtRqdy+rumbPTNmQ0BEVJCBP
+scd+8pIgNiTvnWpMRvj7gMP0NDTzLI3wnnCRIq8WAtR2jZ0Ejt+ZHBziLQKBgQDi
+bEe/zqNmhDuJrpXEXmO7fTv3YB/OVwEj5p1Z/LSho2nHU3Hn3r7lbLYEhUvwctCn
+Ll2fzC7Wic1rsGOqOcWDS5NDrZpUQGGF+yE/JEOiZcPwgH+vcjaMtp0TAfRzuQEz
+NzV8YGwxB4mtC7E/ViIuVULHAk4ZGZI8PbFkDxjKgQKBgG8jEuLTI1tsP3kyaF3j
+Aylnw7SkBc4gfe9knsYlw44YlrDSKr8AOp/zSgwvMYvqT+fygaJ3yf9uIBdrIilq
+CHKXccZ9uA/bT5JfIi6jbg3EoE9YhB0+1aGAS1O2dBvUiD8tJ+BjAT4OB0UDpmM6
+QsFLQgFyXgvDnzr/o+hQJelW
+-----END PRIVATE KEY-----
diff --git a/mall-shop/src/main/resources/payKey/lakala/dev/lkl_notify_cert_v2.cer b/mall-shop/src/main/resources/payKey/lakala/dev/lkl_notify_cert_v2.cer
new file mode 100644
index 00000000..12723ebe
--- /dev/null
+++ b/mall-shop/src/main/resources/payKey/lakala/dev/lkl_notify_cert_v2.cer
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEMTCCAxmgAwIBAgIGAXRTgcMnMA0GCSqGSIb3DQEBCwUAMHYxCzAJBgNVBAYT
+AkNOMRAwDgYDVQQIDAdCZWlKaW5nMRAwDgYDVQQHDAdCZWlKaW5nMRcwFQYDVQQK
+DA5MYWthbGEgQ28uLEx0ZDEqMCgGA1UEAwwhTGFrYWxhIE9yZ2FuaXphdGlvbiBW
+YWxpZGF0aW9uIENBMB4XDTIwMTAxMDA1MjQxNFoXDTMwMTAwODA1MjQxNFowZTEL
+MAkGA1UEBhMCQ04xEDAOBgNVBAgMB0JlaUppbmcxEDAOBgNVBAcMB0JlaUppbmcx
+FzAVBgNVBAoMDkxha2FsYSBDby4sTHRkMRkwFwYDVQQDDBBBUElHVy5MQUtBTEEu
+Q09NMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt1zHL54HiI8d2sLJ
+lwoQji3/ln0nsvfZ/XVpOjuB+1YR6/0LdxEDMC/hxI6iH2Rm5MjwWz3dmN/6BZeI
+gwGeTOWJUZFARo8UduKrlhC6gWMRpAiiGC8wA8stikc5gYB+UeFVZi/aJ0WN0cpP
+JYCvPBhxhMvhVDnd4hNohnR1L7k0ypuWg0YwGjC25FaNAEFBYP9EYUyCJjE//9Z7
+sMzHR9SJYCqqo6r9bOH9G6sWKuEp+osuAh+kJIxJMHfipw7w3tEcWG0hce9u/el4
+cYJtg8/PPMVoccKmeCzMvarr7jdKP4lenJbtwlgyfs+JgNu60KMUJH8RS72wC9NY
+uFz09wIDAQABo4HVMIHSMIGSBgNVHSMEgYowgYeAFCnH4DkZPR6CZxRn/kIqVsMo
+dJHpoWekZTBjMQswCQYDVQQGEwJDTjEQMA4GA1UECAwHQmVpSmluZzEQMA4GA1UE
+BwwHQmVpSmluZzEXMBUGA1UECgwOTGFrYWxhIENvLixMdGQxFzAVBgNVBAMMDkxh
+a2FsYSBSb290IENBggYBaiUALIowHQYDVR0OBBYEFJ2Kx9YZfmWpkKFnC33C0r5D
+K3rFMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUA
+A4IBAQBZoeU0XyH9O0LGF9R+JyGwfU/O5amoB97VeM+5n9v2z8OCiIJ8eXVGKN9L
+tl9QkpTEanYwK30KkpHcJP1xfVkhPi/cCMgfTWQ5eKYC7Zm16zk7n4CP6IIgZIqm
+TVGsIGKk8RzWseyWPB3lfqMDR52V1tdA1S8lJ7a2Xnpt5M2jkDXoArl3SVSwCb4D
+AmThYhak48M++fUJNYII9JBGRdRGbfJ2GSFdPXgesUL2CwlReQwbW4GZkYGOg9LK
+CNPK6XShlNdvgPv0CCR08KCYRwC3HZ0y1F0NjaKzYdGNPrvOq9lA495ONZCvzYDo
+gmsu/kd6eqxTs/JwdaIYr4sCMg8Z
+-----END CERTIFICATE-----
diff --git a/mall-shop/src/main/resources/payKey/lakala/prod/api_cert.cer b/mall-shop/src/main/resources/payKey/lakala/prod/api_cert.cer
new file mode 100644
index 00000000..0ddadbf3
--- /dev/null
+++ b/mall-shop/src/main/resources/payKey/lakala/prod/api_cert.cer
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDoDCCAoigAwIBAgIGAZSCuCxUMA0GCSqGSIb3DQEBBQUAMGAxFDASBgNVBAMM
+C0xBS0FMQS1MQU9QMQswCQYDVQQGEwJDTjEXMBUGA1UECgwOTGFrYWxhIENvLixM
+dGQxDzANBgNVBAsMBkxLTC1ZRjERMA8GA1UEBwwIc2hhbmdoYWkwHhcNMjUwMTIw
+MDc1ODE1WhcNMzUwMTIwMDc1ODE1WjBgMRQwEgYDVQQDDAtMQUtBTEEtTEFPUDEL
+MAkGA1UEBhMCQ04xFzAVBgNVBAoMDkxha2FsYSBDby4sTHRkMQ8wDQYDVQQLDAZM
+S0wtWUYxETAPBgNVBAcMCHNoYW5naGFpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEAksIeSx7qKgmI7yFSglMBsty3ZoyC8qsCbLSWANwUPYikd5TPojB8
+43wJGJxOBOtDV8FL55q0zX3eQOE4BOVGcDMMUsZsAhy4ST46ne4e8CFVFHmM6TON
+tS5Kla0hLjETpUjYStR8En534uoLYvnNPAI1CvmvWiUo+QGd3yc2SmyE+XB/8bKk
+wiLjAauGyfb8m2BgCaoBIai+0IImInX2Xb85L0TAu0eYC6fX1T8BCupA4EVOpvLL
+cM5P8nye4mibgS46lzlve1soC73W1vGAHnMw4epzk89NHKIMYEmZPoCU6jKuDbR0
+K73QwU0QZt9MSJnTdnWt/PeUJ8PzkhV0RQIDAQABo2AwXjAPBgNVHRMECDAGAQH/
+AgEAMB8GA1UdIwQYMBaAFG1rabju/OE7B3cPuQFZhs77ku5qMB0GA1UdDgQWBBRt
+a2m47vzhOwd3D7kBWYbO+5LuajALBgNVHQ8EBAMCBsAwDQYJKoZIhvcNAQEFBQAD
+ggEBACzdFsulR2X6HPKX+D2VU7msJyXRVWrAi06SV/zds8lPYUwSTEksbpWejD5L
+ABftyv5DL7bU66vL80she2r5d+DbY+gB2hAgRHW+ymzfAqQJOcpciAXZHxc4orf+
+V4YtmLIRT0lg9rfU93D4S9fPe+HHMAmKFQXjnZNiv7DOar62MP0RrI74hWevaZao
+gK8cMspxUW7H9VFvJvgGZRTRXVFHIvaPOpvlsdCYfUDomH2sWVLIiaSQoAVXxoET
+c0HJB0er7Df2PSBSF/8bl9cVmp5HDB2YgtlfNKaFneGNN2WQtO3gl56heud8hGAe
+F4YZkE8ML2mh83QqVSY4AkfWo+0=
+-----END CERTIFICATE-----
diff --git a/mall-shop/src/main/resources/payKey/lakala/prod/api_private_key.pem b/mall-shop/src/main/resources/payKey/lakala/prod/api_private_key.pem
new file mode 100644
index 00000000..68896c6c
--- /dev/null
+++ b/mall-shop/src/main/resources/payKey/lakala/prod/api_private_key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCSwh5LHuoqCYjv
+IVKCUwGy3LdmjILyqwJstJYA3BQ9iKR3lM+iMHzjfAkYnE4E60NXwUvnmrTNfd5A
+4TgE5UZwMwxSxmwCHLhJPjqd7h7wIVUUeYzpM421LkqVrSEuMROlSNhK1HwSfnfi
+6gti+c08AjUK+a9aJSj5AZ3fJzZKbIT5cH/xsqTCIuMBq4bJ9vybYGAJqgEhqL7Q
+giYidfZdvzkvRMC7R5gLp9fVPwEK6kDgRU6m8stwzk/yfJ7iaJuBLjqXOW97WygL
+vdbW8YAeczDh6nOTz00cogxgSZk+gJTqMq4NtHQrvdDBTRBm30xImdN2da3895Qn
+w/OSFXRFAgMBAAECggEACN60qAOpUXscDJ/t9bSAoMfYSdlqPLJ7RgiwHEMw8fsl
+PZj/56SYl8MyZYtk58U0X8RuCwR9swHNggxar2kQFc3wC7y0YHhN5xdcwZjXw9mv
+47no+1tDUFUI6vz4yWrr7gx2DifDi/aa1lsg7w18CwlzHUO0BnXCgTJI0Wj0ThEj
+k3AxCv41a4dwQW2EejaikMdzkWv7p9cG1cjJocBvaURg8RZrw2v1lqXx9iZb5Ywv
+XkQP907AAnUn40bLgQ7hyUruxjKPzIM5ZjIER6PTtvGk1Uzt7Kj2YZZ4egYp0PXv
+5fEJIcppeIyGfatEZ4U/ZmfA0L7+xtSY8kICndPSTQKBgQDHy5n6N6JdYyyrVFH/
+x4xTHwyiReOzw5Pz2K9uSxZM6pmDWfZexAxkpMycQotZYOk6GYDqml5XAiXAYVKn
+i9FCEC6PnFRZ/v7TN3ag3k8eXwLrQu589+X0ppOizIp01IQ8AWAUr1tA/UcqLt8T
+5XSHnoEDo9SY9Aw1kskY5TWoowKBgQC8CwRxfFNWk3Na+U4HgvVv8CSrB7rbkLUI
+L11jNKFx4xms8uIjBrIencHsRAazoG73wMsY7MzbPtJKIFcXmSKjLFClJ6luN9np
+1tYkWXF/nyo6L2IhCG7N28sxYa56XTR0lDnfkW+LiI7iaC1Z+XUtxoY3ZIL+0Dbv
+wCfYS2I19wKBgQCtoRjtRJALzHYzZpHkUQx36BHYrBgYTy0yyuqaVRLKQU6rwfDD
+pmiGxlkyqvni8L9+yE8qkoDN6IXaTDnCdVWjreBo2ZjMpTfbYuXrI4dqg3NL9NzB
+KcZj+Kdw4YSpx04rv546G7KYJgREentPFSdR/MNt4GCPk/dQT4IH6pnZNQKBgQC2
+esKPFqURCPoSuIf+RhnDzPjoeBHe7KihDsXDddmN2WKbMQA+GUtU5qa/jqwqOHA3
+QQJWZ8XMpUQQ5x1dKyAv1NtVyg1jhhOUFwWsNJgtztl9qWnCwJo2byrZ+v8Eg9pZ
+n1YiHNJwR87Q62PHQotyJossyf9NI+WL958zCMR/tQKBgCTDIKnfjq4riVLEOLxl
+oGzGMowFTp9v8dyvrYj71C0ZDzLg/EH1tTQ4K46GIXJfyZvIATAIisC6R37KNmUA
+w8f6YAOSS+iZBSZo36DoGIqJTYGyYgQDDftMsj/gxthgwRO5Zhwbn63ayJkWYyPy
+C1RJ27LO8qX+3/s5pV7G9GlO
+-----END PRIVATE KEY-----
diff --git a/mall-shop/src/main/resources/payKey/lakala/prod/lkl_platform.cer b/mall-shop/src/main/resources/payKey/lakala/prod/lkl_platform.cer
new file mode 100644
index 00000000..c24d19c2
--- /dev/null
+++ b/mall-shop/src/main/resources/payKey/lakala/prod/lkl_platform.cer
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEMTCCAxmgAwIBAgIGAXUrc4b4MA0GCSqGSIb3DQEBCwUAMHYxCzAJBgNVBAYT
+AkNOMRAwDgYDVQQIDAdCZWlKaW5nMRAwDgYDVQQHDAdCZWlKaW5nMRcwFQYDVQQK
+DA5MYWthbGEgQ28uLEx0ZDEqMCgGA1UEAwwhTGFrYWxhIE9yZ2FuaXphdGlvbiBW
+YWxpZGF0aW9uIENBMB4XDTIwMTAxNTA4NDk1MloXDTMwMTAxMzA4NDk1MlowZTEL
+MAkGA1UEBhMCQ04xEDAOBgNVBAgMB0JlaUppbmcxEDAOBgNVBAcMB0JlaUppbmcx
+FzAVBgNVBAoMDkxha2FsYSBDby4sTHRkMRkwFwYDVQQDDBBBUElHVy5MQUtBTEEu
+Q09NMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwAXZw9lupWcFXouC
+Nhm0DQT47Zf4KOIRF8rqT8Ps3pYzT8odROJ8rq4P+lciGrg29czpqrRM22yQktFr
+itvcM7JlE6jFbGH3rycnvGvhRYU/j1N9k0ozm8oVwmKX357/OtGzNivBECGSnU9L
+Bkp4Nm9M1K4cOwEuZ0xsQEthZjQYF0mDpnlWmVJL5i1Lq834atN2qrb/mzMHBNtD
+JnqRV7rPL39lKpe7LJiitsC2JuW1UbWZZU1NNwA/rz2d83C+KD1DLJ0+sMYY2Q3T
+OQ4BPAowDEwOH7XAXrHM/0kRm+ZeIFlwevEGIQWmMt1Ogz+AW4Iq0slINc4wOINK
+vH9tHwIDAQABo4HVMIHSMIGSBgNVHSMEgYowgYeAFCnH4DkZPR6CZxRn/kIqVsMo
+dJHpoWekZTBjMQswCQYDVQQGEwJDTjEQMA4GA1UECAwHQmVpSmluZzEQMA4GA1UE
+BwwHQmVpSmluZzEXMBUGA1UECgwOTGFrYWxhIENvLixMdGQxFzAVBgNVBAMMDkxh
+a2FsYSBSb290IENBggYBaiUALIowHQYDVR0OBBYEFIya0Yc4OSBer55JLyA0AYe9
+m8mTMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUA
+A4IBAQCBEwOlk3mXigNv94Drn3dcaY2ml/y+8yNpAIuUhuBE00WFoqEX5lOatFy5
+fzdXuC12lBVQ8SjSm3aH7k2X0eXqDzkOHiur2ZBRKmJ++J4TeenuSUOjSIbQK/DT
+vxaqFUjYwFSVCyizpy7wfU4wKt+jOuFb9LyULJ9lkM1dV9Kh7Lmd9+nlJYYuPEPU
+LJkkVZqSALSiiJudXnTwlISjZTXEAkJpdIlMw+hvPTAkoG95B95M+OV/uLbItGK+
+qT4+RHWo8EbBDPQYo6J4QYHOxRlfMoGBMyrz6XDt7ELLmT7ld4aE02w6KQPfK3gq
+kLDT+/STozvaNmXzBJh7J6KqxJBH
+-----END CERTIFICATE-----
\ No newline at end of file