更换 公密钥
This commit is contained in:
parent
7c3e025d76
commit
d2746dc5b6
@ -11,6 +11,7 @@ package com.suisung.mall.common.utils;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.suisung.mall.common.exception.ApiException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.http.*;
|
||||
@ -250,6 +251,44 @@ public class RestTemplateHttpUtil {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送拉卡拉的POST请求并处理异常,原样返回
|
||||
*
|
||||
* @param url 请求URL
|
||||
* @param headers 请求头
|
||||
* @param requestBody 请求体
|
||||
* @param responseType 响应类型
|
||||
* @param <T> 泛型类型
|
||||
* @return ResponseEntity<T>
|
||||
*/
|
||||
public static <T> JSONObject sendLklPostSrc(String url, JSONObject headers, JSONObject requestBody, Class<T> responseType) {
|
||||
// 使用 APPLICATION_JSON 作为默认 content-type
|
||||
HttpHeaders httpHeaders = new HttpHeaders();
|
||||
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
|
||||
|
||||
// 安全添加 headers
|
||||
if (headers != null) {
|
||||
headers.forEach((key, value) -> {
|
||||
if (value != null) {
|
||||
httpHeaders.add(key, value.toString());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
HttpEntity<Object> entity = new HttpEntity<>(requestBody, httpHeaders);
|
||||
|
||||
try {
|
||||
ResponseEntity<T> response = restTemplate.postForEntity(url, entity, responseType);
|
||||
Object body = response.getBody();
|
||||
return (body instanceof JSONObject) ? (JSONObject) body : JSONUtil.parseObj(body);
|
||||
} catch (Exception e) {
|
||||
log.error("Unexpected error occurred while calling LKL API: {}", e.getMessage(), e);
|
||||
new ApiException("Unexpected error occurred while calling LKL API");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 在JSONObject中查找第一个非空值
|
||||
*
|
||||
|
||||
@ -14,6 +14,7 @@ import com.suisung.mall.common.api.CommonResult;
|
||||
import com.suisung.mall.common.service.impl.BaseControllerImpl;
|
||||
import com.suisung.mall.shop.lakala.service.LakalaApiService;
|
||||
import com.suisung.mall.shop.lakala.service.LklLedgerEcService;
|
||||
import com.suisung.mall.shop.lakala.service.impl.LklTkServiceImpl;
|
||||
import com.suisung.mall.shop.library.service.LibraryProductService;
|
||||
import com.suisung.mall.shop.message.service.MqMessageService;
|
||||
import com.suisung.mall.shop.message.service.PushMessageService;
|
||||
@ -80,9 +81,13 @@ public class LakalaController extends BaseControllerImpl {
|
||||
@Resource
|
||||
private ShopStorePrinterService shopStorePrinterService;
|
||||
|
||||
@Lazy
|
||||
@Resource
|
||||
private LklLedgerEcService lklLedgerEcService;
|
||||
|
||||
@Resource
|
||||
private LklTkServiceImpl lklTkService;
|
||||
|
||||
|
||||
@ApiOperation(value = "测试案例", notes = "测试案例")
|
||||
@RequestMapping(value = "/testcase", method = RequestMethod.POST)
|
||||
@ -94,7 +99,8 @@ public class LakalaController extends BaseControllerImpl {
|
||||
|
||||
// return lakalaApiService.tradeQuery(paramsJSON.getInt("storeId"), paramsJSON.getStr("orderId"));
|
||||
|
||||
return shopStorePrinterService.printShopStoreReturnOrder(paramsJSON.getStr("returnId"));
|
||||
return lklTkService.getLklShopId("8226330541100J8", "");
|
||||
|
||||
}
|
||||
|
||||
@ApiOperation(value = "批量发送推送消息 - 测试案例", notes = "批量发送推送消息 - 测试案例")
|
||||
|
||||
@ -943,7 +943,7 @@ public class LklTkServiceImpl {
|
||||
|
||||
// 发送请求
|
||||
String urlPath = "/htkmerchants/open/merchant/addTerm";
|
||||
JSONObject response = RestTemplateHttpUtil.sendLklPost(
|
||||
JSONObject response = RestTemplateHttpUtil.sendLklPostSrc(
|
||||
buildLklTkUrl(urlPath), header, requestBody, JSONObject.class);
|
||||
|
||||
// 检查响应结果
|
||||
@ -1001,9 +1001,12 @@ public class LklTkServiceImpl {
|
||||
logger.error("获取拉卡拉私钥失败,apiPriKeyPath={}", apiPriKeyPath);
|
||||
return null;
|
||||
}
|
||||
// logger.info("api 私钥:{}", privateKey);
|
||||
|
||||
logger.info("请求明文参数:{}", requestParams);
|
||||
|
||||
String encryptedParams = LakalaUtil.encryptByPrivateKey(requestParams.toString(), privateKey);
|
||||
logger.debug("请求参数加密完成");
|
||||
// logger.debug("请求参数加密完成");
|
||||
|
||||
// 获取认证信息
|
||||
String authorization = getLklTkAuthorization();
|
||||
@ -1013,13 +1016,19 @@ public class LklTkServiceImpl {
|
||||
}
|
||||
|
||||
// 构造请求头和请求体
|
||||
String urlPath = buildLklTkUrl("/htkmerchants/open/merchant/info");
|
||||
JSONObject header = new JSONObject().set("Authorization", authorization);
|
||||
JSONObject requestBody = new JSONObject().set("data", encryptedParams);
|
||||
logger.info("请求地址:{}", urlPath);
|
||||
logger.info("请求头:{}", header);
|
||||
|
||||
logger.info("请求加密参数:{}", requestBody);
|
||||
|
||||
|
||||
// 发送请求
|
||||
String urlPath = "/htkmerchants/open/merchant/info";
|
||||
JSONObject response = RestTemplateHttpUtil.sendLklPost(
|
||||
buildLklTkUrl(urlPath), header, requestBody, JSONObject.class);
|
||||
|
||||
JSONObject response = RestTemplateHttpUtil.sendLklPostSrc(
|
||||
urlPath, header, requestBody, JSONObject.class);
|
||||
|
||||
// 检查响应结果
|
||||
if (response == null || !"000000".equals(response.getStr("code")) || response.get("data") == null) {
|
||||
@ -1035,7 +1044,7 @@ public class LklTkServiceImpl {
|
||||
}
|
||||
|
||||
String responseData = LakalaUtil.decryptByPublicKey(response.getStr("data"), publicKey);
|
||||
logger.debug("响应数据解密完成");
|
||||
logger.info("响应数据解密完成: {}", responseData);
|
||||
|
||||
return JSONUtil.parseObj(responseData);
|
||||
|
||||
@ -1053,7 +1062,7 @@ public class LklTkServiceImpl {
|
||||
* @param customerNo 内部商户号(备选)
|
||||
* @return 拉卡拉商户的shopId,获取失败返回null
|
||||
*/
|
||||
private Long getLklShopId(String externalCustomerNo, String customerNo) {
|
||||
public Long getLklShopId(String externalCustomerNo, String customerNo) {
|
||||
logger.debug("开始获取拉卡拉商户shopId,externalCustomerNo={}, customerNo={}", externalCustomerNo, customerNo);
|
||||
|
||||
try {
|
||||
@ -1064,10 +1073,12 @@ public class LklTkServiceImpl {
|
||||
}
|
||||
|
||||
// 检查响应中的code字段是否表示成功
|
||||
if (!"000000".equals(response.getStr("code"))) {
|
||||
logger.warn("拉卡拉商户信息获取失败,code={},response={}", response.getStr("code"), response);
|
||||
return null;
|
||||
}
|
||||
// if (!"000000".equals(response.getStr("code"))) {
|
||||
// logger.warn("拉卡拉商户信息获取失败,code={},response={}", response.getStr("code"), response);
|
||||
// return null;
|
||||
// }
|
||||
|
||||
logger.info("拉卡拉商户信息:{}", response);
|
||||
|
||||
// 检查shopInfoList是否存在且不为空
|
||||
JSONArray shopInfoList = response.getJSONArray("shopInfoList");
|
||||
|
||||
@ -1 +1 @@
|
||||
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKnlpXdmJcbZHxh3w3Ghy/5wXtUBQcFzRMXgw2d7uYjzAzbIQ/ZCAj6srWoN/obtkU+G62kgcpByGmiVtK4LS+BoelKM705SzV+mcr8mNmr2jwNq1SwDSfgVxx5z00FtXl3LnKvCujvGYOmx6+nX8h6IiyyLX6IP6cFaqpUXHsZVAgMBAAECgYA4NpeM7etJ48T6H4Y3LsWEJkH6UDQlgbIblsaQkstMmLtTgOebrzN28UNfd8njcu9FVOrHGclOKbK7L+1cOLiduWsZKc/c/gAy9wAR4EhoLvlerH9EEPiPWFxdEDbMxPqlkpqLOo+PxHrhTn4vU4CaPdJtL2ujKn7nmsUdUDWo8QJBANS1TlM6nhPt2XlzN5kGfsJ4kBYNjuLXNA2YdNuC2ttYvEXHJ9T70FN/GnRBBIZu47uHH3Ie5nfep+qMk6a8RP8CQQDMecIyI0z1kVt+tOfWKw2ZFLsi74708qTaeR4W1ABtkngj1+bxoWWXr3KqhjqJkWxnhioSfXqu7CScNzjdM1CrAkAQd+ESjI1EmbumrYb2cAxMXi05p98SLPs4uj8B58WuCda5yEuLL9vXOxX/PjFtfxRepn2GxmGtki2J+UxNMnJdAkAFoORjlO0tZU7rcfdfwdeh+xwbnhSFUZiQGv1lC3jnizybX/oPdK3jOwUhBIjf+IzPXLYTxDh4UC/BzRNXo235AkEAhgYBk6H7RU2iIuvwz1c6CtE1gJ8DvEp1F0KOMWMFB0KCpDXUToix0dlMz962FozYENi4X4zYQo6nFwlXeS3Pfw==
|
||||
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAI4dPEw5wEGxH9aN+5WwFazEDvhomT/FWX0yHQRMdL0CTi8dy0hIN1sdNEbBmcOKc6dw2XHQCVQS3hfFFvpmnUqLJi32RbMhzxYz8Li9zN45eNKhiUfm/LupucHeTm3axGfOT3dfi0uhgq9LHk7ku12Pe+JIYdDu8RMCNeLJ7/AJAgMBAAECgYBAJSgLS+HghN9XC50sMl+GLLSJIUVSyHQdE1qPjyb+DSVXFP6lcJsz0BnBei86WKrdQA2V1o3vWdjPJ9G4UkraJ3hz2elzEeYok+MpLiPRicUd9RNHTVp9YqTzFyAsuranMxwt07tQaZBGc0T6hiGEsSHShwA+FfLGmz0TacR7hQJBAMOjlnP6zEzjUiW0BoZDnLHR6B5EpVVwhN7gS1B0HZtkGOjuoMz8z/GBbKLniGUtoRTDqFE4MJe7iA7237DZvscCQQC59gcIU4ezoonbDvMPbr4GMCgjP2eVrXUD02qGLJlQ45Wla6FpFZvQH5Wno5qRjdU9+Kjwms4lTTLVPHHfh0qvAkEAj2O9CDCPwOLz+JJkHdA8btBskpK5o0+e80Ptr4ALmzLYVxFfZh79wgKcPyH4BEBXScLGARFv/CYE6QLknNhbTQJAZ+F5+DrBOaX4oHhvaxWP7WEFavtGYCSvk12MyjsrwjYAKJJBbrR1gAPE1Arek6TJlH7N0OqJcej4FopXimjHXQJBAIS5nqeJPd3J7ath+uge+itkQUJnrTDHe4Feinmenuh6YLcwVJwuGqtUqxUUW/6TCrxdlMdiFmBjBjr7lkhlnuc=
|
||||
@ -1 +1 @@
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCp5aV3ZiXG2R8Yd8Nxocv+cF7VAUHBc0TF4MNne7mI8wM2yEP2QgI+rK1qDf6G7ZFPhutpIHKQchpolbSuC0vgaHpSjO9OUs1fpnK/JjZq9o8DatUsA0n4Fccec9NBbV5dy5yrwro7xmDpsevp1/IeiIssi1+iD+nBWqqVFx7GVQIDAQAB
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCOHTxMOcBBsR/WjfuVsBWsxA74aJk/xVl9Mh0ETHS9Ak4vHctISDdbHTRGwZnDinOncNlx0AlUEt4XxRb6Zp1KiyYt9kWzIc8WM/C4vczeOXjSoYlH5vy7qbnB3k5t2sRnzk93X4tLoYKvSx5O5Ltdj3viSGHQ7vETAjXiye/wCQIDAQAB
|
||||
Loading…
Reference in New Issue
Block a user