diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/controller/mobile/IndexController.java b/mall-pay/src/main/java/com/suisung/mall/pay/controller/mobile/IndexController.java index 1d4ee228..3262469a 100644 --- a/mall-pay/src/main/java/com/suisung/mall/pay/controller/mobile/IndexController.java +++ b/mall-pay/src/main/java/com/suisung/mall/pay/controller/mobile/IndexController.java @@ -67,7 +67,8 @@ public class IndexController extends BaseControllerImpl { @RequestMapping(value = "/test/case", method = RequestMethod.POST) public JSONObject testCase(HttpServletRequest request, HttpServletResponse response, @RequestBody JSONObject objectJSON) { - return lakalaPayService.lklTransPreOrder(request, response, (String) objectJSON.get("orderId")); +// return lakalaPayService.lklTransPreOrder(request, response, (String) objectJSON.get("orderId")); + return null; } @ApiOperation(value = "获取支付密码", notes = "获取支付密码") diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/LakalaPayService.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/LakalaPayService.java index ec6a07f7..498ec846 100644 --- a/mall-pay/src/main/java/com/suisung/mall/pay/service/LakalaPayService.java +++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/LakalaPayService.java @@ -13,14 +13,11 @@ import com.suisung.mall.common.api.CommonResult; import org.springframework.data.util.Pair; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; public interface LakalaPayService { Boolean initLKLSDK(); - JSONObject lklTransPreOrder(HttpServletRequest request, HttpServletResponse response, String orderId); - /** * 拉卡拉预下单 * 参考:https://o.lakala.com/#/home/document/detail?id=110 @@ -39,30 +36,6 @@ public interface LakalaPayService { */ JSONObject lklTransPreOrder(String merchantNo, String termNo, String xcxAppId, String openId, String storeId, String orderId, String subject, String totalAmount, String notifyURL, String requestIP, String remark); - /** - * 聚合扫码-交易查询 - * - * @param storeId - * @param orderId - * @return - */ - JSONObject tradeQuery(Integer storeId, String orderId); - - /** - * 聚合扫码-退款交易 - * 主被扫交易发生后,因商家或消费者原因需要退款时,商家调用此接口退还消费者支付款项。 - * 注意: 1、调用退款接口时请保证商户/账户余额大于等于本次退款金额 - * - * @param storeId - * @param out_trade_no - * @param origin_trade_no // 原拉卡拉交易流水号 - * @param refund_amount 单位分,整数数字型字符 - * @param refund_reason - * @param requestIP - * @return - */ - JSONObject refund(Integer storeId, String out_trade_no, String origin_trade_no, String refund_amount, String refund_reason, String requestIP); - /** * 执行内部拉卡拉交易退款 * 参考地址:https://o.lakala.com/#/home/document/detail?id=113 @@ -76,18 +49,6 @@ public interface LakalaPayService { */ Pair innerLklRefund(Integer storeId, String outTradeNo, String originTradeNo, String refundAmount, String refundReason); - /** - * 账户余额查询 - * 参考:https://o.lakala.com/#/home/document/detail?id=364 - * - * @param orgNo bmcp机构号 - * @param merchantNo 商户号 或 receiveNo 或 商户用户编号 - * @param payNo 账号(若该参数上送,则payType将无效) - * @param payType 账号类型(01:收款账户,02:付款账户,03:分账商户账户,04:分账接收方账户,05:充值代付账户,06:结算代付账户)- 未上送则默认为01 - * @return - */ - JSONObject ewalletBalanceQuery(String orgNo, String merchantNo, String payNo, String payType); - /** * 文件上传 * 参考:https://o.lakala.com/#/home/document/detail?id=90 diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaPayServiceImpl.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaPayServiceImpl.java index 770f4bc7..cab6498d 100644 --- a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaPayServiceImpl.java +++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaPayServiceImpl.java @@ -43,7 +43,6 @@ import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @@ -53,13 +52,7 @@ import java.util.List; @Service public class LakalaPayServiceImpl implements LakalaPayService { private static final boolean init = false; - - - //### 可选的两个参数,不同的店铺商家,可以数据库里配置不同的商户号和终端号 - @Value("${lakala.merchant_no}") - public String merchantNo; // 拉卡拉分配的商户号 - @Value("${lakala.term_no}") - public String termNo; // 拉卡拉分配的终端号码 + @Value("${lakala.server_url}") private String serverUrl; //服务地址 @Value("${lakala.app_id}") @@ -112,47 +105,6 @@ public class LakalaPayServiceImpl implements LakalaPayService { return "prod".equalsIgnoreCase(profile); } - @Override - public cn.hutool.json.JSONObject lklTransPreOrder(HttpServletRequest request, HttpServletResponse response, String orderId) { - // 1. 配置初始化 - initLKLSDK(); - - //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(IpKit.getRealIp(request)); - v3LabsTransPreorderWechatReq.setLocationInfo(v3LabsTradePreorderLocationInfo1); - - //微信主扫场景下acc_busi_fields域内容 - V3LabsTradePreorderWechatBus wechatBus = new V3LabsTradePreorderWechatBus(); - wechatBus.setSubAppid("wx5a73f844dac0da5c"); // 小程序appId - wechatBus.setUserId("oDVKR7T0qxg6O8tqIL9SgY6LXqqQ"); // 微信 openId - wechatBus.setDeviceInfo("WEB"); // 终端设备号(门店号或收银设备ID),注意:PC网页或JSAPI支付请传”WEB” - v3LabsTransPreorderWechatReq.setAccBusiFields(wechatBus); - - try { - //3. 发送请求 - String responseStr = LKLSDK.httpPost(v3LabsTransPreorderWechatReq); - - //4. 响应 - return JSONUtil.parseObj(responseStr); - } catch (SDKException e) { - LakalaPayServiceImpl.log.error("transPreOrder error", e); - throw new ApiException(I18nUtil._("获取公众号绑定信息失败!"), e); - } - - } /** * 拉卡拉预下单 @@ -176,11 +128,8 @@ public class LakalaPayServiceImpl implements LakalaPayService { // 1. 配置初始化 initLKLSDK(); - if (StrUtil.isBlank(merchantNo)) { - merchantNo = this.merchantNo; - } - if (StrUtil.isBlank(termNo)) { - termNo = this.termNo; + if (StrUtil.isBlank(merchantNo) || StrUtil.isBlank(termNo)) { + throw new ApiException(I18nUtil._("缺少商户号或终端号!")); } //2. 装配数据 @@ -238,104 +187,6 @@ public class LakalaPayServiceImpl implements LakalaPayService { } } - /** - * 聚合扫码-交易查询 - * - * @param storeId - * @param orderId - * @return - */ - @Override - public JSONObject tradeQuery(Integer storeId, String orderId) { - if (ObjectUtil.isEmpty(storeId) || StrUtil.isBlank(orderId)) { - return null; - } - - // 1. 配置初始化 - initLKLSDK(); - - // 这里获取店铺的拉卡拉的商户号和终端号码 - ShopStoreBase shopStoreBase = shopService.getLklMerchantNoAndTermNo(storeId); - if (shopStoreBase == null || StrUtil.isBlank(shopStoreBase.getLkl_merchant_no()) || StrUtil.isBlank(shopStoreBase.getLkl_term_no())) { - log.error("缺少参数,拉卡拉交易查询失败!"); - return null; - } - - //2. 装配数据 - V3LabsQueryTradequeryRequest v3LabsQueryTradequeryRequest = new V3LabsQueryTradequeryRequest(); - v3LabsQueryTradequeryRequest.setMerchantNo(shopStoreBase.getLkl_merchant_no()); - v3LabsQueryTradequeryRequest.setTermNo(shopStoreBase.getLkl_term_no()); - v3LabsQueryTradequeryRequest.setOutTradeNo(orderId); - - try { - //3. 发送请求 - String responseStr = LKLSDK.httpPost(v3LabsQueryTradequeryRequest); - - JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr); - // || !lakalaRespJSON.getStr("code").equals("BBS00000") - - return lakalaRespJSON; - } catch (SDKException e) { - log.error("交易查询失败:", e); - throw new ApiException(I18nUtil._("交易查询失败!"), e); - } - } - - /** - * 聚合扫码-退款交易 - * 主被扫交易发生后,因商家或消费者原因需要退款时,商家调用此接口退还消费者支付款项。 - * 注意: 1、调用退款接口时请保证商户/账户余额大于等于本次退款金额 - * - * @param storeId - * @param out_trade_no - * @param origin_trade_no // 原拉卡拉交易流水号 - * @param refund_amount 单位分,整数数字型字符 - * @param refund_reason - * @param requestIP - * @return - */ - @Override - public JSONObject refund(Integer storeId, String out_trade_no, String origin_trade_no, String refund_amount, String refund_reason, String requestIP) { - if (ObjectUtil.isEmpty(storeId) || StrUtil.isBlank(out_trade_no) || StrUtil.isBlank(refund_amount) || StrUtil.isBlank(origin_trade_no) || StrUtil.isBlank(requestIP)) { - return null; - } - - // 1. 配置初始化 - initLKLSDK(); - - - // 这里获取店铺的拉卡拉的商户号和终端号码 - ShopStoreBase shopStoreBase = shopService.getLklMerchantNoAndTermNo(storeId); - if (shopStoreBase == null || StrUtil.isBlank(shopStoreBase.getLkl_merchant_no()) || StrUtil.isBlank(shopStoreBase.getLkl_term_no())) { - log.error("缺少参数,退款交易失败!"); - return null; - } - - //2. 装配数据 - V3LabsRelationIdmrefundRequest req = new V3LabsRelationIdmrefundRequest(); - req.setOutRefundOrderNo(out_trade_no); - req.setMerchantNo(shopStoreBase.getLkl_merchant_no()); - req.setTermNo(shopStoreBase.getLkl_term_no()); - req.setRefundAmount(refund_amount); - req.setRefundReason(refund_reason); - req.setOriginTradeNo(origin_trade_no); - - V3LabsTradeLocationInfo v3LabsTradeLocationInfo = new V3LabsTradeLocationInfo(requestIP, null, ""); - req.setLocationInfo(v3LabsTradeLocationInfo); - - try { - //3. 发送请求 - String responseStr = LKLSDK.httpPost(req); - - JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr); - - return lakalaRespJSON; - } catch (SDKException e) { - log.error("退款交易失败:", e); - throw new ApiException(I18nUtil._("退款交易!"), e); - } - } - /** * 执行内部拉卡拉交易退款 @@ -421,46 +272,6 @@ public class LakalaPayServiceImpl implements LakalaPayService { } } - /** - * 账户余额查询 - * 参考:https://o.lakala.com/#/home/document/detail?id=364 - * - * @param orgNo bmcp机构号 测试 “1” - * @param merchantNo 商户号 或 receiveNo 或 商户用户编号 - * @param payNo 账号(若该参数上送,则payType将无效) - * @param payType 账号类型(01:收款账户,02:付款账户,03:分账商户账户,04:分账接收方账户,05:充值代付账户,06:结算代付账户)- 未上送则默认为01 - * @return - */ - @Override - public JSONObject ewalletBalanceQuery(String orgNo, String merchantNo, String payNo, String payType) { - if (StrUtil.isBlank(orgNo) || StrUtil.isBlank(merchantNo) || (StrUtil.isBlank(payNo) && StrUtil.isBlank(payType))) { - return null; - } - - // 1. 配置初始化 - initLKLSDK(); - - - //2. 装配数据 - V2LaepIndustryEwalletBalanceQueryRequest req = new V2LaepIndustryEwalletBalanceQueryRequest(); - req.setOrgNo(orgNo); - req.setMerchantNo(merchantNo); - req.setPayNo(payNo); - req.setPayType(payType); - - try { - //3. 发送请求 - String responseStr = LKLSDK.httpPost(req); - - JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr); - - return lakalaRespJSON; - } catch (SDKException e) { - log.error("账户余额查询失败:", e); - throw new ApiException(I18nUtil._("账户余额查询!"), e); - } - - } /** * 文件上传 diff --git a/mall-pay/src/main/resources/bootstrap-dev.yml b/mall-pay/src/main/resources/bootstrap-dev.yml index 474b765c..cf2060fe 100644 --- a/mall-pay/src/main/resources/bootstrap-dev.yml +++ b/mall-pay/src/main/resources/bootstrap-dev.yml @@ -127,7 +127,7 @@ lakala: lkl_platform_cer_path: payKey/lakala/dev/lkl_notify_cert_v2.cer # 机构代码 org_code: 1 - #商户号 - merchant_no: 82229007392000A - #终端号 - term_no: D9296400 \ No newline at end of file +# #商户号 +# merchant_no: 82229007392000A +# #终端号 +# term_no: D9296400 \ No newline at end of file diff --git a/mall-pay/src/main/resources/bootstrap-local.yml b/mall-pay/src/main/resources/bootstrap-local.yml index 0d216bd5..5305bd2d 100644 --- a/mall-pay/src/main/resources/bootstrap-local.yml +++ b/mall-pay/src/main/resources/bootstrap-local.yml @@ -129,7 +129,7 @@ lakala: lkl_platform_cer_path: payKey/lakala/dev/lkl_notify_cert_v2.cer # 机构代码 org_code: 1 - #商户号 - merchant_no: 82229007392000A - #终端号 - term_no: D9296400 \ No newline at end of file +# #商户号 +# merchant_no: 82229007392000A +# #终端号 +# term_no: D9296400 \ No newline at end of file diff --git a/mall-pay/src/main/resources/bootstrap-prod.yml b/mall-pay/src/main/resources/bootstrap-prod.yml index c43fe6d3..84ea4af0 100644 --- a/mall-pay/src/main/resources/bootstrap-prod.yml +++ b/mall-pay/src/main/resources/bootstrap-prod.yml @@ -116,6 +116,20 @@ project: domain: @project.domain@ #拉卡拉支付和分账 lakala: + # #服务地址 + # server_url: https://test.wsmsd.cn/sit + # #应用Id + # app_id: OP00000003 + # #商户证书序列号 + # serial_no: 00dfba8194c41b84cf + # #商户证书 + # api_cert_path: payKey/lakala/dev/OP00000003_cert.cer + # #商户私钥 + # api_pri_key_path: payKey/lakala/dev/OP00000003_private_key.pem + # #拉卡拉平台证书 + # lkl_platform_cer_path: payKey/lakala/dev/lkl_notify_cert_v2.cer + # # 机构代码 + # org_code: 1 #服务地址 server_url: https://s2.lakala.com #应用Id @@ -130,7 +144,7 @@ lakala: lkl_platform_cer_path: payKey/lakala/prod/lkl_platform.cer #机构代码 org_code: 980688 - #商户号 - merchant_no: 8226330599900LN - #终端号码,M0780629(B2B收银台) M0780798(专业化扫码) - term_no: M0780798 +# #商户号 +# merchant_no: 8226330599900LN +# #终端号码,M0780629(B2B收银台) M0780798(专业化扫码) +# term_no: M0780798 diff --git a/mall-pay/src/main/resources/bootstrap-test.yml b/mall-pay/src/main/resources/bootstrap-test.yml index 474b765c..cf2060fe 100644 --- a/mall-pay/src/main/resources/bootstrap-test.yml +++ b/mall-pay/src/main/resources/bootstrap-test.yml @@ -127,7 +127,7 @@ lakala: lkl_platform_cer_path: payKey/lakala/dev/lkl_notify_cert_v2.cer # 机构代码 org_code: 1 - #商户号 - merchant_no: 82229007392000A - #终端号 - term_no: D9296400 \ No newline at end of file +# #商户号 +# merchant_no: 82229007392000A +# #终端号 +# term_no: D9296400 \ No newline at end of file diff --git a/mall-pay/src/main/resources/bootstrap-uat.yml b/mall-pay/src/main/resources/bootstrap-uat.yml index 474b765c..cf2060fe 100644 --- a/mall-pay/src/main/resources/bootstrap-uat.yml +++ b/mall-pay/src/main/resources/bootstrap-uat.yml @@ -127,7 +127,7 @@ lakala: lkl_platform_cer_path: payKey/lakala/dev/lkl_notify_cert_v2.cer # 机构代码 org_code: 1 - #商户号 - merchant_no: 82229007392000A - #终端号 - term_no: D9296400 \ No newline at end of file +# #商户号 +# merchant_no: 82229007392000A +# #终端号 +# term_no: D9296400 \ No newline at end of file diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LakalaApiService.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LakalaApiService.java index 019a81ed..ea68560d 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LakalaApiService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LakalaApiService.java @@ -13,7 +13,6 @@ import com.suisung.mall.common.api.CommonResult; import org.springframework.data.util.Pair; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; /** * 拉卡拉业务接口 @@ -22,26 +21,6 @@ public interface LakalaApiService { Boolean initLKLSDK(); - JSONObject transPreOrder(HttpServletRequest request, HttpServletResponse response, String orderId); - - /** - * 拉卡拉预下单 - * 参考:https://o.lakala.com/#/home/document/detail?id=110 - * - * @param merchantNo 商户号 - * @param termNo 终端号 - * @param xcxAppId 小程序appid - * @param openId openid - * @param orderId 订单号 - * @param subject 订单标题 - * @param totalAmount 订单金额 - * @param notifyURL 回调地址 - * @param requestIP 请求ip - * @param remark 备注 - * @return - */ - JSONObject transPreOrder(String merchantNo, String termNo, String xcxAppId, String openId, String orderId, String subject, String totalAmount, String notifyURL, String requestIP, String remark); - /** * 聚合扫码-交易查询 * diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java index ae279f5b..cf515a3c 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java @@ -15,12 +15,10 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; -import com.ijpay.core.kit.IpKit; import com.lkl.laop.sdk.LKLSDK; import com.lkl.laop.sdk.exception.SDKException; import com.lkl.laop.sdk.request.*; import com.lkl.laop.sdk.request.model.V3LabsTradeLocationInfo; -import com.lkl.laop.sdk.request.model.V3LabsTradePreorderWechatBus; import com.lkl.laop.sdk.request.model.V3SacsSeparateRecvDatas; import com.suisung.mall.common.api.CommonResult; import com.suisung.mall.common.constant.CommonConstant; @@ -51,7 +49,6 @@ import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.File; import java.math.BigDecimal; import java.time.LocalDate; @@ -67,10 +64,10 @@ public class LakalaApiServiceImpl implements LakalaApiService { private static final String lklSuccessCode = "000000"; private static final String lklSacsSuccessCode = "SACS0000"; // 可选的两个参数,不同的店铺商家,可以数据库里配置不同的商户号和终端号 - @Value("${lakala.merchant_no}") - public String merchantNo; // 拉卡拉分配的商户号 - @Value("${lakala.term_no}") - public String termNo; // 拉卡拉分配的终端号码 +// @Value("${lakala.merchant_no}") +// public String merchantNo; // 拉卡拉分配的商户号 +// @Value("${lakala.term_no}") +// public String termNo; // 拉卡拉分配的终端号码 @Value("${lakala.server_url}") private String serverUrl; //服务地址 @@ -175,127 +172,6 @@ public class LakalaApiServiceImpl implements LakalaApiService { return "prod".equalsIgnoreCase(profile); } - @Override - public JSONObject transPreOrder(HttpServletRequest request, HttpServletResponse response, String orderId) { - // 1. 配置初始化 - initLKLSDK(); - - //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(IpKit.getRealIp(request)); - v3LabsTransPreorderWechatReq.setLocationInfo(v3LabsTradePreorderLocationInfo1); - - //微信主扫场景下acc_busi_fields域内容 - V3LabsTradePreorderWechatBus wechatBus = new V3LabsTradePreorderWechatBus(); - wechatBus.setSubAppid("wx5a73f844dac0da5c"); // 小程序appId - wechatBus.setUserId("oDVKR7T0qxg6O8tqIL9SgY6LXqqQ"); // 微信 openId - wechatBus.setDeviceInfo("WEB"); // 终端设备号(门店号或收银设备ID),注意:PC网页或JSAPI支付请传”WEB” - v3LabsTransPreorderWechatReq.setAccBusiFields(wechatBus); - - try { - //3. 发送请求 - String responseStr = LKLSDK.httpPost(v3LabsTransPreorderWechatReq); - if (StrUtil.isBlank(responseStr)) { - throw new ApiException(I18nUtil._("下单无响应!")); - } - - //4. 响应 - return JSONUtil.parseObj(responseStr); - } catch (SDKException e) { - LakalaApiServiceImpl.log.error("transPreOrder error", e); - throw new ApiException(I18nUtil._("获取公众号绑定信息失败!"), e); - } - - } - - /** - * 拉卡拉预下单 - * 参考:https://o.lakala.com/#/home/document/detail?id=110 - * - * @param merchantNo 商户号 - * @param termNo 终端号 - * @param xcxAppId 小程序appid - * @param openId openid - * @param orderId 订单号 - * @param subject 订单标题 - * @param totalAmount 订单金额 - * @param notifyURL 回调地址 - * @param requestIP 请求ip - * @param remark 备注 - * @return - */ - @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. 配置初始化 - initLKLSDK(); - - if (StrUtil.isBlank(merchantNo)) { - merchantNo = this.merchantNo; - } - if (StrUtil.isBlank(termNo)) { - termNo = this.termNo; - } - - //2. 装配数据 - /*** 微信主扫场景示例 */ - V3LabsTransPreorderRequest v3LabsTransPreorderWechatReq = new V3LabsTransPreorderRequest(); - v3LabsTransPreorderWechatReq.setMerchantNo(merchantNo); - v3LabsTransPreorderWechatReq.setTermNo(termNo); - v3LabsTransPreorderWechatReq.setOutTradeNo(orderId); - v3LabsTransPreorderWechatReq.setSubject(subject); - //微信:WECHAT 支付宝:ALIPAY 银联:UQRCODEPAY 翼支付: BESTPAY 苏宁易付宝: SUNING 拉卡拉支付账户:LKLACC 网联小钱包:NUCSPAY 京东钱包:JD - v3LabsTransPreorderWechatReq.setAccountType("WECHAT"); - // 41:NATIVE((ALIPAY,云闪付支持,京东白条分期)51:JSAPI(微信公众号支付,支付宝服务窗支付,银联JS支付,翼支付JS支付、拉卡拉钱包支付)71:微信小程序支付 61:APP支付(微信APP支付) - v3LabsTransPreorderWechatReq.setTransType("51"); - v3LabsTransPreorderWechatReq.setTotalAmount(totalAmount); - v3LabsTransPreorderWechatReq.setSettleType("1"); //“0”或者空,常规结算方式,如需接拉卡拉分账通需传“1”,商户未开通分账之前切记不用上送此参数。; - v3LabsTransPreorderWechatReq.setNotifyUrl(notifyURL); - v3LabsTransPreorderWechatReq.setRemark(remark); - - //地址位置信息 - V3LabsTradeLocationInfo v3LabsTradePreorderLocationInfo = new V3LabsTradeLocationInfo(requestIP); - v3LabsTransPreorderWechatReq.setLocationInfo(v3LabsTradePreorderLocationInfo); - - //微信主扫场景下 acc_busi_fields 域内容 - V3LabsTradePreorderWechatBus wechatBus = new V3LabsTradePreorderWechatBus(); - wechatBus.setSubAppid(xcxAppId); // 小程序appId - wechatBus.setUserId(openId); // 微信 openId - wechatBus.setDeviceInfo("WEB"); // 终端设备号(门店号或收银设备ID),注意:PC网页或JSAPI支付请传”WEB” - v3LabsTransPreorderWechatReq.setAccBusiFields(wechatBus); - - try { - log.info("拉卡拉预下单请求参数:{}", JSONUtil.toJsonStr(v3LabsTransPreorderWechatReq)); - - //3. 发送请求 - String responseStr = LKLSDK.httpPost(v3LabsTransPreorderWechatReq); - log.info("拉卡拉预下单响应数据:{}", responseStr); - if (StrUtil.isBlank(responseStr)) { - throw new ApiException(I18nUtil._("下单无响应!")); - } - - JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr); - - // || !lakalaRespJSON.getStr("code").equals("BBS00000") - - //4. 响应 - return lakalaRespJSON; - } catch (SDKException e) { - log.error("拉卡拉支付出错:", e); - throw new ApiException(I18nUtil._("支付失败!"), e); - } - } /** * 聚合扫码-交易查询 @@ -877,7 +753,7 @@ public class LakalaApiServiceImpl implements LakalaApiService { Boolean success = lklLedgerEcService.updateByApplyId(updRecord); if (success) { // 更新商家入驻表的合同编号,和签署地址,更改状态 - shopMchEntryService.updateMerchEntryLklEcNo(lklLedgerEc.getMch_id(), ecNo, paramsJSON.getStr("ecName"), lklLedgerEc.getResult_url(), ecCosFileUrl, eclklFilePath); + shopMchEntryService.updateMerchantLklElectronicContractInfo(lklLedgerEc.getMch_id(), ecNo, paramsJSON.getStr("ecName"), lklLedgerEc.getResult_url(), ecCosFileUrl, eclklFilePath); // TODO 商家电子合同签署完毕后,收到异步通知,触发拉卡拉商家进件(重要环节) // 下一步,等待拉卡拉系统审核,和人工审核,收到异步通知之后,触发1、e签宝的电子合同签署,2、新增分账接收方 diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java index 86b4f9de..070f09d3 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java @@ -8406,7 +8406,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl updateWrapper = new UpdateWrapper<>(); +// updateWrapper.eq("id", id); +// updateWrapper.set("lkl_ec_no", lklEcNo); +// +// if (StrUtil.isNotBlank(lklEcName)) { +// updateWrapper.set("lkl_ec_name", lklEcName); +// } +// +// +// if (StrUtil.isNotBlank(lklEcResultUrl)) { +// updateWrapper.set("lkl_ec_result_url", lklEcResultUrl); +// } +// +// if (StrUtil.isNotBlank(ecDownloadUrl)) { +// updateWrapper.set("contract_download_url", ecDownloadUrl); +//// updateWrapper.set("signed_status", CommonConstant.CONTRACT_SIGN_STA_FINISH); +// updateWrapper.set("has_ec_signed", CommonConstant.Enable); +// } +// +// if (StrUtil.isNotBlank(ecLklFilePath)) { +// updateWrapper.set("lkl_ec_file_path", ecLklFilePath); +// } +// +// return update(updateWrapper); +// } + /** - * 更新拉卡拉入网电子合同和签署地址 + * 更新商户入驻信息的拉卡拉电子合同相关信息 * - * @param id - * @param lklEcNo - * @param lklEcResultUrl - * @param ecDownloadUrl - * @param ecLklFilePath - * @return + * @param merchantId 商户入驻ID, 不能为空 + * @param lklElectronicContractNo 拉卡拉电子合同编号 + * @param lklElectronicContractName 拉卡拉电子合同名称 + * @param lklElectronicContractResultUrl 拉卡拉电子合同结果URL + * @param contractDownloadUrl 合同下载地址 + * @param lklElectronicContractFilePath 拉卡拉电子合同文件路径 + * @return 更新成功返回 true, 失败返回 false */ @Override - public Boolean updateMerchEntryLklEcNo(Long id, String lklEcNo, String lklEcName, String lklEcResultUrl, String ecDownloadUrl, String ecLklFilePath) { - if (ObjectUtil.isEmpty(id) && StrUtil.isBlank(lklEcNo)) { + public Boolean updateMerchantLklElectronicContractInfo(Long merchantId, String lklElectronicContractNo, String lklElectronicContractName, String lklElectronicContractResultUrl, String contractDownloadUrl, String lklElectronicContractFilePath) { + // 1. 参数校验: 确保merchantId和lklElectronicContractNo至少有一个不为空 + if (ObjectUtil.isEmpty(merchantId) && StrUtil.isBlank(lklElectronicContractNo)) { + log.warn("商户ID和拉卡拉电子合同编号都为空, 无法更新"); return false; } - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", id); - updateWrapper.set("lkl_ec_no", lklEcNo); + try { + // 2. 构建UpdateWrapper, 用于更新商户入驻信息 + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id", merchantId); // 设置更新条件: 商户ID - if (StrUtil.isNotBlank(lklEcName)) { - updateWrapper.set("lkl_ec_name", lklEcName); + // 3. 使用链式调用优化, 避免多层if嵌套 + updateWrapper.set("lkl_ec_no", lklElectronicContractNo); // 设置拉卡拉电子合同编号 + + if (StrUtil.isNotBlank(lklElectronicContractName)) { + updateWrapper.set("lkl_ec_name", lklElectronicContractName); // 设置拉卡拉电子合同名称 + } + + if (StrUtil.isNotBlank(lklElectronicContractResultUrl)) { + updateWrapper.set("lkl_ec_result_url", lklElectronicContractResultUrl); // 设置拉卡拉电子合同结果URL + } + + // 当合同下载地址不为空时, 更新合同下载地址和电子合同签署状态 + if (StrUtil.isNotBlank(contractDownloadUrl)) { + updateWrapper.set("contract_download_url", contractDownloadUrl) // 设置合同下载地址 + .set("has_ec_signed", CommonConstant.Enable); // 设置已签署电子合同 + } + + if (StrUtil.isNotBlank(lklElectronicContractFilePath)) { + updateWrapper.set("lkl_ec_file_path", lklElectronicContractFilePath); // 设置拉卡拉电子合同文件路径 + } + + // 4. 执行更新操作 + boolean isUpdated = update(updateWrapper); + + if (isUpdated) { + log.info("商户ID为 {} 的拉卡拉电子合同信息更新成功", merchantId); + } else { + log.error("商户ID为 {} 的拉卡拉电子合同信息更新失败", merchantId); + } + return isUpdated; + + } catch (Exception e) { + // 5. 异常处理: 记录异常信息, 避免程序中断 + log.error("更新商户ID为 {} 的拉卡拉电子合同信息时发生异常", merchantId, e); + throw new RuntimeException("更新商户拉卡拉电子合同信息失败", e); // 抛出运行时异常, 触发事务回滚 } - - - if (StrUtil.isNotBlank(lklEcResultUrl)) { - updateWrapper.set("lkl_ec_result_url", lklEcResultUrl); - } - - if (StrUtil.isNotBlank(ecDownloadUrl)) { - updateWrapper.set("contract_download_url", ecDownloadUrl); -// updateWrapper.set("signed_status", CommonConstant.CONTRACT_SIGN_STA_FINISH); - updateWrapper.set("has_ec_signed", CommonConstant.Enable); - } - - if (StrUtil.isNotBlank(ecLklFilePath)) { - updateWrapper.set("lkl_ec_file_path", ecLklFilePath); - } - - return update(updateWrapper); } /** 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 231f63ec..43f12cb0 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 @@ -2320,7 +2320,6 @@ public class ShopStoreBaseServiceImpl extends BaseServiceImpl - AND ( + AND p.name LIKE CONCAT('%', #{productName}, '%') - OR - + AND + p.keywords LIKE CONCAT('%', #{keyword}, '%') - ) @@ -129,11 +128,10 @@ - AND ( - + AND + p.keywords LIKE CONCAT('%', #{keyword}, '%') - )