优化拉卡拉分账相关的方法

This commit is contained in:
Jack 2025-04-27 10:23:22 +08:00
parent 18da67511e
commit 5f796adc02
23 changed files with 477 additions and 80 deletions

View File

@ -449,11 +449,10 @@ public class LakalaPayServiceImpl implements LakalaPayService {
//3. 发送请求 //3. 发送请求
String responseStr = LKLSDK.httpPost(req); String responseStr = LKLSDK.httpPost(req);
// {'retCode':'000000','retMsg':'申请已受理请等待审核结果','respData':{'version':'1.0','orderNo':'KFPT20230223181025407788734','orgCode':'1','applyId':681201215598657536}}
JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr); JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr);
if (lakalaRespJSON == null || !lakalaRespJSON.getStr("retCode").equals("000000")) { if (lakalaRespJSON == null || !lakalaRespJSON.getStr("retCode").equals("000000")) {
throw new ApiException(I18nUtil._(lakalaRespJSON.getStr("retMsg"))); 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")); paramsJSON.set("apply_id", lakalaRespJSON.getByPath("respData.applyId"));
@ -468,7 +467,7 @@ public class LakalaPayServiceImpl implements LakalaPayService {
return CommonResult.success(null, "提交成功,待审核中!"); return CommonResult.success(null, "提交成功,待审核中!");
} catch (SDKException e) { } catch (SDKException e) {
log.error("分账申请失败:", e); log.error("分账申请失败:", e);
throw new ApiException(I18nUtil._("申请失败!"), e); throw new ApiException(I18nUtil._("分账申请失败!"), e);
} }
} }

View File

@ -357,6 +357,10 @@
<include>bootstrap.yml</include> <include>bootstrap.yml</include>
<include>bootstrap-${profiles.active}.yml</include> <include>bootstrap-${profiles.active}.yml</include>
<include>**/*.xml</include> <include>**/*.xml</include>
<include>**/*.crt</include>
<include>**/*.pem</include>
<include>**/*.p12</include>
<include>**/*.cer</include>
</includes> </includes>
</resource> </resource>
</resources> </resources>
@ -381,6 +385,10 @@
<nonFilteredFileExtensions> <nonFilteredFileExtensions>
<nonFilteredFileExtension>ttf</nonFilteredFileExtension> <nonFilteredFileExtension>ttf</nonFilteredFileExtension>
<nonFilteredFileExtension>ttc</nonFilteredFileExtension> <nonFilteredFileExtension>ttc</nonFilteredFileExtension>
<nonFilteredFileExtension>p12</nonFilteredFileExtension>
<nonFilteredFileExtension>cer</nonFilteredFileExtension>
<nonFilteredFileExtension>pem</nonFilteredFileExtension>
<nonFilteredFileExtension>pfx</nonFilteredFileExtension>
</nonFilteredFileExtensions> </nonFilteredFileExtensions>
</configuration> </configuration>
</plugin> </plugin>

View File

@ -32,7 +32,7 @@ public class IpUtil implements ApplicationRunner {
try { try {
return searcher.search(ip); return searcher.search(ip);
} catch (Exception e) { } catch (Exception e) {
log.error("IP 格式错误:{}", e); log.error("IP{} 格式错误:{}", ip, e);
return null; return null;
} }
} }

View File

