diff --git a/mall-common/pom.xml b/mall-common/pom.xml
index 626d5647..e679edd6 100644
--- a/mall-common/pom.xml
+++ b/mall-common/pom.xml
@@ -94,10 +94,12 @@
com.suisung.mall
core
1.0.3
-
+
+
+ mybatis-plus-boot-starter
+ com.baomidou
+
+
@@ -133,7 +135,7 @@
org.bouncycastle
bcprov-jdk15on
- 1.55
+ 1.59
compile
@@ -149,6 +151,16 @@
com.aliyun.oss
aliyun-sdk-oss
+
+
+ commons-lang
+ commons-lang
+
+
+ commons-logging
+ commons-logging
+
+
com.aliyun
@@ -164,6 +176,12 @@
com.tencentcloudapi
tencentcloud-sdk-java
3.1.87
+
+
+ okhttp
+ com.squareup.okhttp
+
+
com.github.qcloudsms
diff --git a/mall-pay/pom.xml b/mall-pay/pom.xml
index 116aa12f..cd7f53e2 100644
--- a/mall-pay/pom.xml
+++ b/mall-pay/pom.xml
@@ -68,6 +68,17 @@
de.codecentric
spring-boot-admin-starter-client
+
+
+
+ com.lkl.laop.sdk
+ lkl-laop-java-sdk
+ 1.0.7
+ ${project.basedir}/src/main/resources/lib/lkl-java-sdk-1.0.7.jar
+ system
+
+
+
org.springframework.boot
diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/controller/mobile/IndexController.java b/mall-pay/src/main/java/com/suisung/mall/pay/controller/mobile/IndexController.java
index 4f17a582..f7369623 100644
--- a/mall-pay/src/main/java/com/suisung/mall/pay/controller/mobile/IndexController.java
+++ b/mall-pay/src/main/java/com/suisung/mall/pay/controller/mobile/IndexController.java
@@ -3,6 +3,7 @@ package com.suisung.mall.pay.controller.mobile;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.suisung.mall.common.api.CommonResult;
@@ -26,10 +27,7 @@ import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -44,28 +42,29 @@ import java.util.Map;
@RequestMapping("/mobile/pay/index")
public class IndexController extends BaseControllerImpl {
+ private static final Logger log = LoggerFactory.getLogger(IndexController.class);
@Autowired
private PayUserPayService payUserPayService;
-
@Autowired
private PayConsumeRecordService payConsumeRecordService;
-
@Autowired
private PayPaymentChannelService payPaymentChannelService;
-
@Autowired
private PayBaseRechargeLevelService payBaseRechargeLevelService;
-
@Autowired
private PayConsumeTradeService payConsumeTradeService;
-
@Autowired
private PayConsumeWithdrawService payConsumeWithdrawService;
-
@Autowired
private PayUserResourceService payUserResourceService;
+ @Autowired
+ private LakalaService lakalaService;
- private static final Logger log = LoggerFactory.getLogger(IndexController.class);
+ @ApiOperation(value = "测试接口", notes = "测试接口")
+ @RequestMapping(value = "/test/case", method = RequestMethod.POST)
+ public JSONObject testCase(@RequestBody JSONObject objectJSON){
+ return lakalaService.transPreOrder((String) objectJSON.get("orderId"));
+ }
@ApiOperation(value = "获取支付密码", notes = "获取支付密码")
@RequestMapping(value = "/getPayPasswd", method = RequestMethod.GET)
@@ -220,7 +219,7 @@ public class IndexController extends BaseControllerImpl {
requestParams.put("password", password);
// 支付方式
- PayTypeBean payTypeBean = new PayTypeBean(prepayapp_flag, mp_flag, return_flag, prepay_flag,pc_scancode_flag,openid, payment_channel_code);
+ PayTypeBean payTypeBean = new PayTypeBean(prepayapp_flag, mp_flag, return_flag, prepay_flag, pc_scancode_flag, openid, payment_channel_code);
payUserPayService.pay(request, response, requestParams, payTypeBean);
}
@@ -246,14 +245,14 @@ public class IndexController extends BaseControllerImpl {
}
@RequestMapping(value = "/pay_state_detection", method = RequestMethod.GET)
- public CommonResult payStateDetection(@RequestParam String order_id){
+ public CommonResult payStateDetection(@RequestParam String order_id) {
UserDto userDto = getCurrentUser();
QueryWrapper tradeQueryWrapper = new QueryWrapper<>();
- tradeQueryWrapper.eq("order_id",order_id);
- tradeQueryWrapper.eq("buyer_id",userDto.getId());
+ tradeQueryWrapper.eq("order_id", order_id);
+ tradeQueryWrapper.eq("buyer_id", userDto.getId());
PayConsumeTrade payConsumeTrade = payConsumeTradeService.findOne(tradeQueryWrapper);
Integer trade_is_paid = payConsumeTrade.getTrade_is_paid();
- if (trade_is_paid.equals(StateCode.ORDER_PAID_STATE_YES)){
+ if (trade_is_paid.equals(StateCode.ORDER_PAID_STATE_YES)) {
return CommonResult.success("订单已支付");
}
return CommonResult.failed("订单未支付");
diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/LakalaService.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/LakalaService.java
new file mode 100644
index 00000000..643a7379
--- /dev/null
+++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/LakalaService.java
@@ -0,0 +1,16 @@
+/*
+ * Copyright (c) 2025. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+ * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
+ * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
+ * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
+ * Vestibulum commodo. Ut rhoncus gravida arcu.
+ */
+
+package com.suisung.mall.pay.service;
+
+import cn.hutool.json.JSONObject;
+
+public interface LakalaService {
+
+ JSONObject transPreOrder(String orderId);
+}
diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaServiceImpl.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaServiceImpl.java
new file mode 100644
index 00000000..e5612176
--- /dev/null
+++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaServiceImpl.java
@@ -0,0 +1,139 @@
+/*
+ * Copyright (c) 2025. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+ * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
+ * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
+ * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
+ * Vestibulum commodo. Ut rhoncus gravida arcu.
+ */
+
+package com.suisung.mall.pay.service.impl;
+
+
+import cn.hutool.json.JSONUtil;
+import com.lkl.laop.sdk.Config;
+import com.lkl.laop.sdk.LKLSDK;
+import com.lkl.laop.sdk.exception.SDKException;
+import com.lkl.laop.sdk.request.V3LabsTransPreorderRequest;
+import com.lkl.laop.sdk.request.model.V3LabsTradeLocationInfo;
+import com.lkl.laop.sdk.request.model.V3LabsTradePreorderWechatBus;
+import com.suisung.mall.pay.service.LakalaService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class LakalaServiceImpl implements LakalaService {
+
+ @Value("${lakala.term_no}")
+ private String termNo;
+ private static volatile boolean init = false;
+ @Value("${lakala.app_id}")
+ private String appId; // 拉卡拉appId
+ @Value("${lakala.serial_no}")
+ private String serialNo; // 你的证书序列号
+ @Value("${lakala.merchant_no}")
+ private String merchantNo;
+ /**
+ * 商户私钥信息地址
+ */
+ @Value("${lakala.pri_key_path}")
+ private String priKeyPath;
+ /**
+ * 拉卡拉支付平台证书地址
+ */
+// @Value("${lakala.lkl_cer_path}")
+ @Value("${lakala.lkl_notify_cer_path}")
+ private String lklCerPath;
+ /**
+ * 拉卡拉支付平台证书地址2(用于拉卡拉通知验签)
+ */
+ @Value("${lakala.lkl_notify_cer_path}")
+ private String lklNotifyCerPath;
+ /**
+ * 拉卡拉报文加密对称性密钥
+ */
+ @Value("${lakala.sm4_key}")
+ private String sm4Key;
+ /**
+ * 服务地址
+ */
+ @Value("${lakala.server_url}")
+ private String serverUrl;
+
+ /***
+ * @Description: 初始化设置商户公共参数(全局只需设置一次)
+ * @throws Exception
+ */
+ public void doInit() {
+ if (!init) {
+ init = initLKLSDK();
+ }
+ }
+
+ /**
+ * 初始化 拉卡拉 SDK
+ *
+ * @return
+ */
+ public boolean initLKLSDK() {
+ Config config = new Config();
+ config.setAppId(appId);
+ config.setSerialNo(serialNo);
+ config.setPriKeyPath(priKeyPath);
+ config.setLklCerPath(lklCerPath);
+ config.setLklNotifyCerPath(lklNotifyCerPath);
+ config.setServerUrl(serverUrl);
+ config.setSm4Key(sm4Key);
+ try {
+ return LKLSDK.init(config);
+ } catch (SDKException e) {
+ log.error("doInit error", e);
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public cn.hutool.json.JSONObject transPreOrder(String orderId) {
+ // 1. 配置初始化
+ doInit();
+ //2. 装配数据
+ /*** 微信主扫场景示例 */
+ V3LabsTransPreorderRequest v3LabsTransPreorderWechatReq = new V3LabsTransPreorderRequest();
+ v3LabsTransPreorderWechatReq.setMerchantNo(merchantNo);
+ v3LabsTransPreorderWechatReq.setTermNo(termNo);
+ v3LabsTransPreorderWechatReq.setOutTradeNo(orderId);
+ v3LabsTransPreorderWechatReq.setSubject("油麦菜5斤装特惠");
+ v3LabsTransPreorderWechatReq.setAccountType("WECHAT");
+ v3LabsTransPreorderWechatReq.setTransType("51");
+ v3LabsTransPreorderWechatReq.setTotalAmount("1");
+ v3LabsTransPreorderWechatReq.setNotifyUrl("http://mall.gpxscs.cn/notify");
+ v3LabsTransPreorderWechatReq.setRemark("测试预下单备注");
+
+ //地址位置信息
+ V3LabsTradeLocationInfo v3LabsTradePreorderLocationInfo1 = new V3LabsTradeLocationInfo("12.34.56.78");
+ v3LabsTransPreorderWechatReq.setLocationInfo(v3LabsTradePreorderLocationInfo1);
+
+ //微信主扫场景下acc_busi_fields域内容
+ V3LabsTradePreorderWechatBus wechatBus = new V3LabsTradePreorderWechatBus();
+ wechatBus.setSubAppid("wx5a73f844dac0da5c");
+ wechatBus.setUserId("oDVKR7T0qxg6O8tqIL9SgY6LXqqQ");
+ wechatBus.setGoodsTag("农家食品");
+ wechatBus.setLimitPayer("ADULT");
+ v3LabsTransPreorderWechatReq.setAccBusiFields(wechatBus);
+
+ //3. 发送请求
+ String response = "";
+ try {
+ response = LKLSDK.httpPost(v3LabsTransPreorderWechatReq);
+
+ //4. 响应
+ return JSONUtil.parseObj(response);
+ } catch (SDKException e) {
+ log.error("doInit error", e);
+ throw new RuntimeException(e);
+ }
+
+ }
+
+}
diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayUserPayServiceImpl.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayUserPayServiceImpl.java
index a2c27410..5983d9e7 100644
--- a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayUserPayServiceImpl.java
+++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayUserPayServiceImpl.java
@@ -48,10 +48,10 @@ import com.suisung.mall.common.modules.order.ShopOrderInfo;
import com.suisung.mall.common.modules.order.ShopOrderReturn;
import com.suisung.mall.common.modules.pay.*;
import com.suisung.mall.common.modules.pay.dto.ItemActivityInfoDTO;
-import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
import com.suisung.mall.common.utils.CheckUtil;
import com.suisung.mall.common.utils.I18nUtil;
import com.suisung.mall.common.utils.LogUtil;
+import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
import com.suisung.mall.pay.entity.AliPayBean;
import com.suisung.mall.pay.entity.H5SceneInfo;
import com.suisung.mall.pay.entity.PayTypeBean;
@@ -61,7 +61,6 @@ import io.seata.spring.annotation.GlobalTransactional;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Service;
import org.springframework.transaction.TransactionDefinition;
@@ -91,41 +90,30 @@ import static com.suisung.mall.common.utils.ContextUtil.getCurrentUser;
@Service
public class PayUserPayServiceImpl extends BaseServiceImpl implements PayUserPayService {
+ private static final Logger logger = LoggerFactory.getLogger(PayUserPayServiceImpl.class);
@Autowired
private PayPaymentChannelService payPaymentChannelService;
-
@Autowired
private PayConsumeTradeService payConsumeTradeService;
-
@Autowired
private AccountBaseConfigService accountBaseConfigService;
-
@Autowired
private ShopService shopService;
-
@Autowired
private PayConsumeTradeCombineService payConsumeTradeCombineService;
-
@Autowired
private PayConsumeDepositService payConsumeDepositService;
-
@Autowired
private AliPayBean aliPayBean;
-
@Autowired
private AccountService accountService;
-
@Autowired
private PayUserResourceService payUserResourceService;
-
@Autowired
private DataSourceTransactionManager transactionManager;
-
@Autowired
private TransactionDefinition transactionDefinition;
- private static final Logger logger = LoggerFactory.getLogger(PayUserPayServiceImpl.class);
-
/**
* 获取支付密码
*
@@ -265,6 +253,7 @@ public class PayUserPayServiceImpl extends BaseServiceImpl params = UnifiedOrderModel.builder().appid(appid).mch_id(wxPayApiConfig.getMchId()).nonce_str(WxPayKit.generateStr()).goods_tag(trade_remark).body(subject).attach("").out_trade_no(out_trade_no).total_fee(total_fee).spbill_create_ip(ip).notify_url(domain + "/wxPay_notify_url").time_start(DateUtil.format(new Date(), "yyyyMMddHHmmss")).trade_type(TradeType.JSAPI.getTradeType()).openid(openId).build().createSign(wxPayApiConfig.getPartnerKey(), SignType.HMACSHA256);
+ Map params = UnifiedOrderModel.builder()
+ .appid(appid)
+ .mch_id(wxPayApiConfig.getMchId())
+ .nonce_str(WxPayKit.generateStr())
+ .goods_tag(trade_remark)
+ .body(subject).attach("")
+ .out_trade_no(out_trade_no)
+ .total_fee(total_fee)
+ .spbill_create_ip(ip)
+ .notify_url(domain + "/wxPay_notify_url")
+ .time_start(DateUtil.format(new Date(), "yyyyMMddHHmmss"))
+ .trade_type(TradeType.JSAPI.getTradeType())
+ .openid(openId).build()
+ .createSign(wxPayApiConfig.getPartnerKey(), SignType.HMACSHA256);
String xmlResult = WxPayApi.pushOrder(false, params);
Map resultMap = WxPayKit.xmlToMap(xmlResult);
@@ -1402,14 +1404,14 @@ public class PayUserPayServiceImpl extends BaseServiceImpl resultMap = WxPayKit.xmlToMap(xmlResult);
String returnCode = resultMap.get("return_code");
String resultCode = resultMap.get("result_code");
if (!WxPayKit.codeIsOk(returnCode) || !WxPayKit.codeIsOk(resultCode)) {
- LogUtil.error("微信退款异常!" + resultMap.toString());
+ LogUtil.error("微信退款异常!" + resultMap);
return null;
}
diff --git a/mall-pay/src/main/resources/bootstrap-dev.yml b/mall-pay/src/main/resources/bootstrap-dev.yml
index 5c6f0879..cf8dbfd8 100644
--- a/mall-pay/src/main/resources/bootstrap-dev.yml
+++ b/mall-pay/src/main/resources/bootstrap-dev.yml
@@ -108,4 +108,15 @@ logging:
reactor: error
springfox: error
logstash:
- host: @logstash.host@
\ No newline at end of file
+ host: @logstash.host@
+#拉卡拉支付和分账
+lakala:
+ app_id: OP00000003
+ serial_no: 00dfba8194c41b84cf
+ merchant_no: 82229007392000A
+ pri_key_path: mall-pay/src/main/resources/payKey/lakala/dev/OP00000003_private_key.pem
+ lkl_cer_path: mall-pay/src/main/resources/payKey/lakala/dev/OP00000003_cert.cer
+ lkl_notify_cer_path: mall-pay/src/main/resources/payKey/lakala/dev/lkl_notify_cert_v2.cer
+ term_no: D9296400
+ sm4_key: uIj6CPg1GZAY10dXFfsEAQ==
+ server_url: https://test.wsmsd.cn/sit
\ No newline at end of file
diff --git a/mall-pay/src/main/resources/bootstrap-local.yml b/mall-pay/src/main/resources/bootstrap-local.yml
index 5c6f0879..cf8dbfd8 100644
--- a/mall-pay/src/main/resources/bootstrap-local.yml
+++ b/mall-pay/src/main/resources/bootstrap-local.yml
@@ -108,4 +108,15 @@ logging:
reactor: error
springfox: error
logstash:
- host: @logstash.host@
\ No newline at end of file
+ host: @logstash.host@
+#拉卡拉支付和分账
+lakala:
+ app_id: OP00000003
+ serial_no: 00dfba8194c41b84cf
+ merchant_no: 82229007392000A
+ pri_key_path: mall-pay/src/main/resources/payKey/lakala/dev/OP00000003_private_key.pem
+ lkl_cer_path: mall-pay/src/main/resources/payKey/lakala/dev/OP00000003_cert.cer
+ lkl_notify_cer_path: mall-pay/src/main/resources/payKey/lakala/dev/lkl_notify_cert_v2.cer
+ term_no: D9296400
+ sm4_key: uIj6CPg1GZAY10dXFfsEAQ==
+ server_url: https://test.wsmsd.cn/sit
\ No newline at end of file
diff --git a/mall-pay/src/main/resources/bootstrap-prod.yml b/mall-pay/src/main/resources/bootstrap-prod.yml
index d54022e5..267e906d 100644
--- a/mall-pay/src/main/resources/bootstrap-prod.yml
+++ b/mall-pay/src/main/resources/bootstrap-prod.yml
@@ -110,4 +110,15 @@ logging:
reactor: error
springfox: error
logstash:
- host: @logstash.host@
\ No newline at end of file
+ host: @logstash.host@
+#拉卡拉支付和分账
+lakala:
+ app_id: OP00000003
+ serial_no: 00dfba8194c41b84cf
+ merchant_no: 82229007392000A
+ pri_key_path: mall-pay/src/main/resources/payKey/lakala/prod/OP00000003_private_key.pem
+ lkl_cer_path: mall-pay/src/main/resources/payKey/lakala/prod/OP00000003_cert.cer
+ lkl_notify_cer_path: mall-pay/src/main/resources/payKey/lakala/prod/lkl_notify_cert_v2.cer
+ term_no: D9296400
+ sm4_key: uIj6CPg1GZAY10dXFfsEAQ==
+ server_url: https://test.wsmsd.cn/sit
\ No newline at end of file
diff --git a/mall-pay/src/main/resources/bootstrap-test.yml b/mall-pay/src/main/resources/bootstrap-test.yml
index 5c6f0879..cf8dbfd8 100644
--- a/mall-pay/src/main/resources/bootstrap-test.yml
+++ b/mall-pay/src/main/resources/bootstrap-test.yml
@@ -108,4 +108,15 @@ logging:
reactor: error
springfox: error
logstash:
- host: @logstash.host@
\ No newline at end of file
+ host: @logstash.host@
+#拉卡拉支付和分账
+lakala:
+ app_id: OP00000003
+ serial_no: 00dfba8194c41b84cf
+ merchant_no: 82229007392000A
+ pri_key_path: mall-pay/src/main/resources/payKey/lakala/dev/OP00000003_private_key.pem
+ lkl_cer_path: mall-pay/src/main/resources/payKey/lakala/dev/OP00000003_cert.cer
+ lkl_notify_cer_path: mall-pay/src/main/resources/payKey/lakala/dev/lkl_notify_cert_v2.cer
+ term_no: D9296400
+ sm4_key: uIj6CPg1GZAY10dXFfsEAQ==
+ server_url: https://test.wsmsd.cn/sit
\ No newline at end of file
diff --git a/mall-pay/src/main/resources/bootstrap-uat.yml b/mall-pay/src/main/resources/bootstrap-uat.yml
index 5c6f0879..cf8dbfd8 100644
--- a/mall-pay/src/main/resources/bootstrap-uat.yml
+++ b/mall-pay/src/main/resources/bootstrap-uat.yml
@@ -108,4 +108,15 @@ logging:
reactor: error
springfox: error
logstash:
- host: @logstash.host@
\ No newline at end of file
+ host: @logstash.host@
+#拉卡拉支付和分账
+lakala:
+ app_id: OP00000003
+ serial_no: 00dfba8194c41b84cf
+ merchant_no: 82229007392000A
+ pri_key_path: mall-pay/src/main/resources/payKey/lakala/dev/OP00000003_private_key.pem
+ lkl_cer_path: mall-pay/src/main/resources/payKey/lakala/dev/OP00000003_cert.cer
+ lkl_notify_cer_path: mall-pay/src/main/resources/payKey/lakala/dev/lkl_notify_cert_v2.cer
+ term_no: D9296400
+ sm4_key: uIj6CPg1GZAY10dXFfsEAQ==
+ server_url: https://test.wsmsd.cn/sit
\ No newline at end of file
diff --git a/mall-pay/src/main/resources/lib/lkl-java-sdk-1.0.7.jar b/mall-pay/src/main/resources/lib/lkl-java-sdk-1.0.7.jar
new file mode 100644
index 00000000..aee89f34
Binary files /dev/null and b/mall-pay/src/main/resources/lib/lkl-java-sdk-1.0.7.jar differ
diff --git a/mall-pay/src/main/resources/payKey/lakala/dev/OP00000003_cert.cer b/mall-pay/src/main/resources/payKey/lakala/dev/OP00000003_cert.cer
new file mode 100644
index 00000000..f85afd02
--- /dev/null
+++ b/mall-pay/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-pay/src/main/resources/payKey/lakala/dev/OP00000003_private_key.pem b/mall-pay/src/main/resources/payKey/lakala/dev/OP00000003_private_key.pem
new file mode 100644
index 00000000..7d95886c
--- /dev/null
+++ b/mall-pay/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-pay/src/main/resources/payKey/lakala/dev/lkl_notify_cert_v2.cer b/mall-pay/src/main/resources/payKey/lakala/dev/lkl_notify_cert_v2.cer
new file mode 100644
index 00000000..12723ebe
--- /dev/null
+++ b/mall-pay/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-pay/src/main/resources/payKey/lakala/prod/OP00000003_cert.cer b/mall-pay/src/main/resources/payKey/lakala/prod/OP00000003_cert.cer
new file mode 100644
index 00000000..f85afd02
--- /dev/null
+++ b/mall-pay/src/main/resources/payKey/lakala/prod/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-pay/src/main/resources/payKey/lakala/prod/OP00000003_private_key.pem b/mall-pay/src/main/resources/payKey/lakala/prod/OP00000003_private_key.pem
new file mode 100644
index 00000000..7d95886c
--- /dev/null
+++ b/mall-pay/src/main/resources/payKey/lakala/prod/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-pay/src/main/resources/payKey/lakala/prod/lkl_notify_cert_v2.cer b/mall-pay/src/main/resources/payKey/lakala/prod/lkl_notify_cert_v2.cer
new file mode 100644
index 00000000..12723ebe
--- /dev/null
+++ b/mall-pay/src/main/resources/payKey/lakala/prod/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-----