Merge branch 'refs/heads/master' into cc_2021104_twelve_points

# Conflicts:
#	coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java
#	coolstore-partner-common/src/main/java/com/cool/store/enums/JoinModeEnum.java
This commit is contained in:
wangff
2025-12-02 19:34:14 +08:00
193 changed files with 10187 additions and 167 deletions

View File

@@ -5,7 +5,9 @@ import com.cool.store.constants.CommonConstants;
import com.cool.store.enums.ErrorCodeEnum;
import com.cool.store.exception.ServiceException;
import com.cool.store.response.ResponseResult;
import com.cool.store.response.bigdata.ApiResponse;
import com.cool.store.utils.OpenSignatureUtil;
import com.cool.store.utils.RsaSignUtil;
import com.cool.store.utils.UUIDUtils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
@@ -42,6 +44,10 @@ public class OpenApiValidateFilter implements Filter {
private String coolAppKey;
@Value("${cool.api.secret}")
private String coolAppSecret;
@Value("${cool.api.rsa.private.key}")
private String coolPrivateKey;
@Value("${wallet.api.rsa.public.key}")
private String walletPublicKey;
private static final Set<String> WHITELIST_URIS = new HashSet<>(Arrays.asList(
"/zxjp/open/v1/statusRefresh",
"/zxjp/open/v1/getStoreUser",
@@ -52,6 +58,8 @@ public class OpenApiValidateFilter implements Filter {
"/zxjp/open/v1/getYlsToken", "/zxjp/open/v1/getStoreList",
"/zxjp/open/v1/changeReceiptStatus", "/zxjp/open/v1/getStoreUser"));
// 添加钱包接口路径前缀常量
private static final String WALLET_API_PATTERN = "^/zxjp/open/v\\d+/wallet/.*$";
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@@ -70,6 +78,12 @@ public class OpenApiValidateFilter implements Filter {
filterChain.doFilter(servletRequest, response);
return;
}
// 针对钱包接口的专用验签处理 所有符合 /zxjp/open/v{版本号}/wallet/ 格式的接口都会走钱包专用的验签流程。
if (uri.matches(WALLET_API_PATTERN)) {
handleWalletApiValidation(request, response, filterChain);
return;
}
HttpServletResponse res = (HttpServletResponse) response;
// 1. 验证时间戳
try {
@@ -185,4 +199,90 @@ public class OpenApiValidateFilter implements Filter {
@Override
public void destroy() {
}
private void handleWalletApiValidation(HttpServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse res = (HttpServletResponse) response;
try {
// 读取请求体
StringBuilder requestBody = new StringBuilder();
try (BufferedReader reader = request.getReader()) {
String line;
while ((line = reader.readLine()) != null) {
requestBody.append(line);
}
}
String jsonBody = requestBody.toString();
// 1. 验证时间戳
String timestampStr = extractTimestampFromJson(jsonBody);
if (timestampStr == null) {
writeErrorResponse(res, ErrorCodeEnum.SIGN_FAIL, "缺少timestamp参数");
return;
}
long timestamp = Long.parseLong(timestampStr);
long currentTime = System.currentTimeMillis() / 1000;
long timeDiff = Math.abs(currentTime - timestamp);
if (timeDiff > 600) {
writeErrorResponse(res, ErrorCodeEnum.SIGN_FAIL, "请求已过期请保证timestamp时间在10分钟之内");
return;
}
// 2. 钱包接口专用验签逻辑
if (!verifyWalletSignatureFromBody(jsonBody)) {
writeErrorResponse(res, ErrorCodeEnum.SIGN_FAIL, "签名校验失败");
return;
}
filterChain.doFilter(request, response);
} catch (Exception e) {
log.error("钱包接口验签异常: ", e);
writeErrorResponse(res, ErrorCodeEnum.SIGN_FAIL, "验签异常");
}
}
/**
* 从JSON中提取timestamp字段
*/
private String extractTimestampFromJson(String jsonBody) {
try {
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Object> params = objectMapper.readValue(jsonBody, new TypeReference<Map<String, Object>>() {});
Object timestamp = params.get("timestamp");
return timestamp != null ? timestamp.toString() : null;
} catch (Exception e) {
log.error("提取timestamp失败: ", e);
return null;
}
}
/**
* 钱包接口签名验证方法 - 签名在请求体中
*/
private boolean verifyWalletSignatureFromBody(String jsonBody) {
try {
// 解析请求参数
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Object> params = objectMapper.readValue(jsonBody, new TypeReference<Map<String, Object>>() {});
// 使用RsaSignUtil.verifyWalletSign进行验签
return RsaSignUtil.verifySign(params, walletPublicKey);
} catch (Exception e) {
log.error("钱包接口签名验证失败: ", e);
return false;
}
}
/**
* 写入错误响应
*/
private void writeErrorResponse(HttpServletResponse response, ErrorCodeEnum errorCode, String message) throws IOException {
response.setStatus(HttpStatus.OK.value());
response.setCharacterEncoding("UTF-8");
response.getWriter().write(JSON.toJSONString(ApiResponse.fail(errorCode, message)));
}
}

View File

@@ -0,0 +1,61 @@
package com.cool.store.controller.webb;
import com.cool.store.dto.FoodTokenDTO;
import com.cool.store.dto.GetAccessTokenDTO;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.PushService;
import com.cool.store.service.ThirdFoodService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @Author suzhuhong
* @Date 2025/11/24 16:50
* @Version 1.0
*/
@RestController
@RequestMapping("/pc/token")
@Api(tags = "第三方平台token")
@Slf4j
public class AccountTokenController {
@Resource
PushService pushService;
@Resource
ThirdFoodService thirdFoodService;
@ApiOperation("获取云流水免登token")
@PostMapping("/getYlsToken")
public ResponseResult<String> getYlsToken(@RequestBody @Validated GetAccessTokenDTO dto) {
return ResponseResult.success(pushService.getYlsToken(dto));
}
@ApiOperation("获取POS免登token")
@PostMapping("/getPosToken")
public ResponseResult<String> getPosToken(@RequestBody @Validated GetAccessTokenDTO dto) {
return ResponseResult.success(pushService.getPosToken(dto));
}
@ApiOperation("获取新掌柜免登token")
@PostMapping("/getXzgToken")
public ResponseResult<String> getXzgToken(@RequestBody @Validated GetAccessTokenDTO dto) {
return ResponseResult.success(pushService.getXzgToken(dto));
}
@ApiOperation("获取菜品市场token")
@PostMapping("/getFoodToken")
public ResponseResult<String> getFoodToken(@RequestBody @Validated FoodTokenDTO dto) {
return ResponseResult.success(thirdFoodService.getFoodToken(dto));
}
}

View File

@@ -0,0 +1,59 @@
package com.cool.store.controller.webb;
import com.cool.store.dto.contract.ContractConfigDTO;
import com.cool.store.dto.contract.ContractListDTO;
import com.cool.store.dto.contract.QueryContractListDTO;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.ContractConfigService;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.xml.ws.Response;
/**
* @Author suzhuhong
* @Date 2025/9/9 10:03
* @Version 1.0
*/
@RestController
@RequestMapping("pc/contract")
@Api(tags = "PC-合同配置")
@Slf4j
public class ContractConfigController {
@Resource
private ContractConfigService contractConfigService;
@PostMapping("/addContractConfig")
@ApiOperation("添加合同配置")
public ResponseResult<Boolean> addContractConfig(@RequestBody @Validated ContractConfigDTO addContractConfigDTO) {
return ResponseResult.success(contractConfigService.addContractConfig(addContractConfigDTO));
}
@PostMapping("/updateContractConfig")
@ApiOperation("更新合同配置")
public ResponseResult<Boolean> updateContractConfig(@RequestBody @Validated ContractConfigDTO addContractConfigDTO) {
return ResponseResult.success(contractConfigService.updateContractConfig(addContractConfigDTO));
}
@PostMapping("/queryContractConfigList")
@ApiOperation("合同配置列表")
public ResponseResult<PageInfo<ContractListDTO>> queryContractConfigList(@RequestBody QueryContractListDTO queryContractListDTO) {
return ResponseResult.success(contractConfigService.queryContractConfigList(queryContractListDTO));
}
@GetMapping("/deleteContractConfig")
@ApiOperation("删除配置")
public ResponseResult<Boolean> deleteContractConfig(Long id) {
return ResponseResult.success(contractConfigService.deleteContractConfig(id));
}
}

View File

@@ -0,0 +1,76 @@
package com.cool.store.controller.webb;
import com.cool.store.common.PageBasicInfo;
import com.cool.store.dto.ShopSignerInfoDTO;
import com.cool.store.dto.decoration.DecorationListDTO;
import com.cool.store.dto.decoration.DecorationTeamDTO;
import com.cool.store.request.decoration.*;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.DecorationHandleService;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
* @Author suzhuhong
* @Date 2025/10/30 18:00
* @Version 1.0
*/
@RequestMapping("/pc/decoration")
@RestController
@Api(tags = "装修分配团队")
@Slf4j
public class DecorationAllocationController {
@Resource
private DecorationHandleService decorationHandleService;
@PostMapping("/addTeam")
@ApiOperation("添加团队")
public ResponseResult<Boolean> addTeam(@RequestBody AddTeamRequest request){
return ResponseResult.success(decorationHandleService.addTeam(request));
}
@PostMapping("/update")
@ApiOperation("修改团队")
public ResponseResult<Boolean> update(@RequestBody UpdateTeamRequest request){
return ResponseResult.success(decorationHandleService.update(request));
}
@PostMapping("/deleteByTeamId")
@ApiOperation("删除团队")
public ResponseResult<Boolean> deleteByTeamId(@RequestBody DeletedRequest request){
return ResponseResult.success(decorationHandleService.deleteByTeamId(request.getTeamId()));
}
@PostMapping("/listByCondition")
@ApiOperation("查询团队")
public ResponseResult<PageInfo<DecorationTeamDTO>> listByCondition(@RequestBody PageBasicInfo pageBasicInfo){
return ResponseResult.success(decorationHandleService.listByCondition(pageBasicInfo));
}
@PostMapping("/getDecorationAssignList")
@ApiOperation("装修分配列表/待办列表 查询待办时 分配状态传-0")
public ResponseResult<PageInfo<DecorationListDTO>> getDecorationAssignList(@RequestBody DecorationListRequest pageBasicInfo){
return ResponseResult.success(decorationHandleService.getDecorationAssignList(pageBasicInfo));
}
@GetMapping("/getShopSignerInfo")
@ApiOperation("详情中获取签约人信息")
public ResponseResult<ShopSignerInfoDTO> getShopSignerInfo(@RequestParam("shopId") Long shopId){
return ResponseResult.success(decorationHandleService.getShopSignerInfo(shopId));
}
@PostMapping("/confirm")
@ApiOperation("确认")
public ResponseResult<Boolean> updateConstructionTeam(@RequestBody UpdateConstructionTeamRequest request){
return ResponseResult.success(decorationHandleService.updateConstructionTeam(request));
}
}

View File

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
import com.cool.store.context.PartnerUserHolder;
import com.cool.store.dto.*;
import com.cool.store.dto.store.StoreUserPositionDTO;
import com.cool.store.dto.wallet.PaymentDTO;
import com.cool.store.dto.wx.MiniProgramFreeLoginDTO;
import com.cool.store.handler.WeChatHandler;
import com.cool.store.request.OpenApiStoreRequest;
@@ -11,11 +12,15 @@ import com.cool.store.request.StoreCodeDTO;
import com.cool.store.request.*;
import com.cool.store.request.notice.ThirdHandleMessageRequest;
import com.cool.store.request.notice.ThirdMatterRequest;
import com.cool.store.request.wallet.AccountTradeCallbackRequest;
import com.cool.store.request.wallet.AddTagCallbackNoticeRequest;
import com.cool.store.request.wallet.OnlineCommercialBankCallbackRequest;
import com.cool.store.request.xgj.FranchiseFeeCallBackRequest;
import com.cool.store.request.xgj.ReceiptCallBackRequest;
import com.cool.store.response.ResponseResult;
import com.cool.store.response.bigdata.ApiResponse;
import com.cool.store.service.*;
import com.cool.store.service.wallet.WalletService;
import com.cool.store.utils.poi.StringUtils;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
@@ -57,6 +62,8 @@ public class OpenApiController {
WechatMiniAppService wechatMiniAppService;
@Autowired
WeChatHandler weChatHandler;
@Resource
WalletService walletService;
@PostMapping("/statusRefresh")
public ApiResponse<Boolean> statusRefresh(@RequestBody StatusRefreshDTO statusRefreshDTO){
@@ -214,4 +221,29 @@ public class OpenApiController {
}
return echostr;
}
@ApiOperation("打标回调通知接口")
@PostMapping("/wallet/addTagCallback")
public ApiResponse<Boolean> addTagCallback(@RequestBody @Validated AddTagCallbackNoticeRequest request) {
return ApiResponse.successByWallet(walletService.addTagCallback(request));
}
@ApiOperation("大额充值通知接口")
@PostMapping("/wallet/largePaymentCallback")
public ApiResponse<Boolean> largePaymentCallback(@RequestBody @Validated PaymentDTO request) {
return ApiResponse.successByWallet(walletService.largePaymentCallback(request));
}
@ApiOperation("账户交易回调")
@PostMapping("/wallet/accountTradeCallback")
public ApiResponse<Boolean> accountTradeCallback(@RequestBody @Validated AccountTradeCallbackRequest request) {
return ApiResponse.successByWallet(walletService.accountTradeCallback(request));
}
@ApiOperation("网商银行通知接口")
@PostMapping("/wallet/onlineCommercialBankCallback")
public ApiResponse<Boolean> accountTradeCallback(@RequestBody @Validated OnlineCommercialBankCallbackRequest request) {
return ApiResponse.successByWallet(walletService.onlineCommercialBankCallback(request));
}
}

View File

@@ -55,6 +55,12 @@ public class PCSignFranchiseController {
return ResponseResult.success(signFranchiseService.rePay(shopId));
}
@ApiOperation("回到缴费阶段")
@PostMapping("/backPayFeeStage")
public ResponseResult<Boolean> backPayFeeStage(@RequestBody @Validated AuditApproveRequest request) {
return ResponseResult.success(signFranchiseService.backPayFeeStage(request, CurrentUserHolder.getUser()));
}
@ApiOperation("数据处理,全部设置为新签")
@GetMapping("/dateHandle")
public ResponseResult<Integer> dateHandle() {

View File

@@ -2,17 +2,15 @@ package com.cool.store.controller.webb;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.constants.CommonConstants;
import com.cool.store.constants.RedisConstant;
import com.cool.store.dao.*;
import com.cool.store.dto.FoodTokenDTO;
import com.cool.store.dto.GetAccessTokenDTO;
import com.cool.store.dto.HqtTokenDTO;
import com.cool.store.dto.ModifyPasswordDTO;
import com.cool.store.dto.*;
import com.cool.store.dto.contract.ContractCallbackDTO;
import com.cool.store.dto.*;
import com.cool.store.dto.huoma.*;
import com.cool.store.dto.wechat.CallbackMessageDTO;
import com.cool.store.dto.wechat.WechatTemplateMessageDTO;
import com.cool.store.dto.wallet.*;
import com.cool.store.entity.*;
import com.cool.store.enums.DownSystemTypeEnum;
import com.cool.store.enums.FranchiseBrandEnum;
import com.cool.store.enums.MessageEnum;
import com.cool.store.enums.SMSMsgEnum;
import com.cool.store.enums.point.ShopSubStageStatusEnum;
@@ -20,13 +18,14 @@ import com.cool.store.enums.wechat.WechatTemplateEnum;
import com.cool.store.handler.WeChatHandler;
import com.cool.store.job.XxlJobHandler;
import com.cool.store.mapper.FranchiseFeeMapper;
import com.cool.store.mapper.LineInfoMapper;
import com.cool.store.mapper.ShopInfoMapper;
import com.cool.store.mapper.SignFranchiseMapper;
import com.cool.store.mq.util.HttpRestTemplateService;
import com.cool.store.request.*;
import com.cool.store.request.bigdata.ProfitDataRequest;
import com.cool.store.request.huoma.ShopBasicInfoRequest;
import com.cool.store.request.oppty.*;
import com.cool.store.request.wallet.*;
import com.cool.store.request.xgj.PushFranchiseFeeRequest;
import com.cool.store.response.ResponseResult;
import com.cool.store.response.bigdata.ActDataResponse;
@@ -39,26 +38,25 @@ import com.cool.store.response.oppty.OpportunityDetailResponse;
import com.cool.store.response.oppty.OpportunityInfoPageResponse;
import com.cool.store.service.*;
import com.cool.store.service.impl.CommonService;
import com.cool.store.service.impl.OrderSysInfoServiceImpl;
import com.cool.store.service.impl.UserAuthMappingServiceImpl;
import com.cool.store.service.wallet.WalletApiService;
import com.cool.store.service.wechat.WechatTemplateService;
import com.cool.store.service.xinfa.XinFaBusinessService;
import com.cool.store.service.xinfa.XinFaDeviceService;
import com.cool.store.utils.CoolDateUtils;
import com.cool.store.utils.RedisConstantUtil;
import com.cool.store.utils.RedisUtilPool;
import com.cool.store.utils.RsaSignUtil;
import com.cool.store.utils.poi.StringUtils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
@RestController
@@ -109,6 +107,9 @@ public class PCTestController {
LinePayService linePayService;
@Resource
LinePayDAO linePayDAO;
@Resource
SignFranchiseMapper signFranchiseMapper;
@Autowired
WeChatHandler weChatHandler;
@GetMapping("/syncStore")
@@ -404,6 +405,44 @@ public class PCTestController {
return ResponseResult.success(Boolean.TRUE);
}
@GetMapping("/pushContract")
@ApiOperation("推送合同信息")
public ResponseResult<Boolean> pushContract(@RequestParam(value = "shopId", required = true) Long shopId) {
ShopInfoDO shopInfoDO = shopInfoDAO.getShopInfo(shopId);
FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByShopId(shopId);
SignFranchiseDO signFranchiseDO = signFranchiseMapper.selectByShopId(shopId);
//自营店 无缴费信息 不需要校验
if (franchiseFeeDO != null){
ContractInformationDTO contractInformationDTO = new ContractInformationDTO();
contractInformationDTO.setShopId(shopId);
contractInformationDTO.setJoinModel(shopInfoDO.getJoinMode());
contractInformationDTO.setShopName(shopInfoDO.getShopName());
//品牌信息
contractInformationDTO.setSign1Name(signFranchiseDO.getPartnershipSignatoryFirst());
contractInformationDTO.setSign2Name(signFranchiseDO.getPartnershipSignatorySecond());
contractInformationDTO.setFirstYearFee(franchiseFeeDO.getFirstYearFee());
contractInformationDTO.setLoanMargin(franchiseFeeDO.getLoanMargin());
contractInformationDTO.setFirstYearManagementFee(franchiseFeeDO.getFirstYearManageFee());
contractInformationDTO.setFirstYearFee(franchiseFeeDO.getFirstYearFee());
contractInformationDTO.setPerformanceBond(franchiseFeeDO.getPerformanceBond());
FranchiseBrandEnum enumByCode = FranchiseBrandEnum.getEnumByCode(shopInfoDO.getFranchiseBrand());
if (enumByCode != null){
contractInformationDTO.setPayeeName(enumByCode.getPayeeName());
contractInformationDTO.setBrandOwner(enumByCode.getBrandOwner());
}
try {
ContractCallbackDTO contractCallbackDTO = pushService.pushContract(contractInformationDTO);
log.info("推送合同信息回调:{}", JSONObject.toJSONString(contractCallbackDTO));
} catch (Exception e) {
log.error("推送合同信息失败", e);
}
}
return ResponseResult.success(Boolean.TRUE);
}
@Resource
ShopStageInfoDAO shopStageInfoDAO;
@@ -638,4 +677,175 @@ public class PCTestController {
return ResponseResult.success(publishStatus);
}
public static void main(String[] args) {
// 测试数据
Map<String, Object> params = new HashMap<>();
params.put("key", "370728957227141");
params.put("status", 1);
params.put("addTagType", 1);
params.put("timestamp", "1763694267");
params.put("outStoreId", "359c107b31c148b59fbe1c2562fdd096");
String privateKey = "MIIEpQIBAAKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQABAoIBACbBGi8I+CE77M+13wAu4RkD8xL7CQc3ic2ojGqIRPi7r5CuphD6mpzvXqtyfhd7DKr9h8bAxwBlnQ28ObjVgsI96/aM7dxvMs/uVPpqwIJyWuTDG5A05EPVC9REQnC6Mp09mnPL7rZz3Mfy6dIGY2YQWfwmWiPl1B45k+wZ+WPZPI0JVnvRzM881kf4aAhEAt08i9VoihylwVAjWIPmLuhf6ZcqI5q8iUsjfO22wZJsudVTCA/dsJdNxv+1RDKeYnSLJL79cZQcodqEhFqTy6vnn2dMsaHH7dpphU27barxUjeL482SR7kFfMqEXn5sltRn/3ep+3sf4Ph2vMtoZeECgYEA6gXzEtT9ZOeAMp4BRGmfNZ0TQLprPPVSwudz/uUBE4j/vyhfXkh9p7hqwyoxN+Z8b65yINvx8yP6hge6ek/MyAwBCZyfIRxZAPZu1eEGoYKl391ubFt2EIVqrN2DtAvzHMr5B/E2VHBq6AJm/rERFX5oKsg6zHS9tPLhgGnWVd0CgYEA5aFWOrtiqZJlp1MHQ4OeWBJatBSynkORdxCW7ic0CKbkYus0NSz1SsvskpbnfEXNB53x98qJxRhSopg/DC4m7XqxjSf9lY3HH4Y/9907olj33yGAnLWC88GivVndt577u/XhYRCk33vOQ3GoibEdjnpMOkWmOfwYG/FsRWWQvaECgYEA1N2siEisZIgel+wZAv2AD+hchtgKi1wqd5bIb+Yl4HsRBfPXK4+MnG6mzfcm5c4FCiEHNtRZc+waCKgm+vJzNtOUbgXEyP1cCAAgOPOCcI7CCqsDshRPhB+XNL4Y+kCUVnBZrNu/q3bGB1uIC8tL2t0sKx4OPcNCe8EhVQjwKRECgYEA4uothdhKRPtwDIsVsHfN74Yjr7SMVay7gIcaPrjqyGnzYnS+oJWOx50AaFNK6Rko5JAF3jF9NxE0B4yfMPAic6Y88hpEkpcJ4HMPn2Y1WdbFCu/WYgVUJICCys6VNLCcXj85umtyIY38Y9VbEMW/SV49GZBeFQqy4FoP/fvBrkECgYEAnfjTDYwgdmJdsUqyNzAocwcJXG2rVtYc7Txrl0TltcwuJmgoSywdzyOP2R9+NZsfoxWDzG0/yr15ApMvUcnnTwHN/8bGQ9SLatFLKqS4EtdwDKKS1JvNbs7V1myQGpt7jbShZOI0e6Fs4xP8ujxsLeGgiq9mZrS9UdRj5XKDoVM=";
String publicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQAB";
try {
// 1. 加签
String sign = RsaSignUtil.generateSign(new HashMap<>(params), privateKey);
System.out.println("生成的签名: " + sign);
// 2. 将签名放入参数中
params.put("sign", sign);
// 3. 验签
boolean isValid = RsaSignUtil.verifySign(new HashMap<>(params), publicKey);
System.out.println("验签结果: " + isValid);
// 4. 测试排序字符串生成
String sortedString = RsaSignUtil.objectToSortedString(params);
System.out.println("排序后的字符串: " + sortedString);
} catch (Exception e) {
e.printStackTrace();
}
}
@Resource
WalletApiService walletApiService;
@ApiOperation("获取银行信息")
@PostMapping("/getBankList")
public ResponseResult<BankListDTO> getBankList(@RequestBody GetBankRequest request) {
BankListDTO bankList = walletApiService.getBankList(request);
return ResponseResult.success(bankList);
}
@ApiOperation("签约人开通信息")
@PostMapping("/createStoreAndAccount")
public ResponseResult<StoreAccountDTO> createStoreAndAccount(@RequestBody CreateStoreAndAccountRequest request) {
StoreAccountDTO dto = walletApiService.createStoreAndAccount(request);
return ResponseResult.success(dto);
}
@ApiOperation("创建门店接口")
@PostMapping("/createStore")
public ResponseResult<AccountNoDTO> createStore(@RequestBody CreateStoreRequest request) {
AccountNoDTO accountNoDTO = walletApiService.createStore(request);
return ResponseResult.success(accountNoDTO);
}
@ApiOperation("打标接口")
@PostMapping("/addTag")
public ResponseResult<AddTagDTO> addTag(@RequestBody AccountAddTagRequest request) {
AddTagDTO addTag = walletApiService.addTag(request);
return ResponseResult.success(addTag);
}
@ApiOperation("门店签约人账户鉴权申请接口")
@PostMapping("/authentication")
public ResponseResult<AccountAuthenticationDTO> authentication(@RequestBody OutStoreIdRequest request) {
AccountAuthenticationDTO accountAuthenticationDTO = walletApiService.authentication(request);
return ResponseResult.success(accountAuthenticationDTO);
}
@ApiOperation("门店签约人账户开通接口")
@PostMapping("/openAccount")
public ResponseResult<AccountVerifyDTO> openAccount(@RequestBody AccountVerifyRequest request) {
AccountVerifyDTO accountVerifyDTO = walletApiService.openAccount(request);
return ResponseResult.success(accountVerifyDTO);
}
@ApiOperation("获取账户信息")
@PostMapping("/getAccountInfo")
public ResponseResult<List<AccountInfoDTO>> getAccountInfo(@RequestBody OutStoreIdRequest request) {
List<AccountInfoDTO> accountInfoList = walletApiService.getAccountInfo(request);
return ResponseResult.success(accountInfoList);
}
@ApiOperation("大额预支付接口")
@PostMapping("/largePayment")
public ResponseResult<LargePaymentDTO> largePayment(@RequestBody LargePaymentRequest request) {
LargePaymentDTO largePayment = walletApiService.largePayment(request);
return ResponseResult.success(largePayment);
}
@ApiOperation("大额预支付查询接口")
@PostMapping("/largePaymentQuery")
public ResponseResult<PaymentDTO> largePaymentQuery(@RequestBody PaymentDetailRequest request) {
PaymentDTO PaymentDTO = walletApiService.largePaymentQuery(request);
return ResponseResult.success(PaymentDTO);
}
@ApiOperation("门店账户向公司分账转账接口")
@PostMapping("/transfer")
public ResponseResult<TransferDTO> transfer(@RequestBody TransferRequest request) {
TransferDTO transfer = walletApiService.transfer(request);
return ResponseResult.success(transfer);
}
@ApiOperation("门店签约账户,退款提现至提现卡")
@PostMapping("/withdraw")
public ResponseResult<WithDrawerDTO> withdraw(@RequestBody WithDrawerRequest request) {
WithDrawerDTO withdraw = walletApiService.withdraw(request);
return ResponseResult.success(withdraw);
}
@ApiOperation(" 获取账单详情")
@PostMapping("/getBillDetail")
public ResponseResult<TradeRecordDTO> getBillDetail(@RequestBody BillDetailRequest request) {
TradeRecordDTO billDetail = walletApiService.getBillDetail(request);
return ResponseResult.success(billDetail);
}
@ApiOperation("获取账单列表")
@PostMapping("/getBillPage")
public ResponseResult<BillPageDTO> getBillPage(@RequestBody BillPageRequest request) {
BillPageDTO billPage = walletApiService.getBillPage(request);
return ResponseResult.success(billPage);
}
@ApiOperation("获取银行信息")
@PostMapping("/getCompanyInfo")
public ResponseResult<CompanyListDTO> getCompanyInfo(@RequestBody FindPageCompanyRequest request) {
CompanyListDTO companyDTO = walletApiService.getCompanyInfo(request);
return ResponseResult.success(companyDTO);
}
@ApiOperation("获取账户列表信息")
@PostMapping("/getAccountList")
public ResponseResult<AccountPageDTO> getAccountList(@RequestBody AccountBatchQueryRequest request) {
AccountPageDTO accountList = walletApiService.getAccountList(request);
return ResponseResult.success(accountList);
}
@Value("${cool.api.rsa.private.key}")
private String coolPrivateKey;
@Value("${cool.api.rsa.public.key}")
private String coolPublicKey;
@ApiOperation("验签")
@PostMapping("/verify")
public ResponseResult<Boolean> test(@RequestBody TestVerifyRequest request) {
ObjectMapper objectMapper = new ObjectMapper();
try {
Map<String, Object> params = objectMapper.readValue(JSONObject.toJSONString(request), new TypeReference<Map<String, Object>>() {});
String s = RsaSignUtil.generateSign(params, coolPrivateKey);
params.put("sign",s);
boolean b = RsaSignUtil.verifySign(params, coolPublicKey);
log.info("验签结果:{}",b);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return ResponseResult.success(Boolean.TRUE);
}
}

View File

@@ -0,0 +1,71 @@
package com.cool.store.controller.webb;
import com.cool.store.dto.wallet.AccountInfoDTO;
import com.cool.store.dto.wallet.BillDetailDTO;
import com.cool.store.dto.wallet.TradeRecordDTO;
import com.cool.store.request.wallet.*;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.wallet.WalletService;
import com.cool.store.vo.wallet.AccountBillPageVO;
import com.cool.store.vo.wallet.AccountInfoVO;
import com.cool.store.vo.wallet.AccountPageVO;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* <p>
* 钱包 前端控制器
* </p>
*
* @author wangff
* @since 2025/11/18
*/
@Api(tags = "钱包")
@RestController
@RequestMapping("/pc/wallet")
@RequiredArgsConstructor
public class WalletController {
private final WalletService walletService;
@ApiOperation("账户列表")
@GetMapping("/accountList")
public ResponseResult<List<AccountInfoVO>> getAccountList(AccountQueryRequest request) {
return ResponseResult.success(walletService.getAccountList(request).getAccountList());
}
@ApiOperation("账户详情")
@PostMapping("/accountInfo")
public ResponseResult<AccountInfoVO> getAccountInfo(@RequestBody AccountQueryRequest request) {
return ResponseResult.success(walletService.getAccountInfo(request));
}
@ApiOperation("分页查询所有门店账户列表 支持条件查询")
@PostMapping("/getAllAccountList")
public ResponseResult<PageInfo<AccountPageVO>> getAllAccountList(@RequestBody CoolAccountBatchQueryRequest request) {
return ResponseResult.success(walletService.getAllAccountList(request));
}
@ApiOperation("分页查询所有流水列表 支持条件查询")
@PostMapping("/getTradeRecordList")
public ResponseResult<PageInfo<TradeRecordDTO>> getTradeRecordList(@RequestBody CoolTradeRecodePageRequest request) {
return ResponseResult.success(walletService.getTradeRecordList(request));
}
@ApiOperation("账户流水")
@PostMapping("/billPage")
public ResponseResult<PageInfo<TradeRecordDTO>> getBillPage(@RequestBody @Validated AccountBillQueryRequest request) {
return ResponseResult.success(walletService.getBillPage(request).getData());
}
@ApiOperation("交易流水详情")
@GetMapping("/billDetail")
public ResponseResult<TradeRecordDTO> getBillDetail(BillDetailRequest request) {
return ResponseResult.success(walletService.getBillDetail(request));
}
}

View File

@@ -0,0 +1,145 @@
package com.cool.store.controller.webc;
import com.cool.store.dto.wallet.OpenBasicInfoDTO;
import com.cool.store.dto.wallet.PasswordDTO;
import com.cool.store.dto.wallet.TradeRecordDTO;
import com.cool.store.request.wallet.*;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.wallet.WalletService;
import com.cool.store.vo.wallet.*;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotBlank;
/**
* <p>
* Mini钱包 前端控制器
* </p>
*
* @author wangff
* @since 2025/11/14
*/
@Api(tags = "Mini钱包")
@RestController
@RequestMapping("/mini/wallet")
@RequiredArgsConstructor
@Validated
public class MiniWalletController {
private final WalletService walletService;
@ApiOperation("步骤1平安银行钱包账号创建")
@PostMapping("/accountCreate")
public ResponseResult<Boolean> accountCreate(@RequestBody @Validated AccountCreateRequest request) {
return ResponseResult.success(walletService.accountCreate(request));
}
@ApiOperation("步骤2鉴权申请")
@PostMapping("/authentication")
public ResponseResult<AccountAuthenticationVO> authentication(@RequestBody @Validated WalletShopRequest request) {
return ResponseResult.success(walletService.authentication(request));
}
@ApiOperation("步骤3账号开通步骤2接口返回4时无需调用")
@PostMapping("/openAccount")
public ResponseResult<Boolean> openAccount(@RequestBody @Validated AccountOpenRequest request) {
return ResponseResult.success(walletService.openAccount(request));
}
@ApiOperation("支行信息查询")
@PostMapping("/bankList")
public ResponseResult<PageInfo<BankVO>> getBankList(@RequestBody BankListRequest request) {
return ResponseResult.success(walletService.getBankList(request));
}
@ApiOperation("账户列表")
@GetMapping("/accountList")
public ResponseResult<AccountDataVO> getAccountList(AccountQueryRequest request) {
return ResponseResult.success(walletService.getAccountList(request));
}
@ApiOperation("账户详情")
@PostMapping("/accountInfo")
public ResponseResult<AccountInfoVO> getAccountInfo(@RequestBody AccountQueryRequest request) {
return ResponseResult.success(walletService.getAccountInfo(request));
}
@ApiOperation("账户流水")
@PostMapping("/billPage")
public ResponseResult<AccountBillPageVO> getBillPage(@RequestBody @Validated AccountBillQueryRequest request) {
return ResponseResult.success(walletService.getBillPage(request));
}
@ApiOperation("交易流水详情")
@GetMapping("/billDetail")
public ResponseResult<TradeRecordDTO> getBillDetail(BillDetailRequest request) {
return ResponseResult.success(walletService.getBillDetail(request));
}
@ApiOperation("密码维护")
@PostMapping("/passwordUpdate")
public ResponseResult<Boolean> passwordUpdate(@RequestBody @Validated AccountPasswordRequest request) {
return ResponseResult.success(walletService.passwordUpdate(request));
}
@ApiOperation("门店是否存在密码")
@PostMapping("/existPwd")
public ResponseResult<PasswordDTO> passwordUpdate(@RequestBody @Validated OutStoreIdRequest request) {
return ResponseResult.success(walletService.existPassword(request));
}
@ApiOperation("账户充值")
@PostMapping("/payment")
public ResponseResult<AccountPaymentVO> payment(@RequestBody @Validated AccountPaymentRequest request) {
return ResponseResult.success(walletService.payment(request));
}
@ApiOperation("未支付充值订单分页查询")
@GetMapping("/nonPaymentPage")
public ResponseResult<PageInfo<WalletPaymentOrderVO>> nonPaymentPage(LargePaymentQueryRequest request) {
return ResponseResult.success(walletService.nonPaymentOrderPage(request));
}
@ApiOperation("根据预支付id查询收款账户详情")
@GetMapping("/paymentDetail")
public ResponseResult<AccountPaymentVO> paymentDetail(@NotBlank(message = "预支付id不能为空") String paymentId) {
return ResponseResult.success(walletService.paymentDetail(paymentId));
}
@ApiOperation("提现")
@PostMapping("/withDrawer")
public ResponseResult<Boolean> withDrawer(@RequestBody @Validated WalletWithDrawerRequest request) {
return ResponseResult.success(walletService.withDrawer(request));
}
@ApiOperation("根据门店编码查询开通基础信息")
@GetMapping("/getOpenBasicInfo")
@ApiImplicitParams({
@ApiImplicitParam(name = "storeId", value = "门店id", required = true, dataType = "String"),
@ApiImplicitParam(name = "storeCode", value = "门店编号", required = true, dataType = "String"),
})
public ResponseResult<OpenBasicInfoDTO> getOpenBasicInfo(@NotBlank(message = "门店id不能为空") String storeId,
@NotBlank(message = "门店编码不能为空") String storeCode) {
return ResponseResult.success(walletService.getOpenBasicInfo(storeId, storeCode));
}
@ApiOperation("提交开通")
@PostMapping("/openOnlineBankAccount")
public ResponseResult<Boolean> openOnlineBankAccount(@RequestBody @Validated CoolOpenBasicInfoRequest request) {
return ResponseResult.success(walletService.openOnlineBankAccount(request));
}
@ApiOperation("网商账户激活")
@PostMapping("/onlineBankActive")
public ResponseResult<Boolean> onlineBankActive(@RequestBody @Validated StoreShopRequest request) {
return ResponseResult.success(walletService.onlineBankActive(request));
}
}

View File

@@ -7,6 +7,7 @@ import com.cool.store.dto.OpenCityDTO;
import com.cool.store.dto.ocr.InvoiceDTO;
import com.cool.store.dto.store.StoreUserPositionDTO;
import com.cool.store.dto.store.StoreUserUpdateDTO;
import com.cool.store.dto.wallet.OpenBasicInfoDTO;
import com.cool.store.entity.*;
import com.cool.store.enums.ErrorCodeEnum;
import com.cool.store.enums.IDCardSideEnum;
@@ -19,6 +20,7 @@ import com.cool.store.exception.ServiceException;
import com.cool.store.job.XxlJobHandler;
import com.cool.store.mapper.HyOpenAreaInfoMapper;
import com.cool.store.request.ShopListSuccessOpenRequest;
import com.cool.store.request.wallet.CoolOpenBasicInfoRequest;
import com.cool.store.request.xfsgFirstOrderListRequest;
import com.cool.store.request.xgj.FranchiseFeeCallBackRequest;
import com.cool.store.request.xgj.ReceiptCallBackRequest;
@@ -27,6 +29,7 @@ import com.cool.store.response.ResponseResult;
import com.cool.store.response.caipin.StoreUserResponse;
import com.cool.store.response.xfsgFirstOderListResponse;
import com.cool.store.service.*;
import com.cool.store.service.wallet.WalletService;
import com.cool.store.utils.poi.ExcelUtil;
import com.cool.store.utils.poi.StringUtils;
import com.cool.store.vo.RegionPathNameVO;
@@ -40,6 +43,7 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.validation.constraints.NotBlank;
import java.io.ByteArrayOutputStream;
import java.math.BigDecimal;
import java.time.LocalDate;
@@ -393,4 +397,18 @@ public class TestController {
List<StoreUserUpdateDTO> storeUserUpdateDTOS = JSONObject.parseArray(JSONObject.toJSONString(storeUser), StoreUserUpdateDTO.class);
StoreUserResponse storeUserResponse = thirdFoodService.pushStoreUser(storeUserUpdateDTOS);
}
@Resource
WalletService walletService;
@ApiOperation("根据门店编码查询开通基础信息")
@GetMapping("/getOpenBasicInfo")
public ResponseResult<OpenBasicInfoDTO> getOpenBasicInfo(@NotBlank(message = "门店编码不能为空") String storeCode) {
return ResponseResult.success(walletService.getOpenBasicInfo(null, storeCode));
}
@ApiOperation("提交开通")
@PostMapping("/openOnlineBankAccount")
public ResponseResult<Boolean> openOnlineBankAccount(@RequestBody @Validated CoolOpenBasicInfoRequest request) {
return ResponseResult.success(walletService.openOnlineBankAccount(request));
}
}

View File

@@ -157,3 +157,8 @@ huoMa.franchise.stores.password = Huoma@123456.
huoMa.restaurant.stores.account = 15167817007
huoMa.restaurant.stores.password = Huoma@123456.
wallet.url=https://api.dev.wenmatech.com:443
wallet.api.yzt.key=360155690205317
cool.api.rsa.private.key=MIIEpQIBAAKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQABAoIBACbBGi8I+CE77M+13wAu4RkD8xL7CQc3ic2ojGqIRPi7r5CuphD6mpzvXqtyfhd7DKr9h8bAxwBlnQ28ObjVgsI96/aM7dxvMs/uVPpqwIJyWuTDG5A05EPVC9REQnC6Mp09mnPL7rZz3Mfy6dIGY2YQWfwmWiPl1B45k+wZ+WPZPI0JVnvRzM881kf4aAhEAt08i9VoihylwVAjWIPmLuhf6ZcqI5q8iUsjfO22wZJsudVTCA/dsJdNxv+1RDKeYnSLJL79cZQcodqEhFqTy6vnn2dMsaHH7dpphU27barxUjeL482SR7kFfMqEXn5sltRn/3ep+3sf4Ph2vMtoZeECgYEA6gXzEtT9ZOeAMp4BRGmfNZ0TQLprPPVSwudz/uUBE4j/vyhfXkh9p7hqwyoxN+Z8b65yINvx8yP6hge6ek/MyAwBCZyfIRxZAPZu1eEGoYKl391ubFt2EIVqrN2DtAvzHMr5B/E2VHBq6AJm/rERFX5oKsg6zHS9tPLhgGnWVd0CgYEA5aFWOrtiqZJlp1MHQ4OeWBJatBSynkORdxCW7ic0CKbkYus0NSz1SsvskpbnfEXNB53x98qJxRhSopg/DC4m7XqxjSf9lY3HH4Y/9907olj33yGAnLWC88GivVndt577u/XhYRCk33vOQ3GoibEdjnpMOkWmOfwYG/FsRWWQvaECgYEA1N2siEisZIgel+wZAv2AD+hchtgKi1wqd5bIb+Yl4HsRBfPXK4+MnG6mzfcm5c4FCiEHNtRZc+waCKgm+vJzNtOUbgXEyP1cCAAgOPOCcI7CCqsDshRPhB+XNL4Y+kCUVnBZrNu/q3bGB1uIC8tL2t0sKx4OPcNCe8EhVQjwKRECgYEA4uothdhKRPtwDIsVsHfN74Yjr7SMVay7gIcaPrjqyGnzYnS+oJWOx50AaFNK6Rko5JAF3jF9NxE0B4yfMPAic6Y88hpEkpcJ4HMPn2Y1WdbFCu/WYgVUJICCys6VNLCcXj85umtyIY38Y9VbEMW/SV49GZBeFQqy4FoP/fvBrkECgYEAnfjTDYwgdmJdsUqyNzAocwcJXG2rVtYc7Txrl0TltcwuJmgoSywdzyOP2R9+NZsfoxWDzG0/yr15ApMvUcnnTwHN/8bGQ9SLatFLKqS4EtdwDKKS1JvNbs7V1myQGpt7jbShZOI0e6Fs4xP8ujxsLeGgiq9mZrS9UdRj5XKDoVM=
cool.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQAB
wallet.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvU5WUX5MaZhS4MRfZ5OeqmSxTgjNi64SEwTiDYS++DRHRFTEguk1g5AbiW3l9eEdATeVk0WX+T6ZIIa2do3bQOKhlMtRwWMWQIucjGa7ySOCuicvnCD2HAQ2EThfqQdSpAW5UpcyodrhcyUkuevBA4fQQ06k9lB4FjqWtao2+aYFIPFPu8Wu28KI/9QIMLI02Q1YY3duJ67QW4EM4I2oS0t3sWJeZtIJPRHFWW1EaLJz2FdbJJq+z6D2p++9pmkHsvdnktUUO+nPL3PCLtxGYxEwr/AqTYR/1yXfkVWe3nHXc+qvRt967X1hDHC+gEPJItr7kUk3pQTGBv9kNu75DwIDAQAB

View File

@@ -141,4 +141,10 @@ hqt.token.url=https://tc.cloud.hecom.cn
hqt.token.username=18161486722
hqt.token.grant_type=client_credentials
hqt.token.client.id=WrPffdGpcWkcPsbN
hqt.token.client.secret=rYe9Cwug5LwQNIBJAiW0a7weF9CAhYCD
hqt.token.client.secret=rYe9Cwug5LwQNIBJAiW0a7weF9CAhYCD
wallet.url=https://api.dev.wenmatech.com:443
wallet.api.yzt.key=360155690205317
cool.api.rsa.private.key=MIIEpQIBAAKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQABAoIBACbBGi8I+CE77M+13wAu4RkD8xL7CQc3ic2ojGqIRPi7r5CuphD6mpzvXqtyfhd7DKr9h8bAxwBlnQ28ObjVgsI96/aM7dxvMs/uVPpqwIJyWuTDG5A05EPVC9REQnC6Mp09mnPL7rZz3Mfy6dIGY2YQWfwmWiPl1B45k+wZ+WPZPI0JVnvRzM881kf4aAhEAt08i9VoihylwVAjWIPmLuhf6ZcqI5q8iUsjfO22wZJsudVTCA/dsJdNxv+1RDKeYnSLJL79cZQcodqEhFqTy6vnn2dMsaHH7dpphU27barxUjeL482SR7kFfMqEXn5sltRn/3ep+3sf4Ph2vMtoZeECgYEA6gXzEtT9ZOeAMp4BRGmfNZ0TQLprPPVSwudz/uUBE4j/vyhfXkh9p7hqwyoxN+Z8b65yINvx8yP6hge6ek/MyAwBCZyfIRxZAPZu1eEGoYKl391ubFt2EIVqrN2DtAvzHMr5B/E2VHBq6AJm/rERFX5oKsg6zHS9tPLhgGnWVd0CgYEA5aFWOrtiqZJlp1MHQ4OeWBJatBSynkORdxCW7ic0CKbkYus0NSz1SsvskpbnfEXNB53x98qJxRhSopg/DC4m7XqxjSf9lY3HH4Y/9907olj33yGAnLWC88GivVndt577u/XhYRCk33vOQ3GoibEdjnpMOkWmOfwYG/FsRWWQvaECgYEA1N2siEisZIgel+wZAv2AD+hchtgKi1wqd5bIb+Yl4HsRBfPXK4+MnG6mzfcm5c4FCiEHNtRZc+waCKgm+vJzNtOUbgXEyP1cCAAgOPOCcI7CCqsDshRPhB+XNL4Y+kCUVnBZrNu/q3bGB1uIC8tL2t0sKx4OPcNCe8EhVQjwKRECgYEA4uothdhKRPtwDIsVsHfN74Yjr7SMVay7gIcaPrjqyGnzYnS+oJWOx50AaFNK6Rko5JAF3jF9NxE0B4yfMPAic6Y88hpEkpcJ4HMPn2Y1WdbFCu/WYgVUJICCys6VNLCcXj85umtyIY38Y9VbEMW/SV49GZBeFQqy4FoP/fvBrkECgYEAnfjTDYwgdmJdsUqyNzAocwcJXG2rVtYc7Txrl0TltcwuJmgoSywdzyOP2R9+NZsfoxWDzG0/yr15ApMvUcnnTwHN/8bGQ9SLatFLKqS4EtdwDKKS1JvNbs7V1myQGpt7jbShZOI0e6Fs4xP8ujxsLeGgiq9mZrS9UdRj5XKDoVM=
cool.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQAB
wallet.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvU5WUX5MaZhS4MRfZ5OeqmSxTgjNi64SEwTiDYS++DRHRFTEguk1g5AbiW3l9eEdATeVk0WX+T6ZIIa2do3bQOKhlMtRwWMWQIucjGa7ySOCuicvnCD2HAQ2EThfqQdSpAW5UpcyodrhcyUkuevBA4fQQ06k9lB4FjqWtao2+aYFIPFPu8Wu28KI/9QIMLI02Q1YY3duJ67QW4EM4I2oS0t3sWJeZtIJPRHFWW1EaLJz2FdbJJq+z6D2p++9pmkHsvdnktUUO+nPL3PCLtxGYxEwr/AqTYR/1yXfkVWe3nHXc+qvRt967X1hDHC+gEPJItr7kUk3pQTGBv9kNu75DwIDAQAB

View File

@@ -158,4 +158,11 @@ huoMa.direct.stores.password = Huoma@123456.
huoMa.franchise.stores.account = 13345565081
huoMa.franchise.stores.password = Huoma@123456.
huoMa.restaurant.stores.account = 15167817007
huoMa.restaurant.stores.password = Huoma@123456.
huoMa.restaurant.stores.password = Huoma@123456.
wallet.url=https://zhengxin.wenmatech.com
wallet.api.yzt.key=375393764171845
cool.api.rsa.private.key=MIIEoQIBAAKCAQEAleyT39qxm9Vi4d3f/pF4yI3EATtLlP870dFfk5Rwj1MEM4OVTUeoBrld5GwTARQYzuyZETTZPh9taFCVtLFVsQv4waTqDf/7vnfBbvrTZ2mvZv6H/M6BTQnTx5UmOIP1RsA933ce7v/hmG/DlMaHU3JVC840Ae1q7uJZ2yA6+r6aAGdTGMSH4oQ+U9omJOJbgbuti9DsBuGDDKZ1uMhrWW/l4El5y2Qdu/71wIQuI08kPegmuGl4+FLRJ2OnoGsp+BRXKpFbN0fq0YwPQhjzSHsKg64qimmzRRr5Ewd+4w1/27dJ6mopQd4zvf7+VQ4wEZgATTe/hjBw1njOOBD/WQIDAQABAoIBACSFU0ZSEzbXRbWoo0JzdF1Cb28vXwuGGy/S1XnxTHQVcG4ODSYcoPk2WYFltEFsgFiTuPvAiHUCGdgx3S39jtbIiEm/nwZXB5+Ps46RykKkM4ae1UiHk2bNUIoLMprMxkh8VvYjIeVtbqp/+0A4FkoFDWOJURDxIT3c5K+ky8k9mKz59SiOkNoiayPQTEjzZPgKSsT64286PGmE9v4BlpyxQ1bLXeZaQGAkQ7YVtU5XJgbMM86hgmFlTcHVMGeMoQvJTfcsLlRg8ucX/zzBTHR7fZP6i5OJl5CYLbzHbTyHN9KRYDYv066SvbGLNa+4NO2cY+L6NehiwAkkFxSGKkMCgYEAoVgEjOqLyL1CpeaW7ckWQSbcae0a6J61b6meCkRaKrwcWi7ut9OfmvkCae2qsMsHQlitFM8blrnhtJxMt3EhWKYHI1seZto6YR0mzEEz5IVM3OStIZN7RY4Fg6AyB0C5Gure3GgGHaSs5J8AbCpJyLjTWuOdcnThgHHe4Mw2dGsCgYEA7eF0TpAbdYn8xjqNEgeRSSXYpwtRQ1zrpH0b1KQBxx/fvoZPzWG0SYIi6eYV5bxV5EDnCKlXXFD3ztMfThPFUGt8hHAG6CKpsiVNvYDVhAzXN18JQJtRQRO/4S0f42C8os87ToL1nlM83c8hegrsGO+JnoTzKf8KkpYqTNrvrEsCf1HuYGEuuc02TqHwdrRJaQOsuEESJpf6ACiz+Y09KIyK+drR+mdfD62ixZcFGaitcQJABaSLh3cC7ZrJxCtjR4u8w+MwYj/Ykcy/APS4J6HkDyQc+84RFog7lpFAyCbmtxj0LDfAm1pyRVnTZGOJFe7X7Hw7GbkFoX2YVZXSHdUCgYEA6rCuYPxIOxSicKg/mfQhYLuYHmZKDF3WlnhgRtBweJZ31q8IeKbWild8PqukGv5O910ZEzCPYiL3+fPNROi4mPkS5k7oYYohRgMLydUb0qYghx6aMEWMStpDStOMTHaaZT5zUqhdz5Br0qKScqfn+0oIyn58sYhQVAMXRLAUGjUCgYAYiuiTme9S9gSt1pZrDbPxXlbVm6PjlkP/OKrmBj5gq8iYeKzmYKp66UKFo6ZeeRcKiXLWdQS0i0rKBPux8kmfIwbrfbuYAVGE0GmUdEMNsBQvEjxpwo3afyB5F70tdnm4EBo0qeqJxuBK8DLpBFka2yfzEo/3Z6i0X/XqIwq/7A==
cool.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAleyT39qxm9Vi4d3f/pF4yI3EATtLlP870dFfk5Rwj1MEM4OVTUeoBrld5GwTARQYzuyZETTZPh9taFCVtLFVsQv4waTqDf/7vnfBbvrTZ2mvZv6H/M6BTQnTx5UmOIP1RsA933ce7v/hmG/DlMaHU3JVC840Ae1q7uJZ2yA6+r6aAGdTGMSH4oQ+U9omJOJbgbuti9DsBuGDDKZ1uMhrWW/l4El5y2Qdu/71wIQuI08kPegmuGl4+FLRJ2OnoGsp+BRXKpFbN0fq0YwPQhjzSHsKg64qimmzRRr5Ewd+4w1/27dJ6mopQd4zvf7+VQ4wEZgATTe/hjBw1njOOBD/WQIDAQAB
wallet.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvU5WUX5MaZhS4MRfZ5OeqmSxTgjNi64SEwTiDYS++DRHRFTEguk1g5AbiW3l9eEdATeVk0WX+T6ZIIa2do3bQOKhlMtRwWMWQIucjGa7ySOCuicvnCD2HAQ2EThfqQdSpAW5UpcyodrhcyUkuevBA4fQQ06k9lB4FjqWtao2+aYFIPFPu8Wu28KI/9QIMLI02Q1YY3duJ67QW4EM4I2oS0t3sWJeZtIJPRHFWW1EaLJz2FdbJJq+z6D2p++9pmkHsvdnktUUO+nPL3PCLtxGYxEwr/AqTYR/1yXfkVWe3nHXc+qvRt967X1hDHC+gEPJItr7kUk3pQTGBv9kNu75DwIDAQAB

View File

@@ -169,3 +169,9 @@ huoMa.franchise.stores.account = 13345565081
huoMa.franchise.stores.password = Huoma@123456.
huoMa.restaurant.stores.account = 15167817007
huoMa.restaurant.stores.password = Huoma@123456.
wallet.url=https://api.dev.wenmatech.com:443
wallet.api.yzt.key=360155690205317
cool.api.rsa.private.key=MIIEpQIBAAKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQABAoIBACbBGi8I+CE77M+13wAu4RkD8xL7CQc3ic2ojGqIRPi7r5CuphD6mpzvXqtyfhd7DKr9h8bAxwBlnQ28ObjVgsI96/aM7dxvMs/uVPpqwIJyWuTDG5A05EPVC9REQnC6Mp09mnPL7rZz3Mfy6dIGY2YQWfwmWiPl1B45k+wZ+WPZPI0JVnvRzM881kf4aAhEAt08i9VoihylwVAjWIPmLuhf6ZcqI5q8iUsjfO22wZJsudVTCA/dsJdNxv+1RDKeYnSLJL79cZQcodqEhFqTy6vnn2dMsaHH7dpphU27barxUjeL482SR7kFfMqEXn5sltRn/3ep+3sf4Ph2vMtoZeECgYEA6gXzEtT9ZOeAMp4BRGmfNZ0TQLprPPVSwudz/uUBE4j/vyhfXkh9p7hqwyoxN+Z8b65yINvx8yP6hge6ek/MyAwBCZyfIRxZAPZu1eEGoYKl391ubFt2EIVqrN2DtAvzHMr5B/E2VHBq6AJm/rERFX5oKsg6zHS9tPLhgGnWVd0CgYEA5aFWOrtiqZJlp1MHQ4OeWBJatBSynkORdxCW7ic0CKbkYus0NSz1SsvskpbnfEXNB53x98qJxRhSopg/DC4m7XqxjSf9lY3HH4Y/9907olj33yGAnLWC88GivVndt577u/XhYRCk33vOQ3GoibEdjnpMOkWmOfwYG/FsRWWQvaECgYEA1N2siEisZIgel+wZAv2AD+hchtgKi1wqd5bIb+Yl4HsRBfPXK4+MnG6mzfcm5c4FCiEHNtRZc+waCKgm+vJzNtOUbgXEyP1cCAAgOPOCcI7CCqsDshRPhB+XNL4Y+kCUVnBZrNu/q3bGB1uIC8tL2t0sKx4OPcNCe8EhVQjwKRECgYEA4uothdhKRPtwDIsVsHfN74Yjr7SMVay7gIcaPrjqyGnzYnS+oJWOx50AaFNK6Rko5JAF3jF9NxE0B4yfMPAic6Y88hpEkpcJ4HMPn2Y1WdbFCu/WYgVUJICCys6VNLCcXj85umtyIY38Y9VbEMW/SV49GZBeFQqy4FoP/fvBrkECgYEAnfjTDYwgdmJdsUqyNzAocwcJXG2rVtYc7Txrl0TltcwuJmgoSywdzyOP2R9+NZsfoxWDzG0/yr15ApMvUcnnTwHN/8bGQ9SLatFLKqS4EtdwDKKS1JvNbs7V1myQGpt7jbShZOI0e6Fs4xP8ujxsLeGgiq9mZrS9UdRj5XKDoVM=
cool.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0erPAWesjkp9J4htmfCyqKS9npmT9dW3KqWTfb4c7x/QBUtKuokWOO0XikHd4bGUa9kl+twSv/5A3kYz1B9eg6wRuDJoads+G5U7rVQjzdoUtLaf3lNXkuSehl4uHUPQfNa6vcmvzraXPxJjEpYzj9WZh7uJqq2oSgw42H1qdbFCXSaE5BwsOb+2vZXjzh4RO10Sy3Qb1UqGsoZoxVzrtDeEctCjrecFyQr96L2UtYa4NTxSTfu4rgObrwIOMvqqnLsXEzK/rd6kIHYjkZYQCOa48AedWp2YKQ7Ldclj+VMLnXvl42J9exVkbs++8k3P5sI9fdZX4Ey2RBjnSoAo/QIDAQAB
wallet.api.rsa.public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvU5WUX5MaZhS4MRfZ5OeqmSxTgjNi64SEwTiDYS++DRHRFTEguk1g5AbiW3l9eEdATeVk0WX+T6ZIIa2do3bQOKhlMtRwWMWQIucjGa7ySOCuicvnCD2HAQ2EThfqQdSpAW5UpcyodrhcyUkuevBA4fQQ06k9lB4FjqWtao2+aYFIPFPu8Wu28KI/9QIMLI02Q1YY3duJ67QW4EM4I2oS0t3sWJeZtIJPRHFWW1EaLJz2FdbJJq+z6D2p++9pmkHsvdnktUUO+nPL3PCLtxGYxEwr/AqTYR/1yXfkVWe3nHXc+qvRt967X1hDHC+gEPJItr7kUk3pQTGBv9kNu75DwIDAQAB