Merge branch 'cc_20251112_wallet' into 'master'
钱包 See merge request hangzhou/java/custom_zxjp!194
This commit is contained in:
@@ -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)));
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,15 +2,10 @@ 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.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.MessageEnum;
|
||||
@@ -20,13 +15,13 @@ 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.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 +34,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
|
||||
@@ -638,4 +632,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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user