igl hace 1 año
padre
commit
06f57e1c83

+ 5 - 9
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/OmsOrder.java

@@ -1,19 +1,15 @@
 package com.chelvc.cloud.vehicle.server.entity;
 
-import java.math.BigDecimal;
-import java.util.Date;
-
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.chelvc.framework.database.entity.ModifyEntity;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import lombok.ToString;
+import lombok.*;
 import lombok.experimental.SuperBuilder;
+
+import java.math.BigDecimal;
+import java.util.Date;
 /**
  * 订单对象 oms_order
  * 
@@ -74,7 +70,7 @@ public class OmsOrder extends ModifyEntity<Long>
     /** 订单来源:0->PC订单;1->app订单 */
     private Integer sourceType;
 
-    /** 订单状态:0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭;5->无效订单 */
+    /** 订单状态:0->待付款;1-已付款;2->待发货;3->已发货;4->已完成;5->已关闭;6->无效订单 */
     private Integer status;
 
     /** 订单类型:0->正常订单;1->秒杀订单 */

+ 1 - 1
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/Region.java

@@ -17,7 +17,7 @@ public class Region implements Serializable {
 
     private static final long serialVersionUID = 1639376448398184907L;
 
-    private int id;
+    private Integer id;
     private String NAME;
     private int pid;
     private String sname;

+ 6 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/PayService.java

@@ -0,0 +1,6 @@
+package com.chelvc.cloud.vehicle.server.service;
+
+public interface PayService {
+
+    void orderPay(Long orderId);
+}

+ 2 - 2
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/MerchantServiceImpl.java

@@ -37,7 +37,6 @@ import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 
-import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
@@ -57,7 +56,7 @@ public class MerchantServiceImpl extends ServiceImpl<MerchantMapper, Merchant> i
 
     private final CategoryService categoryService;
 
-    private final RedisTemplate<String, Serializable> redisTemplate;
+    private final RedisTemplate<String, Object> redisTemplate;
 
     private final LocationHandler locationHandler;
 
@@ -242,6 +241,7 @@ public class MerchantServiceImpl extends ServiceImpl<MerchantMapper, Merchant> i
             if(user == null){
                 return result;
             }
+            //LocationHandler locationHandler = locationHandlerConfig.getBean();
             Address address = locationHandler.ip2address(user.getHost());
             if(address == null){
                return result;

+ 4 - 16
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/OmsOrderServiceImpl.java

@@ -13,18 +13,6 @@ import com.chelvc.cloud.vehicle.server.dao.OmsOrderMapper;
 import com.chelvc.cloud.vehicle.server.dao.OmsOrderSettingMapper;
 import com.chelvc.cloud.vehicle.server.entity.*;
 import com.chelvc.cloud.vehicle.server.service.*;
-import com.chelvc.cloud.vehicle.server.entity.Merchant;
-import com.chelvc.cloud.vehicle.server.entity.OmsOrder;
-import com.chelvc.cloud.vehicle.server.entity.OmsOrderItem;
-import com.chelvc.cloud.vehicle.server.entity.OmsOrderSetting;
-import com.chelvc.cloud.vehicle.server.entity.UserCoupon;
-import com.chelvc.cloud.vehicle.server.service.GoodsService;
-import com.chelvc.cloud.vehicle.server.service.IOmsOrderItemService;
-import com.chelvc.cloud.vehicle.server.service.IOmsOrderService;
-import com.chelvc.cloud.vehicle.server.service.MerchantService;
-import com.chelvc.cloud.vehicle.server.service.OmsCartItemService;
-import com.chelvc.cloud.vehicle.server.service.OmsOrderSettingService;
-import com.chelvc.cloud.vehicle.server.service.UserCouponService;
 import com.chelvc.framework.base.context.SessionContextHolder;
 import com.chelvc.framework.common.model.Pagination;
 import com.chelvc.framework.common.util.StringUtils;
@@ -312,7 +300,7 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
         OmsOrder cancelOrder = cancelOrderList.get(0);
         if (cancelOrder != null) {
             //修改订单状态为取消
-            cancelOrder.setStatus(4);
+            cancelOrder.setStatus(5);
 //            this.baseMapper.updateByPrimaryKeySelective(cancelOrder);
             OmsOrderItem orderItem = new OmsOrderItem();
             orderItem.setOrderId(orderId);
@@ -347,10 +335,10 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
         if(!userId.equals(order.getUserId())){
             Asserts.check(true,"不能确认他人订单!");
         }
-        if(order.getStatus()!=2){
+        if(order.getStatus()!=3){
             Asserts.check(true,"该订单还未发货!");
         }
-        order.setStatus(3);
+        order.setStatus(4);
         order.setConfirmStatus(1);
         order.setReceiveTime(new Date());
         this.baseMapper.updateById(order);
@@ -407,7 +395,7 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
         if(!userId.equals(order.getUserId())){
             Asserts.check(true,"不能删除他人订单!");
         }
-        if(order.getStatus()==3||order.getStatus()==4){
+        if(order.getStatus()==4||order.getStatus()==5){
             order.setDeleteStatus(1);
             this.baseMapper.updateById(order);
         }else{

+ 251 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/PayServiceImpl.java

@@ -0,0 +1,251 @@
+package com.chelvc.cloud.vehicle.server.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.chelvc.cloud.vehicle.server.dao.OmsOrderMapper;
+import com.chelvc.cloud.vehicle.server.entity.OmsOrder;
+import com.chelvc.cloud.vehicle.server.service.PayService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.BufferedInputStream;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.nio.charset.StandardCharsets;
+import java.security.KeyStore;
+import java.security.PrivateKey;
+import java.security.PublicKey;
+import java.security.Signature;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
+import java.util.Objects;
+
+@Service
+@RequiredArgsConstructor(onConstructor = @__(@Autowired))
+public class PayServiceImpl implements PayService {
+
+    private final OmsOrderMapper omsOrderMapper;
+
+    @Override
+    public void orderPay(Long orderId) {
+        LambdaQueryWrapper<OmsOrder> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(OmsOrder::getId, orderId);
+        wrapper.eq(OmsOrder::getStatus, 0);
+        OmsOrder omsOrder = omsOrderMapper.selectOne(wrapper);
+        if(omsOrder == null){
+            return;
+        }
+        StringBuffer sb = new StringBuffer();
+        sb.append("merchantAcctId=").append("1001292117101").append("&");
+        sb.append("version=").append("v2.0").append("&");
+        sb.append("language=").append("1").append("&");
+        sb.append("signType=").append("4").append("&");
+        sb.append("payType=").append("21").append("&");
+        sb.append("bankId=").append("QTYH").append("&");
+        sb.append("orderId=").append("KQ20220609155005").append("&");
+        sb.append("orderTime=").append("20220609155005").append("&");
+        sb.append("orderAmount=").append("1").append("&");
+        sb.append("bindCard=").append("6222027781").append("&");
+        sb.append("bindMobile=").append("1662653").append("&");
+        sb.append("dealId=").append("104964327").append("&");
+        sb.append("bankDealId=").append("9841654761026121342").append("&");
+        sb.append("dealTime=").append("20220609155546").append("&");
+        sb.append("payAmount=").append("1").append("&");
+        sb.append("fee=").append("0").append("&");
+        sb.append("payResult=").append("10");
+    }
+
+    public static void main(String[] args) {
+
+        StringBuffer sb = new StringBuffer();
+        sb.append("merchantAcctId=").append("1001292117101").append("&");
+        sb.append("version=").append("v2.0").append("&");
+        sb.append("language=").append("1").append("&");
+        sb.append("signType=").append("4").append("&");
+        sb.append("payType=").append("21").append("&");
+        sb.append("bankId=").append("QTYH").append("&");
+        sb.append("orderId=").append("KQ20220609155005").append("&");
+        sb.append("orderTime=").append("20220609155005").append("&");
+        sb.append("orderAmount=").append("1").append("&");
+        sb.append("bindCard=").append("6222027781").append("&");
+        sb.append("bindMobile=").append("1662653").append("&");
+        sb.append("dealId=").append("104964327").append("&");
+        sb.append("bankDealId=").append("9841654761026121342").append("&");
+        sb.append("dealTime=").append("20220609155546").append("&");
+        sb.append("payAmount=").append("1").append("&");
+        sb.append("fee=").append("0").append("&");
+        sb.append("payResult=").append("10");
+        String base64 = "";
+        String SignMsgVal="merchantAcctId=1001292117101&version=v2.0&language=1&signType=4&payType=21&bankId=QTYH&orderId=KQ20220609155005&orderTime=20220609155005&orderAmount=1&bindCard=6222027781&bindMobile=1662653&dealId=104964327&bankDealId=9841654761026121342&dealTime=20220609155546&payAmount=1&fee=0&payResult=10";
+
+        //人民币网关账号,该账号为11位人民币网关商户编号+01,该参数必填。
+        String merchantAcctId = "1001295168301";
+        //编码方式,1代表 UTF-8; 2 代表 GBK; 3代表 GB2312 默认为1,该参数必填。
+        String inputCharset = "1";
+        //接收支付结果的页面地址,该参数一般置为空即可。
+        String pageUrl = "";
+        //服务器接收支付结果的后台地址,该参数务必填写,不能为空。
+        String bgUrl = "http://www.99bill.com/";
+        //网关版本,固定值:mobile1.0,该参数必填。
+        String version =  "mobile1.0";
+        //移动网关版本 phone代表手机版移动网关,pad代表平板移动网关,默认为phone
+        String mobileGateway="";
+        //语言种类,1代表中文显示,2代表英文显示。默认为1,该参数必填。
+        String language =  "1";
+        //签名类型,该值为4,代表PKI加密方式,该参数必填。
+        String signType =  "4";
+        //支付人姓名,可以为空。
+        String payerName= "";
+        //支付人联系类型,1 代表电子邮件方式;2 代表手机联系方式。可以为空。
+        String payerContactType =  "";
+        //支付人联系方式,与payerContactType设置对应,payerContactType为1,则填写邮箱地址;payerContactType为2,则填写手机号码。可以为空。
+        String payerContact =  "";
+        //指定付款人,可以为空
+        String payerIdType =  "";
+        //付款人标识,可以为空
+        String payerId =  "";
+        //付款人IP,可以为空
+        String payerIP =  "";
+        //商家的终端ip,支持Ipv4和Ipv6
+        String terminalIp =  "192.168.1.1";
+        //网络交易平台简称,英文或中文字符串,除微信支付宝支付外其他交易方式必传
+        String tdpformName =  "";
+        //商户订单号,以下采用时间来定义订单号,商户可以根据自己订单号的定义规则来定义该值,不能为空。
+        String orderId = "KQ"+new java.text.SimpleDateFormat("yyyyMMddHHmmss").format(new java.util.Date());
+        //订单金额,金额以“分”为单位,商户测试以1分测试即可,切勿以大金额测试。该参数必填。
+        String orderAmount = "1";
+        //订单提交时间,格式:yyyyMMddHHmmss,如:20071117020101,不能为空。
+        String orderTime = new java.text.SimpleDateFormat("yyyyMMddHHmmss").format(new java.util.Date());
+        //String orderTime = "20220224145101";
+        //快钱时间戳,格式:yyyyMMddHHmmss,如:20071117020101, 可以为空
+        String orderTimestamp= "";//new java.text.SimpleDateFormat("yyyyMMddHHmmss").format(new java.util.Date());;
+        //商品名称,可以为空。
+        String productName= "测试商品";
+        //商品数量,可以为空。
+        String productNum = "1";
+        //商品代码,可以为空。
+        String productId = "";
+        //商品描述,可以为空。
+        String productDesc = "";
+        //扩展字段1,商户可以传递自己需要的参数,支付完快钱会原值返回,可以为空。
+        String ext1 = "";
+        //扩展自段2,商户可以传递自己需要的参数,支付完快钱会原值返回,可以为空。
+        String ext2 = "";
+        //支付方式,一般为00,代表所有的支付方式。微信小程序26-3
+        String payType = "26-3";
+        //银行代码,如果payType为00,该值可以为空
+        String bankId = "";
+        //同一订单禁止重复提交标志,实物购物车填1,虚拟产品用0。1代表只能提交一次,0代表在支付不成功情况下可以再提交。可为空。
+        String redoFlag = "0";
+        //快钱合作伙伴的帐户号,即商户编号,可为空。
+        String pid = "";
+        //订单超时时间(秒),可为空。
+        String orderTimeOut = "";
+        //聚合支付参数
+        String aggregatePay="26-3:[appId=wx44377c7a02caaac9,openId=oxr7946y03Ui9LjsR4zGFi8OssbY,limitPay=0]";
+
+        //signMsg 签名字符串 不可空,生成加密签名串
+        String signMsgVal = "";
+        signMsgVal = appendParam(signMsgVal, "inputCharset", inputCharset);
+        signMsgVal = appendParam(signMsgVal, "pageUrl", pageUrl);
+        signMsgVal = appendParam(signMsgVal, "bgUrl", bgUrl);
+        signMsgVal = appendParam(signMsgVal, "version", version);
+        signMsgVal = appendParam(signMsgVal, "language", language);
+        signMsgVal = appendParam(signMsgVal, "signType", signType);
+        signMsgVal = appendParam(signMsgVal, "merchantAcctId",merchantAcctId);
+        signMsgVal = appendParam(signMsgVal, "payerName", payerName);
+        signMsgVal = appendParam(signMsgVal, "payerContactType",payerContactType);
+        signMsgVal = appendParam(signMsgVal, "payerContact", payerContact);
+        signMsgVal = appendParam(signMsgVal, "payerIdType", payerIdType);
+        signMsgVal = appendParam(signMsgVal, "payerId", payerId);
+        signMsgVal = appendParam(signMsgVal, "payerIP", payerIP);
+        signMsgVal = appendParam(signMsgVal, "orderId", orderId);
+        signMsgVal = appendParam(signMsgVal, "orderAmount", orderAmount);
+        signMsgVal = appendParam(signMsgVal, "orderTime", orderTime);
+        signMsgVal = appendParam(signMsgVal, "orderTimestamp", orderTimestamp);
+        signMsgVal = appendParam(signMsgVal, "productName", productName);
+        signMsgVal = appendParam(signMsgVal, "productNum", productNum);
+        signMsgVal = appendParam(signMsgVal, "productId", productId);
+        signMsgVal = appendParam(signMsgVal, "productDesc", productDesc);
+        signMsgVal = appendParam(signMsgVal, "ext1", ext1);
+        signMsgVal = appendParam(signMsgVal, "ext2", ext2);
+        signMsgVal = appendParam(signMsgVal, "payType", payType);
+        signMsgVal = appendParam(signMsgVal, "bankId", bankId);
+        signMsgVal = appendParam(signMsgVal, "redoFlag", redoFlag);
+        signMsgVal = appendParam(signMsgVal, "pid", pid);
+        signMsgVal = appendParam(signMsgVal, "orderTimeOut", orderTimeOut);
+        signMsgVal = appendParam(signMsgVal, "mobileGateway", mobileGateway);
+        signMsgVal = appendParam(signMsgVal, "aggregatePay", aggregatePay);
+
+        try {
+            System.out.println(signMsgVal);
+            KeyStore ks = KeyStore.getInstance("PKCS12");
+
+            //读取密钥仓库(相对路径)
+            String file = Objects.requireNonNull(PayServiceImpl.class.getClassLoader().getResource("payUtils/10012951683.pfx")).getPath().replaceAll("%20", " ");
+            System.out.println(file);
+
+            FileInputStream ksfis = new FileInputStream(file);
+            //InputStream inputStream = PayServiceImpl.class.getClassLoader().getResourceAsStream("payUtils/10012951683.pfx");
+            BufferedInputStream ksbufin = new BufferedInputStream(ksfis);
+            //证书密码
+            char[] keyPwd = "123456".toCharArray();
+            ks.load(ksbufin, keyPwd);
+
+            //证书别名	20190802.3300000002967055(10012155863)、20190801.3300000002925831(10012921171)
+            PrivateKey priK = (PrivateKey) ks.getKey("test-alias", keyPwd); //老别名:test-alias
+            //签名算法
+            Signature signature = Signature.getInstance("SHA256withRSA");  //SHA256withRSA,SHA1withRSA
+            signature.initSign(priK);
+            //signature.update(SignMsgVal.getBytes(StandardCharsets.UTF_8));
+            signature.update(signMsgVal.getBytes(StandardCharsets.UTF_8));
+            sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();
+            base64 = encoder.encode(signature.sign());
+
+        } catch(FileNotFoundException e){
+            System.out.println("123");
+        }catch (Exception ex) {
+            ex.printStackTrace();
+        }
+        System.out.println("test = "+base64);
+        String signMsg="Yku7O/TyRnCErbGwvo/EQxgNLgR61YJ9WQrxpD0I6HxIumGVRxQo4eQ/hn5CS57xM2GnJ7qtkWM3J/g9CRcK22S7EJ4E1zK2HuqYiScaFLolHWNszGe7kOPk3PovTFl4nGYUSW8vMzZEZgRTMdHNSpmib57o6Mrjq0+6xA1gSBBRqpaL6SO4IBfB6yldWHpkJN0RJlKlkGGRJjMEpLJPn8lTGPcOfJuNxmMq+qjbvdLyoxn7v0vK8bAPFT45bCdvGG+0HwUCYxtPPhFReZMXP/yJYEZ/TODSMlPhGM1dZXXbnZ5Sc4KJSWNB9CKgyKWcycMbfTlsraWtpsCwOr8k0g==";
+        try {
+            //快钱公钥
+            //String file = Pkipair.class.getResource("99bill.RSA.cer").toURI().getPath();
+            String file = Objects.requireNonNull(PayServiceImpl.class.getClassLoader().getResource("payUtils/CFCA_sandbox.cer")).toURI().getPath();
+            //System.out.println(file);
+            FileInputStream inStream = new FileInputStream(file);
+
+            CertificateFactory cf = CertificateFactory.getInstance("X.509");
+            X509Certificate cert = (X509Certificate) cf.generateCertificate(inStream);
+
+            PublicKey pk = cert.getPublicKey();
+            //验签算法
+            Signature signature = Signature.getInstance("SHA256withRSA");//SHA256withRSA,SHA1withRSA
+            signature.initVerify(pk);
+            signature.update(signMsgVal.getBytes());
+
+            sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
+            //System.out.println(new String(decoder.decodeBuffer(msg)));
+            boolean flag = signature.verify(decoder.decodeBuffer(base64));
+            System.out.println(flag);
+        } catch (Exception e) {
+            e.printStackTrace();
+            //System.out.println("no");
+        }
+    }
+
+    public static String appendParam(String returns, String paramId, String paramValue) {
+        if (!Objects.equals(returns, "")) {
+            if (!Objects.equals(paramValue, "")) {
+                returns += "&" + paramId + "=" + paramValue;
+            }
+        } else {
+            if (!Objects.equals(paramValue, "")) {
+                returns = paramId + "=" + paramValue;
+            }
+        }
+        return returns;
+    }
+}

+ 5 - 1
vehicle-server/src/main/resources/application-dev.yml

@@ -18,4 +18,8 @@ dubbo:
 
 nacos:
   config:
-    server-addr: 47.108.128.78:6848
+    server-addr: 47.108.128.78:6848
+
+location:
+  tencent:
+    key: VPKBZ-CR3CG-R23QE-QK2IY-LNXKZ-GCB34

BIN
vehicle-server/src/main/resources/payUtils/10012951683.pfx


+ 25 - 0
vehicle-server/src/main/resources/payUtils/CFCA_sandbox.cer

@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEHjCCAwagAwIBAgIIMwAAAAFIAUkwDQYJKoZIhvcNAQELBQAwXTELMAkGA1UE
+BhMCQ04xMDAuBgNVBAoMJ0NoaW5hIEZpbmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1
+dGhvcml0eTEcMBoGA1UEAwwTQ0ZDQSBBQ1MgVEVTVCBPQ0EzMzAeFw0xOTA1MTUw
+ODQwMTRaFw0yNDA1MTUwODQwMTRaMH8xCzAJBgNVBAYTAkNOMRgwFgYDVQQKDA9D
+RkNBIFRFU1QgT0NBMzMxDzANBgNVBAsMBjk5YmlsbDEZMBcGA1UECwwQT3JnYW5p
+emF0aW9uYWwtMTEqMCgGA1UEAwwhMDUxQOW/q+mSsea1i+ivlVJTQUBaOTlCaWxs
+VGVzdEAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp1mxpwPjVJdh
+ey3h19FHWY4gMpG89v0bX1INPxOBNgvkJTTH7bYrG7ReEFZD3WI61dpgXbgc6hSe
+5kgLUMvW6XpYmgSe8Yh2ffBeSH6O3qTCGv8QDMEDZrygGsNdEBdXm1voA73SRm/P
+8feFRbzPHxIQebukBO5K9eAJIFZTonYMY1+lxrGSP4bw+GuF9aCbLQnXz4ds726C
+32LjBX1LtUMqqCtwJvcrtVFlGIulrkq8H5v58d7gzXk4MJJIPjAU8XHFZfXHgiHw
+jbkGCubHe2yRZK1g1s8MfglbpmkDX3B8W2oDt47XYa65BZ0QYK1BKrG+B0oagbVP
+TYN0xZ2V6QIDAQABo4G/MIG8MB8GA1UdIwQYMBaAFJ7uXTLMc66SNswUEc//1w4w
+Pm/RMAwGA1UdEwEB/wQCMAAwPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL3Vjcmwu
+Y2ZjYS5jb20uY24vT0NBMzMvUlNBL2NybDI3Mi5jcmwwDgYDVR0PAQH/BAQDAgbA
+MB0GA1UdDgQWBBSv5vr2stVPyRTPmY4C0Vcfa+pzWzAdBgNVHSUEFjAUBggrBgEF
+BQcDAgYIKwYBBQUHAwQwDQYJKoZIhvcNAQELBQADggEBACMeT3Wk4n4MW4ll++IV
++BR1VAwORxANxtF8vGEN2sb+/eZ3e8+nOSB4X3WKIJgrT67+/WbeN8FK0S0V2Mrp
+bqlNoqxoQBG5zkizcOYFhzq7GB01U3zSkxC7uSvPTN69jVKmCbsCm73jsCYYTKaC
+RMsbNsp0Yr+u0VGT70JEseFBwQ/UsjVHUKXNywyIZZpn4IlSWW4sHMW+3EiPj/tP
+/hBLG/bqJM2FSUYI4dP1CBLuEqXo0FfvCdF3VKAfZtcEozDyAlpBbSNxidbjGv0d
+Hq47dAmFJRTyl9m7OaVNt+Q5WYnRs0YSafUZGA/28EYom1Yt0L2Vyup6ibntwf1L
+A+M=
+-----END CERTIFICATE-----