拉卡拉支付增加接口

This commit is contained in:
Jack 2025-01-16 21:20:04 +08:00
parent 540820281d
commit e559ac5dc5
18 changed files with 431 additions and 43 deletions

View File

@ -94,10 +94,12 @@
<groupId>com.suisung.mall</groupId>
<artifactId>core</artifactId>
<version>1.0.3</version>
<!--
<scope>system</scope>
<systemPath>${project.basedir}/lib/core-1.0.3.jar</systemPath>
-->
<exclusions>
<exclusion>
<artifactId>mybatis-plus-boot-starter</artifactId>
<groupId>com.baomidou</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- &lt;!&ndash; https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa &ndash;&gt;-->
@ -133,7 +135,7 @@
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.55</version>
<version>1.59</version>
<scope>compile</scope>
</dependency>
<dependency>
@ -149,6 +151,16 @@
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<exclusions>
<exclusion>
<artifactId>commons-lang</artifactId>
<groupId>commons-lang</groupId>
</exclusion>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
@ -164,6 +176,12 @@
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java</artifactId>
<version>3.1.87</version>
<exclusions>
<exclusion>
<artifactId>okhttp</artifactId>
<groupId>com.squareup.okhttp</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.github.qcloudsms</groupId>

View File

@ -68,6 +68,17 @@
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>
<!--拉卡拉支付与分账 开始-->
<dependency>
<groupId>com.lkl.laop.sdk</groupId>
<artifactId>lkl-laop-java-sdk</artifactId>
<version>1.0.7</version>
<systemPath>${project.basedir}/src/main/resources/lib/lkl-java-sdk-1.0.7.jar</systemPath>
<scope>system</scope>
</dependency>
<!--拉卡拉支付与分账 结束-->
<!-- rabbitMQ消息队列 -->
<dependency>
<groupId>org.springframework.boot</groupId>

View File

@ -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<PayConsumeTrade> 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("订单未支付");

View File

@ -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);
}

View File

@ -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);
}
}
}

View File

@ -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<PayUserPayMapper, PayUserPay> 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<PayUserPayMapper, Pay
trade_row.setTrade_title(I18nUtil._("在线购物"));
trade_row.setTrade_desc(I18nUtil._("在线购物"));
}
// 去支付
toPay(request, response, trade_row, payTypeBean);
return;
} else {
@ -528,7 +517,20 @@ public class PayUserPayServiceImpl extends BaseServiceImpl<PayUserPayMapper, Pay
String ip = IpKit.getRealIp(request);
WxPayApiConfig wxPayApiConfig = WxPayApiConfigKit.getWxPayApiConfig();
String domain = wxPayApiConfig.getDomain();
Map<String, String> 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<String, String> 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<String, String> resultMap = WxPayKit.xmlToMap(xmlResult);
@ -1402,14 +1404,14 @@ public class PayUserPayServiceImpl extends BaseServiceImpl<PayUserPayMapper, Pay
//IJPAY低版本jdk环境使用退款方法jdk1.8.0_111以下
//String xmlResult = WxPayApi.orderRefund(false, params, certInStream, wxPayApiConfig.getMchId());
//下面的方法解决IJPAY高版本jdk导致退款协议不支持问题jdk1.8.0_111以上
String xmlResult = HttpKit.getDelegate().post(WxPayApi.getReqUrl(WxApiType.REFUND, (WxDomain) null, false), WxPayKit.toXml(params), certInStream, wxPayApiConfig.getMchId(), "");
String xmlResult = HttpKit.getDelegate().post(WxPayApi.getReqUrl(WxApiType.REFUND, null, false), WxPayKit.toXml(params), certInStream, wxPayApiConfig.getMchId(), "");
logger.info(String.format(I18nUtil._("微信退款返回参数: xmlResult【%s】"), xmlResult));
Map<String, String> 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;
}

View File

@ -108,4 +108,15 @@ logging:
reactor: error
springfox: error
logstash:
host: @logstash.host@
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

View File

@ -108,4 +108,15 @@ logging:
reactor: error
springfox: error
logstash:
host: @logstash.host@
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

View File

@ -110,4 +110,15 @@ logging:
reactor: error
springfox: error
logstash:
host: @logstash.host@
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

View File

@ -108,4 +108,15 @@ logging:
reactor: error
springfox: error
logstash:
host: @logstash.host@
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

View File

@ -108,4 +108,15 @@ logging:
reactor: error
springfox: error
logstash:
host: @logstash.host@
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

Binary file not shown.

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