diff --git a/mall-common/src/main/java/com/suisung/mall/common/feignService/ShopService.java b/mall-common/src/main/java/com/suisung/mall/common/feignService/ShopService.java index 7da464e6..4cade089 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/feignService/ShopService.java +++ b/mall-common/src/main/java/com/suisung/mall/common/feignService/ShopService.java @@ -232,6 +232,15 @@ public interface ShopService { @GetMapping(value = "/admin/shop/shop-store-base/get") CommonResult getStoreBase(@RequestParam(name = "store_id", required = false) Integer store_id); + /** + * 获取店铺的拉卡拉商户号和终端号(仅仅两个字段) + * @param store_id + * @return + */ + @PostMapping(value = "/admin/shop/shop-store-base/lkl-merchant-term/get") + ShopStoreBase getLklMerchantNoAndTermNo(@RequestParam(name = "store_id") Integer store_id); + + @GetMapping(value = "/admin/shop/shop-order-base/handleIsBuy") Map handleIsBuy(@RequestParam(name = "product_id") Long product_id); diff --git a/mall-common/src/main/java/com/suisung/mall/common/modules/store/ShopStoreBase.java b/mall-common/src/main/java/com/suisung/mall/common/modules/store/ShopStoreBase.java index 653da773..2e4b4fce 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/modules/store/ShopStoreBase.java +++ b/mall-common/src/main/java/com/suisung/mall/common/modules/store/ShopStoreBase.java @@ -114,4 +114,10 @@ public class ShopStoreBase implements Serializable { @ApiModelProperty(value = "所属分站:0-总站") private Integer subsite_id; + @ApiModelProperty(value = "关联拉卡拉的商户号") + private String lkl_merchant_no; + + @ApiModelProperty(value = "关联拉卡拉的终端号码") + private String lkl_term_no; + } diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/LakalaService.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/LakalaService.java index d3aceaa5..49c39434 100644 --- a/mall-pay/src/main/java/com/suisung/mall/pay/service/LakalaService.java +++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/LakalaService.java @@ -11,12 +11,15 @@ package com.suisung.mall.pay.service; import cn.hutool.json.JSONObject; import com.suisung.mall.common.pojo.res.PayAccRespFieldsRes; import com.wechat.pay.java.service.payments.nativepay.NativePayService; +import org.springframework.data.util.Pair; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public interface LakalaService { + Boolean initLKLSDK(); + JSONObject transPreOrder(HttpServletRequest request, HttpServletResponse response, String orderId); /** @@ -35,4 +38,12 @@ public interface LakalaService { * @return */ JSONObject transPreOrder(String merchantNo, String termNo, String xcxAppId, String openId, String orderId, String subject, String totalAmount, String notifyURL, String requestIP, String remark); + + /** + * 拉卡拉查询商户号和终端号 + * + * @param storeId 店铺 id + * @return + */ + Pair getLklMerchantNoAndTermNo(String storeId); } diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaServiceImpl.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaServiceImpl.java index 21e3c907..dadc41fa 100644 --- a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaServiceImpl.java +++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaServiceImpl.java @@ -23,6 +23,8 @@ import com.suisung.mall.common.utils.I18nUtil; import com.suisung.mall.pay.service.LakalaService; import com.suisung.mall.pay.utils.LakalaUtil; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.util.Pair; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; @@ -32,18 +34,49 @@ import javax.servlet.http.HttpServletResponse; @Slf4j @Service public class LakalaServiceImpl implements LakalaService { + private static volatile boolean init = false; + @Value("${lakala.server_url}") + private String serverUrl; //服务地址 + @Value("${lakala.app_id}") + private String appId; // 拉卡拉appId + @Value("${lakala.serial_no}") + private String serialNo; // 你的证书序列号 + @Value("${lakala.api_pri_key_path}") + private String priKeyPath; //商户私钥信息地址 + @Value("${lakala.lkl_platform_cer_path}") + private String lklCerPath; //拉卡拉支付平台证书地址 + @Value("${lakala.lkl_platform_cer_path}") + private String lklNotifyCerPath; //拉卡拉支付平台证书地址2(用于拉卡拉通知验签) + + // 可选的两个参数 + @Value("${lakala.merchant_no}") + public String merchantNo; // 拉卡拉分配的商户号 + @Value("${lakala.term_no}") + public String termNo; // 拉卡拉分配的终端号码 + + /** + * 初始化 拉卡拉SDK + * @return + */ + @Override + public Boolean initLKLSDK() { + if (!init) { + return LakalaUtil.initLKLSDK(appId, serialNo, priKeyPath, lklCerPath, lklNotifyCerPath, serverUrl); + } + return true; + } @Override public cn.hutool.json.JSONObject transPreOrder(HttpServletRequest request, HttpServletResponse response, String orderId) { // 1. 配置初始化 - LakalaUtil.doInit(); + initLKLSDK(); //2. 装配数据 /*** 微信主扫场景示例 */ V3LabsTransPreorderRequest v3LabsTransPreorderWechatReq = new V3LabsTransPreorderRequest(); - v3LabsTransPreorderWechatReq.setMerchantNo(LakalaUtil.merchantNo); - v3LabsTransPreorderWechatReq.setTermNo(LakalaUtil.termNo); + v3LabsTransPreorderWechatReq.setMerchantNo(merchantNo); + v3LabsTransPreorderWechatReq.setTermNo(termNo); v3LabsTransPreorderWechatReq.setOutTradeNo(orderId); v3LabsTransPreorderWechatReq.setSubject("油麦菜5斤装特惠"); v3LabsTransPreorderWechatReq.setAccountType("WECHAT"); @@ -94,13 +127,13 @@ public class LakalaServiceImpl implements LakalaService { @Override public JSONObject transPreOrder(String merchantNo, String termNo, String xcxAppId, String openId, String orderId, String subject, String totalAmount, String notifyURL, String requestIP, String remark) { // 1. 配置初始化 - LakalaUtil.doInit(); + LakalaUtil.initLKLSDK(appId, serialNo, priKeyPath, lklCerPath, lklNotifyCerPath, serverUrl); if (StrUtil.isBlank(merchantNo)) { - merchantNo = LakalaUtil.merchantNo; + merchantNo = this.merchantNo; } if (StrUtil.isBlank(termNo)) { - termNo = LakalaUtil.termNo; + termNo = this.termNo; } //2. 装配数据 @@ -149,5 +182,16 @@ public class LakalaServiceImpl implements LakalaService { } } + /** + * 拉卡拉查询商户号和终端号 + * + * @param storeId 店铺 id + * @return + */ + @Override + public Pair getLklMerchantNoAndTermNo(String storeId) { + return Pair.of("",""); + } + } diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayUserPayServiceImpl.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayUserPayServiceImpl.java index 3a27f074..3c085b0c 100644 --- a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayUserPayServiceImpl.java +++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayUserPayServiceImpl.java @@ -48,6 +48,7 @@ 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.common.modules.store.ShopStoreBase; import com.suisung.mall.common.utils.CheckUtil; import com.suisung.mall.common.utils.I18nUtil; import com.suisung.mall.common.utils.LogUtil; @@ -590,21 +591,30 @@ public class PayUserPayServiceImpl extends BaseServiceImpl params; try { - LakalaUtil.doInit(); + lakalaService.initLKLSDK(); // spring-boot 2.x 直接调用读取请求体并验签方法,返回请求体 String body = LKLSDK.notificationHandle(request); diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/utils/LakalaUtil.java b/mall-pay/src/main/java/com/suisung/mall/pay/utils/LakalaUtil.java index f23655bc..34378e44 100644 --- a/mall-pay/src/main/java/com/suisung/mall/pay/utils/LakalaUtil.java +++ b/mall-pay/src/main/java/com/suisung/mall/pay/utils/LakalaUtil.java @@ -17,6 +17,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.binary.Base64; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.ClassPathResource; +import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; import java.io.BufferedReader; @@ -35,57 +36,12 @@ import java.util.Map; @Slf4j public class LakalaUtil { - private static volatile boolean init = false; - - private static volatile NativePayService wxV3Service; - /** - * 服务地址 - */ - @Value("${lakala.server_url}") - private static String serverUrl; - @Value("${lakala.app_id}") - private static String appId; // 拉卡拉appId - @Value("${lakala.merchant_no}") - public static String merchantNo; - @Value("${lakala.serial_no}") - private static String serialNo; // 你的证书序列号 - @Value("${lakala.term_no}") - public static String termNo; - /** - * 商户私钥信息地址 - */ - @Value("${lakala.api_pri_key_path}") - private static String priKeyPath; - /** - * 拉卡拉支付平台证书地址 - */ - @Value("${lakala.lkl_platform_cer_path}") - private static String lklCerPath; - /** - * 拉卡拉支付平台证书地址2(用于拉卡拉通知验签) - */ - @Value("${lakala.lkl_platform_cer_path}") - private static String lklNotifyCerPath; - - - /*** - * @Description: 初始化设置商户公共参数(全局只需设置一次) - * @throws Exception - */ - public static void doInit() { - if (!init) { - init = initLKLSDK(); - } - } - - - /** - * 初始化 拉卡拉 SDK + * 初始化 拉卡拉 SDK(全局只需设置一次) * * @return */ - public static boolean initLKLSDK() { + public static boolean initLKLSDK(String appId, String serialNo, String priKeyPath, String lklCerPath, String lklNotifyCerPath, String serverUrl) { Config2 config = new Config2(); config.setAppId(appId); config.setSerialNo(serialNo); diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/controller/admin/ShopStoreBaseController.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/controller/admin/ShopStoreBaseController.java index 60c43423..2411598c 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/store/controller/admin/ShopStoreBaseController.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/controller/admin/ShopStoreBaseController.java @@ -232,5 +232,16 @@ public class ShopStoreBaseController extends BaseControllerImpl { public CommonResult storeBusinessTypeList() { return transportBaseService.storeBusinessTypeList(); } + + /** + * 获取店铺的拉卡拉商户号和终端号(仅仅两个字段) + * @param store_id + * @return + */ + @ApiOperation(value = "获取店铺的拉卡拉商户号和终端号(仅仅两个字段)", notes = "获取店铺的拉卡拉商户号和终端号(仅仅两个字段)") + @PostMapping(value = "/lkl-merchant-term/get") + public ShopStoreBase getLklMerchantNoAndTermNo(@RequestParam(name = "store_id") Integer store_id){ + return shopStoreBaseService.getLklMerchantNoAndTermNo(store_id); + } } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopStoreBaseService.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopStoreBaseService.java index f342d40f..d6323456 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopStoreBaseService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopStoreBaseService.java @@ -127,4 +127,11 @@ public interface ShopStoreBaseService extends IBaseService { * @return */ IPage getNearShop2(String provinceId,String cityId, String countyId, String userLng,String userLat, Integer categoryId,Integer subsiteId, String storeName, Integer pageNum, Integer pageSize); + + /** + * 获取店铺的拉卡拉商户号和终端号(仅仅两个字段) + * @param storeId + * @return + */ + ShopStoreBase getLklMerchantNoAndTermNo(Integer storeId); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java index c128b5f0..1eaa609f 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java @@ -2908,6 +2908,29 @@ public class ShopStoreBaseServiceImpl extends BaseServiceImpl(pageNum, pageSize), params); } + /** + * 获取店铺的拉卡拉商户号和终端号(仅仅两个字段) + * + * @param storeId + * @return + */ + @Override + public ShopStoreBase getLklMerchantNoAndTermNo(Integer storeId) { + if (ObjectUtil.isEmpty(storeId)) { + return null; + } + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("store_id", storeId); + queryWrapper.select("lkl_merchant_no", "lkl_term_no"); + ShopStoreBase shopStoreBase = getOne(queryWrapper); + if (ObjectUtil.isEmpty(shopStoreBase)) { + return null; + } + + return shopStoreBase; + } + /** * 处理 store_slide 字段 * diff --git a/mall-shop/src/main/resources/mapper/store/ShopStoreBaseMapper.xml b/mall-shop/src/main/resources/mapper/store/ShopStoreBaseMapper.xml index b2779a27..bbeeda6a 100644 --- a/mall-shop/src/main/resources/mapper/store/ShopStoreBaseMapper.xml +++ b/mall-shop/src/main/resources/mapper/store/ShopStoreBaseMapper.xml @@ -8,7 +8,7 @@ , user_id, store_name, store_grade_id, store_logo, store_slogan, store_domain, store_area, store_district_id, store_address, store_latitude, store_longitude, store_is_selfsupport, store_type, store_is_open, shop_parent_id, store_category_id, store_state_id, store_time, store_end_time, product_category_ids, store_o2o_tags, - store_o2o_flag, store_o2o_merchant_id, store_circle, subsite_id + store_o2o_flag, store_o2o_merchant_id, store_circle, subsite_id, lkl_merchant_no, lkl_term_no