@ -11,7 +11,7 @@ package com.suisung.mall.shop.lakala.controller;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import com.suisung.mall.common.api.CommonResult; import com.suisung.mall.common.api.CommonResult;
import com.suisung.mall.common.service.impl.BaseControllerImpl; 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.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.util.Base64Utils; import org.springframework.util.Base64Utils;
@ -28,7 +28,7 @@ import java.io.IOException;
public class LakalaController extends BaseControllerImpl { public class LakalaController extends BaseControllerImpl {
@Resource @Resource
private LakalaPayService lakalaPayService; private LakalaApiService lakalaPayService;
@ApiOperation(value = "本地文件转base64", notes = "本地文件转base64") @ApiOperation(value = "本地文件转base64", notes = "本地文件转base64")
@RequestMapping(value = "/file2base64", method = RequestMethod.POST) @RequestMapping(value = "/file2base64", method = RequestMethod.POST)
@ -37,6 +37,13 @@ public class LakalaController extends BaseControllerImpl {
return str; 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 = "商户分账业务开通申请") @ApiOperation(value = "商户分账业务开通申请", notes = "商户分账业务开通申请")
@RequestMapping(value = "/ledger/applyLedgerMer", method = RequestMethod.POST) @RequestMapping(value = "/ledger/applyLedgerMer", method = RequestMethod.POST)
public CommonResult ledgerApplyLedgerMer(@RequestBody JSONObject paramsJSON) { public CommonResult ledgerApplyLedgerMer(@RequestBody JSONObject paramsJSON) {

View File

@ -9,7 +9,7 @@
package com.suisung.mall.shop.lakala.controller; package com.suisung.mall.shop.lakala.controller;
import com.suisung.mall.common.service.impl.BaseControllerImpl; 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.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
@ -24,7 +24,7 @@ import javax.annotation.Resource;
public class LklTkController extends BaseControllerImpl { public class LklTkController extends BaseControllerImpl {
@Resource @Resource
private LklTkService lklTkService; private LklTkServiceImpl lklTkService;
@ApiOperation(value = "请求获取token商户进件", notes = "请求获取token商户进件") @ApiOperation(value = "请求获取token商户进件", notes = "请求获取token商户进件")
@RequestMapping(value = "/token", method = RequestMethod.POST) @RequestMapping(value = "/token", method = RequestMethod.POST)

View File

@ -14,7 +14,7 @@ import com.suisung.mall.common.api.CommonResult;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
public interface LakalaPayService { public interface LakalaApiService {
Boolean initLKLSDK(); Boolean initLKLSDK();
@ -134,5 +134,14 @@ public interface LakalaPayService {
*/ */
JSONObject applyLedgerMerReceiverBindNotify(HttpServletRequest request); JSONObject applyLedgerMerReceiverBindNotify(HttpServletRequest request);
/**
* 获取银行卡信息
* 参考https://o.lakala.com/#/home/document/detail?id=387
*
* @param bankCardNo
* @return
*/
JSONObject getBankCardBin(String bankCardNo);
} }

View File

@ -13,6 +13,14 @@ import com.suisung.mall.core.web.service.IBaseService;
public interface LklLedgerMemberService extends IBaseService<LklLedgerMember> { public interface LklLedgerMemberService extends IBaseService<LklLedgerMember> {
/**
* 根据银联商户号查询记录
*
* @param merCupNo
* @return
*/
LklLedgerMember getByMerCupNo(String merCupNo);
/** /**
* 根据银联商户号新增或修改记录 * 根据银联商户号新增或修改记录
* *

View File

@ -21,6 +21,15 @@ public interface LklLedgerMerReceiverBindService extends IBaseService<LklLedgerM
*/ */
Boolean saveOrUpdateByMerCupNoReceiverNo(LklLedgerMerReceiverBind record); Boolean saveOrUpdateByMerCupNoReceiverNo(LklLedgerMerReceiverBind record);
/**
* 根据接收方编号查询记录
*
* @param merCupNo
* @param receiverNo
* @return
*/
LklLedgerMerReceiverBind getByCondition(String merCupNo, String receiverNo);
/** /**
* 更新审核结果 * 更新审核结果
* *

View File

@ -20,4 +20,22 @@ public interface LklLedgerReceiverService extends IBaseService<LklLedgerReceiver
* @return * @return
*/ */
Boolean saveOrUpdateByReceiverNo(LklLedgerReceiver record); Boolean saveOrUpdateByReceiverNo(LklLedgerReceiver record);
/**
* 根据接收方编号查询记录
*
* @param receiverNo
* @return
*/
LklLedgerReceiver getByReceiverNo(String receiverNo);
/**
* 根据条件查询记录
*
* @param LicenseNo
* @param ContactMobile
* @param platformId
* @return
*/
LklLedgerReceiver getByCondition(String LicenseNo, String ContactMobile, Long platformId);
} }

View File

@ -28,7 +28,8 @@ import com.suisung.mall.common.modules.lakala.LklLedgerReceiver;
import com.suisung.mall.common.modules.store.ShopStoreBase; import com.suisung.mall.common.modules.store.ShopStoreBase;
import com.suisung.mall.common.utils.I18nUtil; import com.suisung.mall.common.utils.I18nUtil;
import com.suisung.mall.common.utils.StringUtils; import com.suisung.mall.common.utils.StringUtils;
import com.suisung.mall.shop.lakala.service.LakalaPayService; import com.suisung.mall.common.utils.UploadUtil;
import com.suisung.mall.shop.lakala.service.LakalaApiService;
import com.suisung.mall.shop.lakala.service.LklLedgerMemberService; import com.suisung.mall.shop.lakala.service.LklLedgerMemberService;
import com.suisung.mall.shop.lakala.service.LklLedgerMerReceiverBindService; import com.suisung.mall.shop.lakala.service.LklLedgerMerReceiverBindService;
import com.suisung.mall.shop.lakala.service.LklLedgerReceiverService; import com.suisung.mall.shop.lakala.service.LklLedgerReceiverService;
@ -48,7 +49,7 @@ import java.util.List;
@Slf4j @Slf4j
@Service @Service
public class LakalaPayServiceImpl implements LakalaPayService { public class LakalaApiServiceImpl implements LakalaApiService {
private static final boolean init = false; private static final boolean init = false;
private static final String lklSuccessCode = "000000"; private static final String lklSuccessCode = "000000";
//### 可选的两个参数不同的店铺商家可以数据库里配置不同的商户号和终端号 //### 可选的两个参数不同的店铺商家可以数据库里配置不同的商户号和终端号
@ -145,7 +146,7 @@ public class LakalaPayServiceImpl implements LakalaPayService {
//4. 响应 //4. 响应
return JSONUtil.parseObj(responseStr); return JSONUtil.parseObj(responseStr);
} catch (SDKException e) { } catch (SDKException e) {
LakalaPayServiceImpl.log.error("transPreOrder error", e); LakalaApiServiceImpl.log.error("transPreOrder error", e);
throw new ApiException(I18nUtil._("获取公众号绑定信息失败!"), e); throw new ApiException(I18nUtil._("获取公众号绑定信息失败!"), e);
} }
@ -403,23 +404,27 @@ public class LakalaPayServiceImpl implements LakalaPayService {
try { try {
//3. 发送请求 //3. 发送请求
String responseStr = LKLSDK.httpPost(req); String responseStr = LKLSDK.httpPost(req);
JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr); JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr);
if (StrUtil.isBlank(responseStr) if (StrUtil.isBlank(responseStr)
|| lakalaRespJSON == null || lakalaRespJSON == null) {
|| !lakalaRespJSON.getStr("retCode").equals(lklSuccessCode)) { throw new ApiException(I18nUtil._("文件上传无响应!"));
throw new ApiException(I18nUtil._("文件上传无响应或失败!")); }
if (!lakalaRespJSON.getStr("retCode").equals(lklSuccessCode)) {
throw new ApiException(I18nUtil._(lakalaRespJSON.getStr("retMsg")));
} }
return (JSONObject) lakalaRespJSON.get("respData"); return (JSONObject) lakalaRespJSON.get("respData");
} catch (SDKException e) { } catch (SDKException e) {
log.error("文件上传失败", e); log.error("文件上传出错", e);
throw new ApiException(I18nUtil._("文件上传失败"), e); throw new ApiException(I18nUtil._("文件上传出错"), e);
} }
} }
@Override @Override
public CommonResult applyLedgerMer(JSONObject paramsJSON) { public CommonResult applyLedgerMer(JSONObject paramsJSON) {
log.info("商户分账业务开通申请开始");
// 1. 配置初始化 // 1. 配置初始化
initLKLSDK(); initLKLSDK();
@ -436,7 +441,7 @@ public class LakalaPayServiceImpl implements LakalaPayService {
req.setSplitEntrustFileName(fileName); req.setSplitEntrustFileName(fileName);
// 分账结算委托书文件上传到拉卡拉服务器 // 分账结算委托书文件上传到拉卡拉服务器
JSONObject fileUploadResp = uploadFile(req.getOrderNo(), "SPLIT_ENTRUST_FILE", StringUtils.getFileExt(fileName), paramsJSON.getStr("splitEntrustFile")); JSONObject fileUploadResp = uploadFile(req.getOrderNo(), "SPLIT_ENTRUST_FILE", StringUtils.getFileExt(fileName), UploadUtil.URLFileToBase64(paramsJSON.getStr("splitEntrustFile")));
if (fileUploadResp == null || StrUtil.isBlank(fileUploadResp.getStr("attFileId"))) { if (fileUploadResp == null || StrUtil.isBlank(fileUploadResp.getStr("attFileId"))) {
throw new ApiException(I18nUtil._("分账结算委托书上传失败!")); throw new ApiException(I18nUtil._("分账结算委托书上传失败!"));
} }
@ -461,13 +466,14 @@ public class LakalaPayServiceImpl implements LakalaPayService {
//3. 发送请求 //3. 发送请求
String responseStr = LKLSDK.httpPost(req); String responseStr = LKLSDK.httpPost(req);
// 成功返回示例{'retCode':'000000','retMsg':'申请已受理请等待审核结果','respData':{'version':'1.0','orderNo':'KFPT20230223181025407788734','orgCode':'1','applyId':681201215598657536}}
JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr); JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr);
if (StrUtil.isBlank(responseStr) if (StrUtil.isBlank(responseStr) || lakalaRespJSON == null) {
|| lakalaRespJSON == null return CommonResult.failed(I18nUtil._("申请开通分账失败!"));
|| !lakalaRespJSON.getStr("retCode").equals(lklSuccessCode)) { }
throw new ApiException(I18nUtil._("分账申请失败!"));
// 成功返回示例{'retCode':'000000','retMsg':'申请已受理请等待审核结果','respData':{'version':'1.0','orderNo':'KFPT20230223181025407788734','orgCode':'1','applyId':681201215598657536}}
if (!lakalaRespJSON.getStr("retCode").equals(lklSuccessCode)) {
return CommonResult.failed(lakalaRespJSON.getStr("retMsg"));
} }
paramsJSON.set("apply_id", lakalaRespJSON.getByPath("respData.applyId")); paramsJSON.set("apply_id", lakalaRespJSON.getByPath("respData.applyId"));
@ -482,7 +488,7 @@ public class LakalaPayServiceImpl implements LakalaPayService {
return CommonResult.success(null, "提交成功,待审核中!"); return CommonResult.success(null, "提交成功,待审核中!");
} catch (SDKException e) { } catch (SDKException e) {
log.error("分账申请失败:", e); log.error("分账申请失败:", e);
throw new ApiException(I18nUtil._("申请失败"), e); throw new ApiException(I18nUtil._("申请开通分账出错"), e);
} }
} }
@ -514,20 +520,20 @@ public class LakalaPayServiceImpl implements LakalaPayService {
respData.put("retMsg", "响应处理失败!"); respData.put("retMsg", "响应处理失败!");
if (paramsJSON != null) { if (paramsJSON != null) {
JSONObject reqData = (JSONObject) paramsJSON.get("respData"); // JSONObject reqData = (JSONObject) paramsJSON.get("respData");
if (ObjectUtil.isEmpty(reqData)) { // if (ObjectUtil.isEmpty(reqData)) {
return respData; // return respData;
} // }
// 更改本地分账记录状态数据 // 更改本地分账记录状态数据
Boolean success = lklLedgerMemberService.updateAuditResult(reqData.getStr("applyId"), Boolean success = lklLedgerMemberService.updateAuditResult(paramsJSON.getStr("applyId"),
reqData.getStr("merInnerNo"), paramsJSON.getStr("merInnerNo"),
reqData.getStr("merCupNo"), paramsJSON.getStr("merCupNo"),
reqData.getStr("entrustFileName"), paramsJSON.getStr("entrustFileName"),
reqData.getStr("entrustFilePath"), paramsJSON.getStr("entrustFilePath"),
reqData.getStr("auditStatus"), paramsJSON.getStr("auditStatus"),
reqData.getStr("auditStatusText"), paramsJSON.getStr("auditStatusText"),
reqData.getStr("remark") paramsJSON.getStr("remark")
); );
if (success) { if (success) {
@ -549,6 +555,12 @@ public class LakalaPayServiceImpl implements LakalaPayService {
*/ */
@Override @Override
public CommonResult applyLedgerReceiver(JSONObject paramsJSON) { public CommonResult applyLedgerReceiver(JSONObject paramsJSON) {
// 判断分账接收方记录是否存在存在就不再新建了
LklLedgerReceiver lklLedgerReceiverOld = lklLedgerReceiverService.getByCondition(paramsJSON.getStr("licenseNo"), paramsJSON.getStr("contactMobile"), paramsJSON.getLong("platformId"));
if (lklLedgerReceiverOld != null) {
return CommonResult.success(lklLedgerReceiverOld, "分账接收方已创建过!");
}
// 1. 配置初始化 // 1. 配置初始化
initLKLSDK(); initLKLSDK();
@ -585,14 +597,15 @@ public class LakalaPayServiceImpl implements LakalaPayService {
for (JSONObject attachJSON : paramsJSON.getJSONArray("attachList").jsonIter()) { for (JSONObject attachJSON : paramsJSON.getJSONArray("attachList").jsonIter()) {
String fileName = attachJSON.getStr("attachName"); String fileName = attachJSON.getStr("attachName");
String attachType = attachJSON.getStr("attachType"); String attachType = attachJSON.getStr("attachType");
String fileBase64 = attachJSON.getStr("attachStoreFile"); String fileBase64 = UploadUtil.URLFileToBase64(attachJSON.getStr("attachStoreFile")); // 这个是 url 地址不是 base64 字节码
attachInfo.setAttachName(fileName); attachInfo.setAttachName(fileName);
attachInfo.setAttachType(attachType); attachInfo.setAttachType(attachType);
JSONObject fileUploadResp = uploadFile(StringUtils.genLklOrderNo(8), attachType, JSONObject fileUploadResp = uploadFile(StringUtils.genLklOrderNo(8), attachType,
StringUtils.getFileExt(fileName), fileBase64); StringUtils.getFileExt(fileName), fileBase64);
if (fileUploadResp == null || StrUtil.isBlank(fileUploadResp.getStr("attFileId"))) { if (fileUploadResp == null || StrUtil.isBlank(fileUploadResp.getStr("attFileId"))) {
throw new ApiException(I18nUtil._("附件上传失败!")); log.error("附件:{},{} 上传失败!", fileName, attachType);
continue;
} }
attachInfo.setAttachStorePath(fileUploadResp.getStr("attFileId")); attachInfo.setAttachStorePath(fileUploadResp.getStr("attFileId"));
@ -610,9 +623,12 @@ public class LakalaPayServiceImpl implements LakalaPayService {
try { try {
//3. 发送请求申请创建分账接收方 //3. 发送请求申请创建分账接收方
String responseStr = LKLSDK.httpPost(req); String responseStr = LKLSDK.httpPost(req);
JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr); JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr);
if (lakalaRespJSON == null || !lakalaRespJSON.getStr("retCode").equals(lklSuccessCode)) { if (StrUtil.isBlank(responseStr) || lakalaRespJSON == null) {
throw new ApiException(I18nUtil._("创建分账接收方无响应!"));
}
if (!lakalaRespJSON.getStr("retCode").equals(lklSuccessCode)) {
throw new ApiException(I18nUtil._(lakalaRespJSON.getStr("retMsg"))); throw new ApiException(I18nUtil._(lakalaRespJSON.getStr("retMsg")));
} }
@ -627,10 +643,10 @@ public class LakalaPayServiceImpl implements LakalaPayService {
// 新增或修改本地数据 // 新增或修改本地数据
lklLedgerReceiverService.saveOrUpdateByReceiverNo(lklLedgerReceiver); lklLedgerReceiverService.saveOrUpdateByReceiverNo(lklLedgerReceiver);
return CommonResult.success(null, "接收方创建成功!"); return CommonResult.success(lklLedgerReceiver, "创建接收方成功!");
} catch (SDKException e) { } catch (SDKException e) {
log.error("接收方创建失败:", e); log.error("接收方创建失败:", e);
throw new ApiException(I18nUtil._("接收方创建失败!"), e); throw new ApiException(I18nUtil._("创建接收方失败!"), e);
} }
} }
@ -643,6 +659,17 @@ public class LakalaPayServiceImpl implements LakalaPayService {
*/ */
@Override @Override
public CommonResult applyLedgerMerReceiverBind(JSONObject paramsJSON) { public CommonResult applyLedgerMerReceiverBind(JSONObject paramsJSON) {
// 检查分账方和接收方记录是否存在
if (lklLedgerMemberService.getByMerCupNo(paramsJSON.getStr("merCupNo")) == null
|| lklLedgerReceiverService.getByReceiverNo(paramsJSON.getStr("receiverNo")) == null) {
return CommonResult.failed(I18nUtil._("绑定方不存在!"));
}
LklLedgerMerReceiverBind lklLedgerMerReceiverBindOld = lklLedgerMerReceiverBindService.getByCondition(paramsJSON.getStr("merCupNo"), paramsJSON.getStr("receiverNo"));
if (lklLedgerMerReceiverBindOld != null) {
return CommonResult.success(lklLedgerMerReceiverBindOld, "分账绑定关系已存在!");
}
// 1. 配置初始化 // 1. 配置初始化
initLKLSDK(); initLKLSDK();
@ -659,10 +686,14 @@ public class LakalaPayServiceImpl implements LakalaPayService {
req.setReceiverNo(paramsJSON.getStr("receiverNo")); req.setReceiverNo(paramsJSON.getStr("receiverNo"));
String fileName = paramsJSON.getStr("entrustFileName"); String fileName = paramsJSON.getStr("entrustFileName");
String splitEntrustFileBase64 = paramsJSON.getStr("entrustFile"); String splitEntrustFileBase64 = UploadUtil.URLFileToBase64(paramsJSON.getStr("entrustFile")); // 这个是 url 地址不是 base64 字节码
req.setEntrustFileName(fileName); req.setEntrustFileName(fileName);
String retUrl = projectDomain + "/mobile/pay/lakala/ledger/applyLedgerMerReceiverBindNotify"; if (isProd()) {
projectDomain = projectDomain + "/api";
}
// 给拉卡拉通知的回调地址
String retUrl = projectDomain + "/mobile/shop/lakala/ledger/applyLedgerMerReceiverBindNotify";
req.setRetUrl(retUrl); req.setRetUrl(retUrl);
// 文件上传到拉卡拉服务器 // 文件上传到拉卡拉服务器
@ -701,7 +732,7 @@ public class LakalaPayServiceImpl implements LakalaPayService {
LklLedgerMerReceiverBind lklLedgerMerReceiverBind = JSONUtil.toBean(StringUtils.convertCamelToSnake(paramsJSON.toString()), LklLedgerMerReceiverBind.class); LklLedgerMerReceiverBind lklLedgerMerReceiverBind = JSONUtil.toBean(StringUtils.convertCamelToSnake(paramsJSON.toString()), LklLedgerMerReceiverBind.class);
lklLedgerMerReceiverBindService.saveOrUpdateByMerCupNoReceiverNo(lklLedgerMerReceiverBind); lklLedgerMerReceiverBindService.saveOrUpdateByMerCupNoReceiverNo(lklLedgerMerReceiverBind);
return CommonResult.success(null, "提交成功,待审核中!"); return CommonResult.success(lklLedgerMerReceiverBind, "提交成功,待审核中!");
} catch (SDKException e) { } catch (SDKException e) {
log.error("分账绑定关系申请失败:", e); log.error("分账绑定关系申请失败:", e);
throw new ApiException(I18nUtil._("分账绑定关系申请失败!"), e); throw new ApiException(I18nUtil._("分账绑定关系申请失败!"), e);
@ -726,25 +757,21 @@ public class LakalaPayServiceImpl implements LakalaPayService {
return JSONUtil.createObj().set("retCode", "OP90002").set("retMsg", "验签失败!"); return JSONUtil.createObj().set("retCode", "OP90002").set("retMsg", "验签失败!");
} }
// String requestBody = LakalaUtil.getBody(request);
JSONObject paramsJSON = JSONUtil.parseObj(requestBody); JSONObject paramsJSON = JSONUtil.parseObj(requestBody);
JSONObject respData = new JSONObject(); JSONObject respData = new JSONObject();
respData.put("retCode", "OP90003"); respData.put("retCode", "OP90003");
respData.put("retMsg", "响应处理失败!"); respData.put("retMsg", "响应处理失败!");
if (paramsJSON != null && paramsJSON.get("respData") != null) { if (paramsJSON != null) {
JSONObject reqData = (JSONObject) paramsJSON.get("respData"); Boolean success = lklLedgerMerReceiverBindService.updateAuditResult(paramsJSON.getStr("applyId"),
paramsJSON.getStr("merInnerNo"),
Boolean success = lklLedgerMerReceiverBindService.updateAuditResult(reqData.getStr("applyId"), paramsJSON.getStr("merCupNo"),
reqData.getStr("merInnerNo"), paramsJSON.getStr("receiverNo"),
reqData.getStr("merCupNo"), paramsJSON.getStr("entrustFileName"),
reqData.getStr("receiverNo"), paramsJSON.getStr("entrustFilePath"),
reqData.getStr("entrustFileName"), paramsJSON.getStr("auditStatus"),
reqData.getStr("entrustFilePath"), paramsJSON.getStr("auditStatusText"),
reqData.getStr("auditStatus"), paramsJSON.getStr("remark"));
reqData.getStr("auditStatusText"),
reqData.getStr("remark"));
if (success) { if (success) {
respData.put("retCode", lklSuccessCode); respData.put("retCode", lklSuccessCode);
respData.put("retMsg", "操作成功!"); respData.put("retMsg", "操作成功!");
@ -754,5 +781,43 @@ public class LakalaPayServiceImpl implements LakalaPayService {
return respData; return respData;
} }
/**
* 银行卡信息查询
* 参考https://o.lakala.com/#/home/document/detail?id=179
*
* @param bankCardNo 银行卡号
* @return bankCode, bankName, clearingBankCode
*/
@Override
public JSONObject getBankCardBin(String bankCardNo) {
if (StrUtil.isBlank(bankCardNo)) {
return null;
}
// 1. 配置初始化
initLKLSDK();
// //2. 装配数据
// V2MmsOpenApiBankCardBinRequest req = new V2MmsOpenApiLedgerApplyLedgerReceiverRequest();
//
// JSONObject formData = new JSONObject();
// formData.putByPath("reqData.version", "2.0");
// formData.putByPath("reqData.orderNo", StringUtils.genLklOrderNo(8));
// formData.putByPath("reqData.orgCode", orgCode);
// formData.putByPath("reqData.cardNo", bankCardNo);
//
// String urlPath = "/api/v2/mms/openApi/cardBin";
// ResponseEntity<JSONObject> 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;
}
} }

View File

@ -26,6 +26,24 @@ import java.util.List;
public class LklLedgerMemberServiceImpl extends BaseServiceImpl<LklLedgerMemberMapper, LklLedgerMember> implements LklLedgerMemberService { public class LklLedgerMemberServiceImpl extends BaseServiceImpl<LklLedgerMemberMapper, LklLedgerMember> implements LklLedgerMemberService {
/**
* 根据银联商户号查询记录
*
* @param merCupNo
* @return
*/
@Override
public LklLedgerMember getByMerCupNo(String merCupNo) {
if (StrUtil.isBlank(merCupNo)) {
return null;
}
QueryWrapper<LklLedgerMember> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("mer_cup_no", merCupNo);
queryWrapper.orderByAsc("id");
return getOne(queryWrapper);
}
/** /**
* 根据银联商户号新增或修改记录 * 根据银联商户号新增或修改记录
* *

View File

@ -12,6 +12,7 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.suisung.mall.common.constant.CommonConstant;
import com.suisung.mall.common.modules.lakala.LklLedgerMerReceiverBind; import com.suisung.mall.common.modules.lakala.LklLedgerMerReceiverBind;
import com.suisung.mall.core.web.service.impl.BaseServiceImpl; import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
import com.suisung.mall.shop.lakala.mapper.LklLedgerMerReceiverBindMapper; import com.suisung.mall.shop.lakala.mapper.LklLedgerMerReceiverBindMapper;
@ -30,13 +31,14 @@ public class LklLedgerMerReceiverBindServiceImpl extends BaseServiceImpl<LklLedg
*/ */
@Override @Override
public Boolean saveOrUpdateByMerCupNoReceiverNo(LklLedgerMerReceiverBind record) { public Boolean saveOrUpdateByMerCupNoReceiverNo(LklLedgerMerReceiverBind record) {
if (record == null || StrUtil.isBlank(record.getReceiver_no())) { if (record == null || StrUtil.isBlank(record.getMer_cup_no()) || StrUtil.isBlank(record.getReceiver_no())) {
return false; return false;
} }
QueryWrapper<LklLedgerMerReceiverBind> queryWrapper = new QueryWrapper<>(); QueryWrapper<LklLedgerMerReceiverBind> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("mer_cup_no", record.getMer_cup_no()); queryWrapper.eq("mer_cup_no", record.getMer_cup_no())
queryWrapper.eq("receiver_no", record.getReceiver_no()); .eq("receiver_no", record.getReceiver_no())
.eq("audit_status", CommonConstant.Enable);
List<LklLedgerMerReceiverBind> existsRecordList = list(queryWrapper); List<LklLedgerMerReceiverBind> existsRecordList = list(queryWrapper);
if (!CollectionUtil.isEmpty(existsRecordList) if (!CollectionUtil.isEmpty(existsRecordList)
&& existsRecordList.get(0) != null && existsRecordList.get(0) != null
@ -46,7 +48,21 @@ public class LklLedgerMerReceiverBindServiceImpl extends BaseServiceImpl<LklLedg
return updateById(record); return updateById(record);
} }
return save(record); return add(record);
}
public LklLedgerMerReceiverBind getByCondition(String merCupNo, String receiverNo) {
if (StrUtil.isBlank(merCupNo) || StrUtil.isBlank(receiverNo)) {
return null;
}
QueryWrapper<LklLedgerMerReceiverBind> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("mer_cup_no", merCupNo)
.eq("receiver_no", receiverNo)
.eq("audit_status", CommonConstant.Enable);
return getOne(queryWrapper);
} }
/** /**

View File

@ -9,8 +9,10 @@
package com.suisung.mall.shop.lakala.service.impl; package com.suisung.mall.shop.lakala.service.impl;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.common.modules.lakala.LklLedgerReceiver;
import com.suisung.mall.core.web.service.impl.BaseServiceImpl; import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
import com.suisung.mall.shop.lakala.mapper.LklLedgerReceiverMapper; import com.suisung.mall.shop.lakala.mapper.LklLedgerReceiverMapper;
@ -40,9 +42,14 @@ public class LklLedgerReceiverServiceImpl extends BaseServiceImpl<LklLedgerRecei
if (StrUtil.isNotBlank(record.getContact_mobile())) { if (StrUtil.isNotBlank(record.getContact_mobile())) {
queryWrapper.eq("contact_mobile", record.getContact_mobile()); queryWrapper.eq("contact_mobile", record.getContact_mobile());
} }
Long platformId = record.getPlatform_id();
if (ObjectUtil.isEmpty(platformId)) {
platformId = 0L;
}
queryWrapper.eq("platform_id", platformId).eq("status", CommonConstant.Enable);
List<LklLedgerReceiver> existsRecordList = list(queryWrapper); List<LklLedgerReceiver> existsRecordList = list(queryWrapper);
if (!CollectionUtil.isEmpty(existsRecordList) if (CollectionUtil.isNotEmpty(existsRecordList)
&& existsRecordList.get(0) != null && existsRecordList.get(0) != null
&& existsRecordList.get(0).getId() > 0) { && existsRecordList.get(0).getId() > 0) {
// update // update
@ -50,6 +57,56 @@ public class LklLedgerReceiverServiceImpl extends BaseServiceImpl<LklLedgerRecei
return updateById(record); return updateById(record);
} }
return save(record); return add(record);
}
/**
* 根据接收方编号查询记录
*
* @param receiverNo
* @return
*/
@Override
public LklLedgerReceiver getByReceiverNo(String receiverNo) {
if (StrUtil.isBlank(receiverNo)) {
return null;
}
QueryWrapper<LklLedgerReceiver> 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<LklLedgerReceiver> 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);
} }
} }

View File

@ -36,10 +36,13 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
@Service @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}") @Value("${lakala.tk.server_url}")
private String tkServerUrl;
@Value("${lakala.server_url}")
private String serverUrl; private String serverUrl;
@Value("${lakala.tk.client_id}") @Value("${lakala.tk.client_id}")
@ -48,6 +51,9 @@ public class LklTkService {
@Value("${lakala.tk.client_secret}") @Value("${lakala.tk.client_secret}")
private String clientSecret; private String clientSecret;
@Value("${lakala.org_code}")
private String orgCode;
@Value("${spring.profiles.active}") @Value("${spring.profiles.active}")
private String profile; private String profile;
@ -58,6 +64,10 @@ public class LklTkService {
private RedisService redisService; private RedisService redisService;
protected String buildLklTkUrl(String urlPath) { protected String buildLklTkUrl(String urlPath) {
return tkServerUrl + urlPath;
}
protected String buildLklServiceUrl(String urlPath) {
return serverUrl + urlPath; return serverUrl + urlPath;
} }
@ -406,4 +416,5 @@ public class LklTkService {
return jsonObject; return jsonObject;
} }
} }

View File

@ -24,6 +24,7 @@ import com.suisung.mall.shop.page.service.ShopPageBaseService;
import com.suisung.mall.shop.product.service.ShopPageUserFormService; import com.suisung.mall.shop.product.service.ShopPageUserFormService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
@ -44,6 +45,7 @@ import java.util.Map;
* @author Xinze * @author Xinze
* @since 2021-06-11 * @since 2021-06-11
*/ */
@Slf4j
@Api(tags = "后台页面管理") @Api(tags = "后台页面管理")
@RestController @RestController
@RequestMapping("/admin/shop/shop-page-base") @RequestMapping("/admin/shop/shop-page-base")
@ -230,6 +232,8 @@ public class ShopPageBaseController extends BaseControllerImpl {
throw new ApiUserException(I18nUtil._("用户信息异常!")); throw new ApiUserException(I18nUtil._("用户信息异常!"));
} }
log.info("ShopPageBaseController 用户信息:{}", JSONUtil.toJsonStr(user));
ModelAndView view = new ModelAndView("diy"); ModelAndView view = new ModelAndView("diy");
Integer subsite_id = user.getSite_id(); Integer subsite_id = user.getSite_id();
@ -244,6 +248,7 @@ public class ShopPageBaseController extends BaseControllerImpl {
//Integer tpl_id = getParameter("tpl_id", 1012); //Integer tpl_id = getParameter("tpl_id", 1012);
Integer app_type = 3; 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); shopPageAppService.getModel(view, subsite_id, store_id, tpl_id, app_type);
Map<String, Object> res = new HashMap<>(); Map<String, Object> res = new HashMap<>();

View File

@ -157,7 +157,7 @@ lakala:
lkl_platform_cer_path: payKey/lakala/dev/lkl_notify_cert_v2.cer lkl_platform_cer_path: payKey/lakala/dev/lkl_notify_cert_v2.cer
#机构代码 #机构代码
org_code: 1 org_code: 1
#商户号 #商户号 测试商户号未开通分账功能的8222900539908Q9
merchant_no: 82229007392000A merchant_no: 82229007392000A
#终端号 #终端号
term_no: D9296400 term_no: D9296400

View File

@ -152,24 +152,42 @@ sf-express:
enable: 2 enable: 2
#拉卡拉进件配置 #拉卡拉进件配置
lakala: 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
# #终端号码M0780629B2B收银台 M0780798专业化扫码
# term_no: M0780798
#服务地址 #服务地址
server_url: https://s2.lakala.com server_url: https://test.wsmsd.cn/sit
#应用Id #应用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 org_code: 1
#商户号 #商户号 测试商户号未开通分账功能的8222900539908Q9
merchant_no: 8226330599900LN merchant_no: 82229007392000A
#终端号码M0780629B2B收银台 M0780798专业化扫码 #终端号
term_no: M0780798 term_no: D9296400
#拉卡拉拓客进件配置 #拉卡拉拓客进件配置
tk: tk:
#服务地址 #服务地址

View File

@ -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-----

View File

@ -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-----

View File

@ -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-----

View File

@ -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-----

View File

@ -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-----

View File

@ -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-----