"拉卡拉进件支付代码"

This commit is contained in:
hankaikai 2023-06-05 14:27:09 +08:00
parent 20961894dc
commit ecbdd3f0b1
23 changed files with 632 additions and 221 deletions

View File

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd
">
<id>release</id>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>src/assembly</directory>
<outputDirectory>.</outputDirectory>
<includes>
<include>*.sh</include>
<include>*.bat</include>
</includes>
</fileSet>
<fileSet>
<directory>src/main/resources</directory>
<outputDirectory>.</outputDirectory>
<includes>
<include>*.yml</include>
<!--<include>application.yml</include>-->
</includes>
</fileSet>
</fileSets>
<dependencySets>
<!-- 将scope为runtime的依赖包打包到lib目录下。 -->
<dependencySet>
<useProjectArtifact>true</useProjectArtifact>
<outputDirectory>libs</outputDirectory>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
</assembly>

View File

@ -0,0 +1,5 @@
@echo off
setLocal enableDelayedExpansion
set cp=.
FOR %%i IN ("%~dp0libs\*.jar") DO set cp=!cp!;%%~fsi
start "bidservice" java -cp %cp% Shell

View File

@ -0,0 +1,10 @@
#!/bin/bash --login
shopt -s expand_aliases
baseDir=$(cd "$(dirname "$0")"; pwd)
cp=.
for file in $baseDir/libs/*.jar
do
cp=$cp:$file
done
java -cp $cp com.goodcoupons.GoodCoupons >>stdout.out 2>&1 &

View File

@ -25,6 +25,7 @@ import cn.pluss.platform.ryx.pay.RyxPayService;
import cn.pluss.platform.sxf.pay.SxfPayService; import cn.pluss.platform.sxf.pay.SxfPayService;
import cn.pluss.platform.user.impl.GeneralPushUtil; import cn.pluss.platform.user.impl.GeneralPushUtil;
import cn.pluss.platform.userApp.UserAppService; import cn.pluss.platform.userApp.UserAppService;
import cn.pluss.platform.util.IpUtils;
import cn.pluss.platform.util.StringUtil; import cn.pluss.platform.util.StringUtil;
import cn.pluss.platform.util.TokenUtil; import cn.pluss.platform.util.TokenUtil;
import cn.pluss.platform.vo.MemberScanVO; import cn.pluss.platform.vo.MemberScanVO;
@ -46,6 +47,7 @@ import org.springframework.context.annotation.Lazy;
import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid; import javax.validation.Valid;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
@ -417,7 +419,7 @@ public class MerchantOrderController {
@ApiOperation(tags = {"页面-收款"}, value = "扫码支付", notes = "扫码支付", httpMethod = "POST") @ApiOperation(tags = {"页面-收款"}, value = "扫码支付", notes = "扫码支付", httpMethod = "POST")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "MerchantOrderVo", value = "扫码支付需要传递的参数实例", paramType = "body", dataType = "MerchantOrderVo", required = true)}) @ApiImplicitParam(name = "MerchantOrderVo", value = "扫码支付需要传递的参数实例", paramType = "body", dataType = "MerchantOrderVo", required = true)})
public Result<Object> scanPay(@RequestBody MerChantOrderDTO merchantOrderDTO) { public Result<Object> scanPay(HttpServletRequest request, @RequestBody MerChantOrderDTO merchantOrderDTO) {
UserApp tokenUa = userAppService.queryUserAppByToken(); UserApp tokenUa = userAppService.queryUserAppByToken();
merchantOrderDTO.setMerchantCode(tokenUa.getMerchantCode()); merchantOrderDTO.setMerchantCode(tokenUa.getMerchantCode());
//校验金额 //校验金额
@ -425,7 +427,7 @@ public class MerchantOrderController {
MsgException.throwException("金额异常"); MsgException.throwException("金额异常");
} }
try { try {
return merchantOrderService.toActivePay(merchantOrderDTO); return merchantOrderService.toActivePay(merchantOrderDTO, IpUtils.getIpAddr(request));
} catch (Exception e){ } catch (Exception e){
e.printStackTrace(); e.printStackTrace();
return ResultGenerator.genFailResult(e.getMessage()); return ResultGenerator.genFailResult(e.getMessage());
@ -437,7 +439,7 @@ public class MerchantOrderController {
* @return * @return
*/ */
@PostMapping("/posScanPay") @PostMapping("/posScanPay")
public Result<Object> posScanPay(@RequestBody MerChantOrderDTO merchantOrderDTO) { public Result<Object> posScanPay(HttpServletRequest request,@RequestBody MerChantOrderDTO merchantOrderDTO) {
//首先验签 //首先验签
verify(merchantOrderDTO.getTimestamp(), merchantOrderDTO.getRequestId(), merchantOrderDTO.getAppId(), merchantOrderDTO.getToken()); verify(merchantOrderDTO.getTimestamp(), merchantOrderDTO.getRequestId(), merchantOrderDTO.getAppId(), merchantOrderDTO.getToken());
//通过后查询商户信息 //通过后查询商户信息
@ -451,7 +453,7 @@ public class MerchantOrderController {
} }
//进行支付操作 //进行支付操作
try { try {
Result<Object> activePay = merchantOrderService.toActivePay(merchantOrderDTO); Result<Object> activePay = merchantOrderService.toActivePay(merchantOrderDTO,IpUtils.getIpAddr(request));
String result = activePay.toString(); String result = activePay.toString();
JSONObject jsonData = JSONObject.parseObject(result); JSONObject jsonData = JSONObject.parseObject(result);
Object orderNumber = jsonData.getJSONObject("data").get("orderNumber"); Object orderNumber = jsonData.getJSONObject("data").get("orderNumber");

View File

@ -3,6 +3,7 @@ package cn.pluss.platform.controller.merchant.callback;
import cn.hutool.crypto.symmetric.DES; import cn.hutool.crypto.symmetric.DES;
import cn.pluss.platform.channel.MerchantAuditService; import cn.pluss.platform.channel.MerchantAuditService;
import cn.pluss.platform.channel.ys.YSAuditServiceV3; import cn.pluss.platform.channel.ys.YSAuditServiceV3;
import cn.pluss.platform.entity.MerchantChannelStatus;
import cn.pluss.platform.entity.RyxAccessModel; import cn.pluss.platform.entity.RyxAccessModel;
import cn.pluss.platform.klk.service.impl.LaKalaInterfaceImpl; import cn.pluss.platform.klk.service.impl.LaKalaInterfaceImpl;
import cn.pluss.platform.ryx.RyxService; import cn.pluss.platform.ryx.RyxService;
@ -151,4 +152,12 @@ public class AuditCallbackController {
public String lklCallBack(@RequestBody Map<String, Object> map) throws Exception { public String lklCallBack(@RequestBody Map<String, Object> map) throws Exception {
return lklMerAuditService.merchantAuditCallback(map); return lklMerAuditService.merchantAuditCallback(map);
} }
@GetMapping("queryMerchantChannelStatus")
public MerchantChannelStatus queryMerchantChannelStatus(String customerNo, String externalCustomerNo ) throws Exception {
return lklMerAuditService.queryMerchantChannelStatus(customerNo, externalCustomerNo);
}
} }

View File

@ -611,12 +611,23 @@ public class DateUtils {
return Math.abs(hours); return Math.abs(hours);
} }
private final static SimpleDateFormat sdfTimes = new SimpleDateFormat("yyyyMMddHHmmss"); private final static SimpleDateFormat sdfTimes = new SimpleDateFormat("yyyyMMddHHmmss");
private final static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
public static String getSdfTimes() { public static String getSdfTimes() {
return sdfTimes.format(new Date()); return sdfTimes.format(new Date());
} }
public static Date convertDate(String date) {
try {
return sdf.parse(date);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
public static void main(String[] args) throws ParseException { public static void main(String[] args) throws ParseException {
System.out.println(convertDate("20230603163342"));
//List<String> last6Months = getLast6Months(); //List<String> last6Months = getLast6Months();
// List<String> last6Months = new ArrayList<>(); // List<String> last6Months = new ArrayList<>();
// last6Months.add("2019-11"); // last6Months.add("2019-11");

View File

@ -0,0 +1,23 @@
package cn.pluss.platform.util;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;
import lombok.extern.slf4j.Slf4j;
/**
* @author Exrickx
*/
@Slf4j
public class SnowFlakeUtil {
/**
* 派号器workid0~31
* 机房datacenterid0~31
*/
private static Snowflake snowflake = IdUtil.createSnowflake(1, 1);
public static Long nextId() {
return snowflake.nextId();
}
}

View File

@ -162,7 +162,7 @@ express:
USERID: 1778214 USERID: 1778214
APIKEY: 63e75d64-e8fd-4dcc-93fa-17dc710cdf04 APIKEY: 63e75d64-e8fd-4dcc-93fa-17dc710cdf04
lkl: lkl:
privateKey: MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAK870Q31bo4bvLvZVRZmKWLibwOUP5Myh+AiX3o49f19EFLshyDegirGZTbTEVuKzAnZwJTojWBsTsYMzXgKKEtB3brFblP/xOYcJpUUXLVv0BYc0ruxbdo13YorU8jeHiBLfw0PyOq92v/xhlII0XYo6g57cXXsWpV5wF2r7VVlAgMBAAECgYAFDkSWUq30DgB7KlE7pQqYTpslrx8fHUFGqgc3ggbgNOhbKXWD8ReFVMBdKBLN9tUIiw6fh+QdqOekQYCjcCZAarcZ5c3VyKqmM6NJe4KZ7jQxtIhwa2UDYPW7yRyqu8CqktNDTCd2R/RBVcwd4wvhjO9ZJZF8s3qbuncicUzjgQJBANT8TCGQLU3UOlfLhI5epnuspSCh9JgO3TR3xtYg1Km29PJ8Wy6ZtCznf+odr/RM3MKFEd84/Mz/wIic44bo50ECQQDSn69ej8smC8/azzaBVSrZCyaxY/vyQJ+5sXsCo94aFU3w5SnHW4Rb8Ok+EVOlCHqCxbwElpPvLof8PI8vGqklAkAdtqEMYafgXsZQ70Sr9Ap34Isc9VtBR3mW00r7HpNspeigV7cE1k6roRRYXhHpHDwEKzpmEPY7x0ZeCL05Wg7BAkBoFSVSc3iOapPiqzdiHjY4X3xVePVON4U2/G+vVE8zUIfdnUFSFPWJgbmhRGqzSUdRTGmnUsn0DmiAy2RugJxJAkBGCmZzkXmCA844EjwdDllJFY0hhjNguqUJXnm90v245Fyx86ox0rFOMS0WoZY7/8r/AQx2VUsrAKDyxajtUbR2 privateKey: MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAIcHuPuAbeKgueevtuy4RdMCH/xhLFKniVAhgZb2BfQiSDP0moBF2DiISdTq2A2KvEDol2DQBaAslDFAERkyTDIrZl9iB6xiGUmS/pZULy/k6Q6uED01JDeJLomxh6Cxk7QYlJO0tBpM4Xxahs9h7k0j55ZTV9HPZnLGVaUqyEF5AgMBAAECgYAmugRHvXHGiapH1JF2GvOLrRRXYddAbWRoYvOzxCO4/QwQOpsFJwL4U745HpGQcLXFN/ASiBbU9XQbG/DLdS182qAjvdZVJOA2e3H3LhpY3D8ec3webO+0nGk6e4oWGG1efJLM88Nb0FtQiQ0E6z17Paw5AGvxMVBPbL5SoQfq8QJBANHQmvFkAWlBL2XTLPUXaj+NAJzolE90ctAquxfDcTtfEXv0JitC5bwTg87uNl7n4PUTmtMDIkse+D5vQ2CIF78CQQCkwOIMzedKtWhOEbdGxiz1Y/jkuA8yF7HREeC7X2Av0z2Gi3yltoJd0s6zLn+6zowQp1O/5U6ifrYCIObWlTTHAkA0WOZ/eWL8vr2zmvdpgtkIWAaiH0j5deU7WJ3rNODoXjS/h0+KlZs5zGijVT2Nei7fFnAXW33P3j8zXJEj4XCDAkAcrG0rKVLNz9C9dZveN3NvqdyRge8zGqiZ6HCia7ED4dHdbr1c4ezCg4Px72/PhU8fPt/2j+Qlp8PpjuxeAE3VAkBqUiVV9XZptFEXa/77rgHP3SWrC3TcrrS5jtNTGfA4VISV95YXnZzWjYfpgs2WoxdAXjsrM5TB7L3V4um4o6Dp
appid: OP00000462 #接入方唯一编号 appid: OP00000462 #接入方唯一编号
mchSerialNo: 00dfba8194c41b84cf #证书序列号 mchSerialNo: 00dfba8194c41b84cf #证书序列号
merchantNo: 8221210594300JY #商户号 merchantNo: 8221210594300JY #商户号
@ -173,7 +173,7 @@ lkl:
certificatePath: D:\\project\\chaozhanggui\\pluss-common-bundle\\src\\main\\resources\\lakalaConf\\OP00000003_cert.cer certificatePath: D:\\project\\chaozhanggui\\pluss-common-bundle\\src\\main\\resources\\lakalaConf\\OP00000003_cert.cer
returncatePath: D:\\project\\chaozhanggui\\pluss-common-bundle\\src\\main\\resources\\lakalaConf\\lkl-apigw-v2.cer returncatePath: D:\\project\\chaozhanggui\\pluss-common-bundle\\src\\main\\resources\\lakalaConf\\lkl-apigw-v2.cer
callBackUrl: https://p40312246f.goho.co/api/auditCallback/tradeCallBack callBackUrl: https://p40312246f.goho.co/api/auditCallback/tradeCallBack
pubKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvO9EN9W6OG7y72VUWZili4m8DlD+TMofgIl96OPX9fRBS7Icg3oIqxmU20xFbiswJ2cCU6I1gbE7GDM14CihLQd26xW5T/8TmHCaVFFy1b9AWHNK7sW3aNd2KK1PI3h4gS38ND8jqvdr/8YZSCNF2KOoOe3F17FqVecBdq+1VZQIDAQAB pubKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCHB7j7gG3ioLnnr7bsuEXTAh/8YSxSp4lQIYGW9gX0Ikgz9JqARdg4iEnU6tgNirxA6Jdg0AWgLJQxQBEZMkwyK2ZfYgesYhlJkv6WVC8v5OkOrhA9NSQ3iS6JsYegsZO0GJSTtLQaTOF8WobPYe5NI+eWU1fRz2ZyxlWlKshBeQIDAQAB

View File

@ -139,7 +139,7 @@ public class AliScanCodeDeviceServiceImpl implements AliDeviceService {
dto.setDeviceNo(entity.getCode()); dto.setDeviceNo(entity.getCode());
dto.setRemark(entity.getRemark()); dto.setRemark(entity.getRemark());
try { try {
Result<Object> mapResult = merchantOrderService.toActivePay(dto); Result<Object> mapResult = merchantOrderService.toActivePay(dto,null);
Object data = mapResult.getData(); Object data = mapResult.getData();
if (ResultCode.TRANSUNKNOW.code() == mapResult.getCode()) { if (ResultCode.TRANSUNKNOW.code() == mapResult.getCode()) {
return RespDeviceEntity.await(mapResult.getMessage(),((Map)data).get("orderNumber")); return RespDeviceEntity.await(mapResult.getMessage(),((Map)data).get("orderNumber"));

View File

@ -19,11 +19,14 @@ public class LakalaConfig {
private String apiUrl; private String apiUrl;
private String privateKeyPath; private String privateKeyPath;
private String certificatePath; private String certificatePath;
private String returncatePath;
private String callBackUrl;
private String pubKey; private String pubKey;
@Bean @Bean
public void init(){ public void init(){
System.out.println("qqqqqqq"); System.out.println("qqqqqqq");

View File

@ -1,5 +1,6 @@
package cn.pluss.platform.klk.controller; package cn.pluss.platform.klk.controller;
import cn.hutool.json.JSONUtil;
import cn.pluss.platform.klk.service.impl.LaKalaInterfaceImpl; import cn.pluss.platform.klk.service.impl.LaKalaInterfaceImpl;
import cn.pluss.platform.klk.vo.TuoKeVo; import cn.pluss.platform.klk.vo.TuoKeVo;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -42,4 +43,10 @@ public class LaKaLaController {
public void callBackToke(@RequestBody Map<String,Object> map){ public void callBackToke(@RequestBody Map<String,Object> map){
laKalaInterface.tuoKeCallBack(map); laKalaInterface.tuoKeCallBack(map);
} }
@RequestMapping("/tradeCallBack")
public void tradeCallBack(@RequestBody Map<String,Object> map){
System.out.println("拉卡拉交易回调:"+ JSONUtil.toJsonStr(map));
}
} }

View File

@ -1,14 +1,25 @@
package cn.pluss.platform.klk.service; package cn.pluss.platform.klk.service;
import cn.hutool.core.util.ObjectUtil;
import cn.pluss.platform.api.ResultCode;
import cn.pluss.platform.dto.MemberScanPayDTO; import cn.pluss.platform.dto.MemberScanPayDTO;
import cn.pluss.platform.dto.MerChantOrderDTO; import cn.pluss.platform.dto.MerChantOrderDTO;
import cn.pluss.platform.entity.*; import cn.pluss.platform.entity.*;
import cn.pluss.platform.exception.MsgException;
import cn.pluss.platform.klk.LakalaConfig;
import cn.pluss.platform.mapper.MerchantBackLklMapper;
import cn.pluss.platform.pay.PayService; import cn.pluss.platform.pay.PayService;
import cn.pluss.platform.util.DateUtils;
import cn.pluss.platform.util.SnowFlakeUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@Service("lkLPayService") @Service("lkLPayService")
@ -16,6 +27,16 @@ import java.util.Map;
public class LkLPayServiceImpl implements PayService { public class LkLPayServiceImpl implements PayService {
@Resource @Resource
LklPayService lklPayService; LklPayService lklPayService;
@Autowired
MerchantBackLklMapper merchantBackLklMapper;
@Autowired
LakalaConfig lakalaConfig;
@Override @Override
public JSONObject tradePay(MerchantOrder order, MerchantChannelStatus channel, MerchantBaseInfo merchant) { public JSONObject tradePay(MerchantOrder order, MerchantChannelStatus channel, MerchantBaseInfo merchant) {
return null; return null;
@ -23,7 +44,93 @@ public class LkLPayServiceImpl implements PayService {
@Override @Override
public JSONObject tradePay(MerChantOrderDTO merchantOrderDTO, MerchantOrder order) { public JSONObject tradePay(MerChantOrderDTO merchantOrderDTO, MerchantOrder order) {
return null;
QueryWrapper<MerchantBackLkl> queryWrapper=new QueryWrapper<>();
queryWrapper.eq("merchant_code",merchantOrderDTO.getMerchantCode());
queryWrapper.eq("channel","5");
queryWrapper.eq("user_no","20000101");
MerchantBackLkl merchantBackLkl=merchantBackLklMapper.selectOne(queryWrapper);
MsgException.checkNull(merchantBackLkl,"进件信息不存在");
JSONObject obj = new JSONObject(6);
String req_time= DateUtils.getSdfTimes();
Long order_amt = new BigDecimal(order.getConsumeFee()).multiply(new BigDecimal(100)).longValue();
String out_trade_no= "LKL".concat(SnowFlakeUtil.nextId().toString());
// String body="{\n" +
// "\t\"req_data\": {\n" +
// "\t\t\"out_trade_no\": \""+out_trade_no+"\",\n" +
// "\t\t\"merchant_no\": \""+lakalaConfig.getMerchantNo()+"\",\n" +
// "\t\t\"term_no\": \""+lakalaConfig.getTermNo()+"\",\n" +
// "\t\t\"auth_code\": \""+merchantOrderDTO.getAuthCode()+"\",\n" +
// "\t\t\"total_amount\": \""+order_amt+"\",\n" +
// "\t\t\"notify_url\": \""+lakalaConfig.getCallBackUrl()+"\",\n" +
// "\t\t\"location_info\": \"{\"request_ip\":\""+order.getIp()+"\"}\"\n" +
// "\t},\n" +
// "\t\"version\": \"3.0\",\n" +
// "\t\"req_time\": \""+req_time+"\"\n" +
// "}";
String body="{\n" +
"\t\"req_data\": {\n" +
"\t\t\"merchant_no\": \""+lakalaConfig.getMerchantNo()+"\",\n" +
"\t\t\"term_no\": \""+lakalaConfig.getTermNo()+"\",\n" +
"\t\t\"out_trade_no\": \""+out_trade_no+"\",\n" +
"\t\t\"total_amount\": \""+order_amt+"\",\n" +
"\t\t\"subject\": \"测试\",\n" +
"\t\t\"acc_busi_fields\": {},\n" +
"\t\t\"notify_url\": \""+lakalaConfig.getCallBackUrl()+"\",\n" +
"\t\t\"location_info\": {\n" +
"\t\t\t\"request_ip\": \""+order.getIp()+"\"\n" +
"\t\t},\n" +
"\t\t\"auth_code\": \""+merchantOrderDTO.getAuthCode()+"\"\n" +
"\t},\n" +
"\t\"out_org_code\": \""+lakalaConfig.getAppid()+"\",\n" +
"\t\"version\": \"3.0\",\n" +
"\t\"req_time\": "+req_time+"\n" +
"}";
String response=lklPayService.req(body,"api/v3/labs/trans/micropay");
if(ObjectUtil.isNotEmpty(response)){
JSONObject object= JSON.parseObject(response);
if(object.containsKey("code")&&"BBS10000".equals(object.get("code"))){
obj.put("code",ResultCode.TRANSUNKNOW.code());
obj.put("msg","用户支付中");
obj.put("channelOrderNo",object.getJSONObject("resp_data").get("trade_no"));
obj.put("transNo",object.getJSONObject("resp_data").get("log_no"));
obj.put("payStatus","1");
return obj;
}else if(object.containsKey("code")&&"BBS00000".equals(object.get("code"))){
obj.put("code",ResultCode.SUCCESS.code());
obj.put("msg","成功");
obj.put("channelOrderNo",object.getJSONObject("resp_data").get("trade_no"));
obj.put("transNo",object.getJSONObject("resp_data").get("log_no"));
obj.put("payStatus","1");
obj.put("payTime",DateUtils.convertDate(object.getJSONObject("resp_data").getString("trade_time")));
return obj;
}else {
obj.put("code",ResultCode.FAIL.code());
obj.put("msg",object.get("msg"));
return obj;
}
}
obj.put("code",ResultCode.FAIL.code());
obj.put("msg","失败");
return obj;
} }
@Override @Override
@ -54,14 +161,14 @@ public class LkLPayServiceImpl implements PayService {
@Override @Override
public Map<String, Object> getUnionInfo(String userAuthCode, String paymentApp, String merchantId) throws Exception { public Map<String, Object> getUnionInfo(String userAuthCode, String paymentApp, String merchantId) throws Exception {
Map<String, Object> result = new HashMap<>(); Map<String, Object> result = new HashMap<>();
JSONObject reqData = new JSONObject(2); // JSONObject reqData = new JSONObject(2);
Map<String, Object> stringObjectMap=lklPayService.authUserId(userAuthCode, paymentApp); // Map<String, Object> stringObjectMap=lklPayService.authUserId(userAuthCode, paymentApp);
reqData.put("data",stringObjectMap.get("userId")); // reqData.put("data",stringObjectMap.get("userId"));
reqData.put("userAuthCode",userAuthCode); // reqData.put("userAuthCode",userAuthCode);
reqData.put("appUpIdentifier",paymentApp); // reqData.put("appUpIdentifier",paymentApp);
result.put("data",reqData); // result.put("data",reqData);
result.put("code","1"); // result.put("code","1");
result.put("msg","获取成功"); // result.put("msg","获取成功");
return result; return result;
} }

View File

@ -1,12 +1,21 @@
package cn.pluss.platform.klk.service; package cn.pluss.platform.klk.service;
import cn.hutool.core.util.ObjectUtil;
import cn.pluss.platform.api.ResultCode;
import cn.pluss.platform.dto.MerChantOrderDTO;
import cn.pluss.platform.entity.MerchantBackLkl;
import cn.pluss.platform.entity.MerchantBaseInfo; import cn.pluss.platform.entity.MerchantBaseInfo;
import cn.pluss.platform.entity.MerchantChannelStatus; import cn.pluss.platform.entity.MerchantChannelStatus;
import cn.pluss.platform.entity.MerchantOrder; import cn.pluss.platform.entity.MerchantOrder;
import cn.pluss.platform.exception.MsgException;
import cn.pluss.platform.klk.LakalaConfig; import cn.pluss.platform.klk.LakalaConfig;
import cn.pluss.platform.mapper.MerchantBackLklMapper;
import cn.pluss.platform.util.DateUtils; import cn.pluss.platform.util.DateUtils;
import cn.pluss.platform.util.SnowFlakeUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.Base64;
@ -28,6 +37,7 @@ import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager; import javax.net.ssl.X509TrustManager;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.io.*; import java.io.*;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.security.*; import java.security.*;
import java.security.cert.*; import java.security.cert.*;
@ -35,6 +45,7 @@ import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.PKCS8EncodedKeySpec;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
@Service @Service
@ -57,35 +68,23 @@ public class LklPayService {
private static final String SYMBOLS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; private static final String SYMBOLS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
private static final SecureRandom RANDOM = new SecureRandom(); private static final SecureRandom RANDOM = new SecureRandom();
private String appId = "OP00000354";
// private String appId="OP00000657";
private String mchSerialNo = "00dfba8194c41b84cf";
private String merchantNo = "8221210594300JY";
private String termNo = "A0073841";
// private String privateKeyPath="classpath:lakalaConf/OP00000003_private_key.pem";
private String privateKeyPath = "C:\\Users\\Administrator\\Desktop\\dr\\OP00000003_private_key.pem";
// private String cerPath="C:\\Users\\Administrator\\Desktop\\dr\\lkl-apigw-v1.cer";
private String cerPath = "C:\\Users\\Administrator\\Desktop\\dr\\OP00000003_cert.cer";
private String apiUrl = "https://test.wsmsd.cn/sit";
String apiPath = "/api/v2/saas/query/wx_openid_query";
// private String apiUrl="https://s2.lakala.com";
@Autowired @Autowired
LakalaConfig lakalaConfig; LakalaConfig lakalaConfig;
@Test
public void test1() {
LaKaLaVO laVO = new LaKaLaVO();
createOrder(laVO, "127.0.0.1");
}
@Autowired
MerchantBackLklMapper merchantBackLklMapper;
public JSONObject tradePay(MerchantOrder order, MerchantChannelStatus channel, MerchantBaseInfo merchant){ public JSONObject tradePay(MerchantOrder order, MerchantChannelStatus channel, MerchantBaseInfo merchant){
String req_time= DateUtils.getSdfTimes(); String req_time= DateUtils.getSdfTimes();
String body="{\n" + String body="{\n" +
" \"req_time\": \""+req_time+"\",\n" + " \"req_time\": \""+req_time+"\",\n" +
" \"version\": \"3.0\",\n" + " \"version\": \"3.0\",\n" +
@ -115,180 +114,80 @@ public class LklPayService {
public Map<String,Object> tradePay(String amount,MerchantChannelStatus channel,String authCode,String ip,String paymentApp){
QueryWrapper<MerchantBackLkl> queryWrapper=new QueryWrapper<>();
queryWrapper.eq("merchant_code",channel.getMerchantCode());
queryWrapper.eq("merchant_id",channel.getMerchantId());
queryWrapper.eq("channel","5");
queryWrapper.eq("user_no","22241007");
public String createOrder(LaKaLaVO laVO, String ip) { MerchantBackLkl merchantBackLkl=merchantBackLklMapper.selectOne(queryWrapper);
//public String createOrder(String body,String apiPath,String ip) { MsgException.checkNull(merchantBackLkl,"进件信息不存在");
// String apiPath = "/api/v2/mms/openApi/addMer";
// String apiPath = "/api/v3/labs/trans/preorder";
// String apiPath = "/api/v3/labs/relation/revoked";
// String apiPath = "/api/v2/mms/openApi/addMer";
//ordCode存在异议
// String body ="{ \n" +
// " \"reqData\":{ \n" +
// " \"version\":\"1.0\", \n" +
// " \"orderNo\":\"2021031215011012345678\", \n" +
// " \"posType\":\"SUPER_POS\", \n" +
// " \"orgCode\":\"1\", \n" +
// " \"merRegName\":\"开放平台商户进件注册名称\", \n" +
// " \"merBizName\":\"开放平台商户进件经营名称\", \n" +
// " \"merRegDistCode\":\"290012\", \n" +
// " \"merRegAddr\":\"五星路102号\", \n" +
// " \"mccCode\":\"7011\", \n" +
// " \"merBusiContent\":\"640\", \n" +
// " \"larName\":\"张三丰\", \n" +
// " \"larIdType\":\"01\", \n" +
// " \"larIdcard\":\"33088119690117459X\", \n" +
// " \"larIdcardExpDt\":\"2051-01-10\", \n" +
// " \"merContactMobile\":\"15878559969\", \n" +
// " \"merContactName\":\"张三丰\", \n" +
// " \"settlePeriod\":\"T+1\", \n" +
// " \"openningBankCode\":\"102100000030\", \n" +
// " \"openningBankName\":\"中国工商银行股份有限公司北京市分行营业部\", \n" +
// " \"clearingBankCode\":\"102100099996\", \n" +
// " \"acctNo\":\"6212260200102400000\", \n" +
// " \"acctName\":\"仲涛飘\", \n" +
// " \"acctTypeCode\":\"58\", \n" +
// " \"acctIdcard\":\"33088119690117459X\", \n" +
// " \"devSerialNo\":\"yp13293921932131\", \n" +
// " \"devTypeName\":\"V8\", \n" +
// " \"termVer\":\"1.0\", \n" +
// " \"salesStaff\":\"销售3356\", \n" +
// " \"retUrl\":\"http://10.177.93.135:8082/notify\", \n" +
// " \"feeData\":[\n" +
// " { \n" +
// " \"feeRateTypeCode\":\"300\", \n" +
// " \"feeRatePct\":\"0.38\", \n" +
// " \"feeUpperAmtPcnt\":\"20\", \n" +
// " \"feeLowerAmtPcnt\":\"10\"\n" +
// " },\n" +
// " { \n" +
// " \"feeRateTypeCode\":\"301\", \n" +
// " \"feeRatePct\":\"0.58\"\n" +
// " },\n" +
// " { \n" +
// " \"feeRateTypeCode\":\"302\", \n" +
// " \"feeRatePct\":\"0.48\"\n" +
// " },\n" +
// " { \n" +
// " \"feeRateTypeCode\":\"303\", \n" +
// " \"feeRatePct\":\"0.48\"\n" +
// " }\n" +
// " ], \n" +
// " \"fileData\":[\n" +
// " { \n" +
// " \"attType\":\"ID_CARD_FRONT\", \n" +
// " \"attFileId\":\"G1/M00/00/61/CrFdEl3IyceAVVd8AAA0ADuZsA0911.jpg\"\n" +
// " }\n" +
// " ]\n" +
// " }, \n" +
// " \"ver\":\"1.0.0\", \n" +
// " \"timestamp\":\"1541589957000\", \n" +
// " \"reqId\":\"baff59de4694438ca9089862253517a5\"\n" +
// "}";
Integer type = null;
String subAppid = "";
String subOpenid = "";
String body = "";
String orderNumber = "";
String consumeFee = "";
HttpServletRequest request = null;
body = "{ \n" + String req_time= DateUtils.getSdfTimes();
" \"ver\": \"1.0.0\",\n" +
" \"timestamp\": \"1541589957000\",\n" +
" \"reqId\": \"ca9089862253517a5\",\n" + Long order_amt = new BigDecimal(amount).multiply(new BigDecimal(100)).longValue();
" \"reqData\": {\n" + String out_trade_no= "LKL".concat(SnowFlakeUtil.nextId().toString());
" \"mercId\": \"" + merchantNo + "\",\n" +
" \"termNo\": \"" + termNo + "\",\n" +
" \"authCode\": \"136519690623734145\",\n" + String body="{\n" +
" \"tradeCode\":\"030304\"\n" + "\t\"req_data\": {\n" +
" }\n" + "\t\t\"out_trade_no\": \""+out_trade_no+"\",\n" +
"\t\t\"merchant_no\": \""+lakalaConfig.getMerchantNo()+"\",\n" +
"\t\t\"term_no\": \""+lakalaConfig.getTermNo()+"\",\n" +
"\t\t\"auth_code\": \""+authCode+"\",\n" +
"\t\t\"total_amount\": \""+order_amt+"\",\n" +
"\t\t\"notify_url\": \""+lakalaConfig.getCallBackUrl()+"\",\n" +
"\t\t\"location_info\": \"{\\\"request_ip\\\":\\\""+ip+"\\\",\\\"base_station\\\":\\\"陕西省西安市未央区\\\",\\\"location\\\":\\\"34.34727,108.94647\\\"}\"\n" +
"\t},\n" +
"\t\"version\": \"3.0\",\n" +
"\t\"req_time\": \""+req_time+"\"\n" +
"}"; "}";
// if (type==51||type==71){ String response=req(body,"api/v3/labs/trans/micropay");
// if(ObjectUtil.isNotEmpty(response)){
// body="{\n" + JSONObject object= JSON.parseObject(response);
// " \"out_org_code\":\""+appId+"\",\n" + if(object.containsKey("code")&&"BBS10000".equals(object.get("code"))){
// " \"req_data\":{\n" + Map<String,Object> result = new HashMap<>(2);
// " \"acc_busi_fields\":{\n" + result.put("data", object.get("resp_data"));
// " \"detail\":\"{\\\"goods_detail\\\":[{\\\\\\\"goods_id\\\\\\\":\\\\\\\"100734033\\\\\\\",\\\\\\\"price\\\\\\\":\\\\\\\"50\\\\\\\",\\\\\\\"quantity\\\\\\\":\\\\\\\"1\\\\\\\"}]}\",\n" + result.put("code", "1");
// " \"goods_tag\":\"ceshi\",\n" + result.put("msg", "获取成功");
// " \"sub_appid\":\""+subAppid+"\",\n" + return result;
// " \"user_id\":\""+subOpenid+"\"\n" +
// " },\n" + }else {
// " \"account_type\":\"WECHAT\",\n" + JSONObject reqData = new JSONObject(2);
// " \"location_info\":{\n" + reqData.put("userAuthCode", authCode);
// " \"request_ip\":\""+IpUtils.getIpAddr(request)+"\"\n" + reqData.put("paymentApp", paymentApp);
// " },\n" + reqData.put("code", ResultCode.FAIL.code());
// " \"merchant_no\":\""+merchantNo+"\",\n" +
// " \"notify_url\":\"https://testca/notify\",\n" + reqData.put("msg",object.get("msg"));
// " \"out_trade_no\":\""+orderNumber+"\",\n" +
// " \"term_no\":\""+ laVO.getTermNum()+"\",\n" + return reqData;
// " \"total_amount\":\""+consumeFee+"\",\n" + }
// " \"trans_type\":\""+type+"\"\n" + }
// " },\n" + JSONObject reqData = new JSONObject(2);
// " \"req_time\":\""+getNowDate()+"\",\n" + reqData.put("code", ResultCode.FAIL.code());
// " \"version\":\"3.0\"\n" + reqData.put("msg","失败");
// "}"; return reqData;
// }else if (type==41){
// body="{\n" +
// " \"out_org_code\":\""+appId+"\",\n" +
// " \"req_data\":{\n" +
// " \"acc_busi_fields\":{\n" +
// " \"detail\":\"{\\\"goods_detail\\\":[{\\\\\\\"goods_id\\\\\\\":\\\\\\\"100734033\\\\\\\",\\\\\\\"price\\\\\\\":\\\\\\\"50\\\\\\\",\\\\\\\"quantity\\\\\\\":\\\\\\\"1\\\\\\\"}]}\",\n" +
// " \"goods_tag\":\"ceshi\",\n" +
// " \"sub_appid\":\""+subAppid+"\",\n" +
// " \"user_id\":\""+subOpenid+"\"\n" +
// " },\n" +
// " \"account_type\":\"WECHAT\",\n" +
// " \"location_info\":{\n" +
// " \"request_ip\":\""+IpUtils.getIpAddr(request)+"\"\n" +
// " },\n" +
// " \"merchant_no\":\""+merchantNo+"\",\n" +
// " \"notify_url\":\"https://testca/notify\",\n" +
// " \"out_trade_no\":\""+orderNumber+"\",\n" +
// " \"term_no\":\""+ laVO.getTermNum()+"\",\n" +
// " \"total_amount\":\""+consumeFee+"\",\n" +
// " \"trans_type\":\""+type+"\"\n" +
// " },\n" +
// " \"req_time\":\""+getNowDate()+"\",\n" +
// " \"version\":\"3.0\"\n" +
// "}";
// }
return "";
} }
public Map<String, Object> authUserId(String authCode, String appUpIdentifier) {
String body = "{ \n" +
" \"ver\": \"1.0.0\",\n" +
" \"timestamp\": \"1541589957000\",\n" +
" \"reqId\": \"ca9089862253517a5\",\n" +
" \"reqData\": {\n" +
" \"mercId\": \"" + merchantNo + "\",\n" +
" \"termNo\": \"" + termNo + "\",\n" +
" \"authCode\": \"" + authCode + "\",\n" +
" \"tradeCode\":\"030304\",\n" +
" \"appUpIdentifier\":\"" + appUpIdentifier + "\"\n" +
" }\n" +
"}";
Map map = (Map) JSONArray.parse(req(body));
return (Map<String, Object>) JSONArray.parse(map.get("reqData").toString());
}
public String req(String body) { public String req(String body,String mothod) {
String encode = encode("client_id:client_secret".getBytes()); String encode = encode("client_id:client_secret".getBytes());
System.out.println("base64:" + encode); System.out.println("base64:" + encode);
try { try {
String authorization = getAuthorization(body, appId, mchSerialNo, privateKeyPath); String authorization = getAuthorization(body, lakalaConfig.getAppid(), lakalaConfig.getMchSerialNo(), lakalaConfig.getPrivateKeyPath());
HttpResponse lakalaResponse = post(apiUrl + apiPath, body, authorization, "utf-8"); HttpResponse lakalaResponse = post(lakalaConfig.getApiUrl() + mothod, body, authorization, "utf-8");
if (lakalaResponse.getStatusLine().getStatusCode() != 200) { if (lakalaResponse.getStatusLine().getStatusCode() != 200) {
log.error("请求失败,statusCode:{},message:{}", lakalaResponse.getStatusLine(), IOUtils.toString(lakalaResponse.getEntity().getContent(), "utf-8")); log.error("请求失败,statusCode:{},message:{}", lakalaResponse.getStatusLine(), IOUtils.toString(lakalaResponse.getEntity().getContent(), "utf-8"));
MsgException.throwException(IOUtils.toString(lakalaResponse.getEntity().getContent(), "utf-8"));
} }
String appid = getHeadValue(lakalaResponse, "Lklapi-Appid"); String appid = getHeadValue(lakalaResponse, "Lklapi-Appid");
@ -301,10 +200,7 @@ public class LklPayService {
String source = appid + "\n" + lklapiSerial + "\n" + timestamp + "\n" + nonce + "\n" + responseStr + "\n"; String source = appid + "\n" + lklapiSerial + "\n" + timestamp + "\n" + nonce + "\n" + responseStr + "\n";
log.info("请求的数据为:{}", source); log.info("请求的数据为:{}", source);
X509Certificate lklCertificate = loadCertificate(new FileInputStream(new File(lakalaConfig.getCertificatePath())));
// X509Certificate lklCertificate = loadCertificate(new FileInputStream(new File(privateKeyPath)));
X509Certificate lklCertificate = loadCertificate(new FileInputStream(new File(cerPath)));
boolean verify = verify(lklCertificate, source.getBytes("utf-8"), signature); boolean verify = verify(lklCertificate, source.getBytes("utf-8"), signature);
if (verify) { if (verify) {

View File

@ -1,6 +1,7 @@
package cn.pluss.platform.klk.service.impl; package cn.pluss.platform.klk.service.impl;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import cn.pluss.platform.BankCardService; import cn.pluss.platform.BankCardService;
import cn.pluss.platform.IdCardService; import cn.pluss.platform.IdCardService;
import cn.pluss.platform.MerchantAuditRecordService; import cn.pluss.platform.MerchantAuditRecordService;
@ -9,7 +10,9 @@ import cn.pluss.platform.dto.AccountDTO;
import cn.pluss.platform.entity.*; import cn.pluss.platform.entity.*;
import cn.pluss.platform.exception.MsgException; import cn.pluss.platform.exception.MsgException;
import cn.pluss.platform.klk.LaKaLaUtility; import cn.pluss.platform.klk.LaKaLaUtility;
import cn.pluss.platform.klk.LakalaConfig;
import cn.pluss.platform.klk.service.*; import cn.pluss.platform.klk.service.*;
import cn.pluss.platform.klk.util.RSAUtil;
import cn.pluss.platform.klk.vo.*; import cn.pluss.platform.klk.vo.*;
import cn.pluss.platform.mapper.MerchantChannelStatusMapper; import cn.pluss.platform.mapper.MerchantChannelStatusMapper;
@ -24,6 +27,8 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.Data; import lombok.Data;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.tomcat.util.codec.binary.Base64;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy;
import org.springframework.core.io.ByteArrayResource; import org.springframework.core.io.ByteArrayResource;
@ -44,6 +49,7 @@ import java.net.URISyntaxException;
import java.util.*; import java.util.*;
@Service @Service
@Slf4j
public class LaKalaInterfaceImpl implements LaKalaInterface { public class LaKalaInterfaceImpl implements LaKalaInterface {
@Resource @Resource
LklPayService lklPayService; LklPayService lklPayService;
@ -88,10 +94,15 @@ public class LaKalaInterfaceImpl implements LaKalaInterface {
MccReflectService service; MccReflectService service;
@Resource @Resource
PlussMerchantLklService merchantLklService; PlussMerchantLklService merchantLklService;
@Lazy
@Autowired
LakalaConfig lakalaConfig;
private static final String client_id = "chaozhanggui"; private static final String client_id = "chaozhanggui";
private static final String client_secret = "Y54Gqy6aLpxld3dp"; private static final String client_secret = "Y54Gqy6aLpxld3dp";
private static final String grant_type = "client_credentials"; private static final String grant_type = "client_credentials";
private static final String userNo = "22241007"; public static final String userNo = "22241007";
/** /**
* 商户进件 * 商户进件
*/ */
@ -244,16 +255,23 @@ public class LaKalaInterfaceImpl implements LaKalaInterface {
startSb.append(merchantBaseInfo.getBussAuthStartTime().substring(5,7)); startSb.append(merchantBaseInfo.getBussAuthStartTime().substring(5,7));
startSb.append("-"); startSb.append("-");
startSb.append(merchantBaseInfo.getBussAuthStartTime().substring(8,10)); startSb.append(merchantBaseInfo.getBussAuthStartTime().substring(8,10));
}else {
startSb.append(merchantBaseInfo.getBussAuthStartTime());
} }
if(ObjectUtil.isEmpty(merchantBaseInfo.getBuslicType()) ||"长期".equals(merchantBaseInfo.getBuslicType())){ if(ObjectUtil.isEmpty(merchantBaseInfo.getBuslicType()) ||"长期".equals(merchantBaseInfo.getBuslicType())){
endSb.append("2099-12-31"); endSb.append("2099-12-31");
}else { }else {
endSb.append(merchantBaseInfo.getBussAuthStartTime().substring(0,4)); if(merchantBaseInfo.getBussAuthEndTime().contains("")){
endSb.append("-"); endSb.append(merchantBaseInfo.getBussAuthEndTime().substring(0,4));
endSb.append(merchantBaseInfo.getBussAuthStartTime().substring(5,7)); endSb.append("-");
endSb.append("-"); endSb.append(merchantBaseInfo.getBussAuthEndTime().substring(5,7));
endSb.append(merchantBaseInfo.getBussAuthStartTime().substring(8,10)); endSb.append("-");
endSb.append(merchantBaseInfo.getBussAuthEndTime().substring(8,10));
}else {
endSb.append(merchantBaseInfo.getBussAuthEndTime());
}
} }
@ -317,7 +335,7 @@ public class LaKalaInterfaceImpl implements LaKalaInterface {
MsgException.checkNull(accountV4,"结算信息不存在"); MsgException.checkNull(accountV4,"结算信息不存在");
object1.put("accountNo", accountV4.getBankCard().getBankCardNo()); //结算人银行卡号 object1.put("accountNo", accountV4.getBankCard().getBankCardNo()); //结算人银行卡号
object1.put("accountName", accountV4.getBankCard().getBranchName()); //结算人账户名称 object1.put("accountName", accountV4.getBankCard().getBankHolder()); //结算人账户名称
object1.put("accountType", accountV4.getBankCard().getAccountType().equals("01")?"58":"57"); //结算账户类型 57 对公 58 对私 object1.put("accountType", accountV4.getBankCard().getAccountType().equals("01")?"58":"57"); //结算账户类型 57 对公 58 对私
// object1.put("accountIdType",tuoKeVo.getUserNo()); //结算证件类型 为空同法 // object1.put("accountIdType",tuoKeVo.getUserNo()); //结算证件类型 为空同法
object1.put("accountIdCard", accountV4.getIdcard().getCertNo()); //结算证件号码 object1.put("accountIdCard", accountV4.getIdcard().getCertNo()); //结算证件号码
@ -559,6 +577,46 @@ public class LaKalaInterfaceImpl implements LaKalaInterface {
} }
public Map queryMerchat(String customerNo,String externalCustomerNo){
Map map = getToken();
try{
JSONObject object=new JSONObject();
if(ObjectUtil.isNotEmpty(customerNo)){
object.put("customerNo",customerNo);
}
if(ObjectUtil.isNotEmpty(externalCustomerNo)){
object.put("externalCustomerNo",externalCustomerNo);
}
JSONObject req=new JSONObject();
byte[] privateKey = Base64.decodeBase64(lakalaConfig.getPrivateKey());
byte[] bytes = RSAUtil.encryptByPrivateKey(object.toString().getBytes(), privateKey);
req.put("data", Base64.encodeBase64String(bytes));
log.info("请求参数:加密前:{},加密后:{}",object.toString(),req.toString());
String result = cn.hutool.http.HttpRequest.post("https://tkapi.lakala.com/htkmerchants/open/merchant/info")
.header("Authorization", "bearer " + map.get("access_token")).header("content-type", "application/json")
.body(req.toJSONString()).execute().body();
Map arry = (Map) JSONArray.parse(result);
log.info("返回参数:",JSONUtil.toJsonStr(arry));
return arry;
}catch (Exception e){
e.printStackTrace();
}
return null;
}
// 加密 // 加密
public static String getBase64() { public static String getBase64() {
@ -869,10 +927,26 @@ public class LaKalaInterfaceImpl implements LaKalaInterface {
} }
public static void main(String[] args) { public static void main(String[] args) {
// getToken();
LaKalaInterfaceImpl laKalaInterface = new LaKalaInterfaceImpl(); Map map = getToken();
laKalaInterface.getOrganCode("1"); String result="";
try{
JSONObject object=new JSONObject();
object.put("customerNo","123627687");
result = cn.hutool.http.HttpRequest.post("https://tkapi.lakala.com/htkmerchants/open/merchant/info")
.header("Authorization", "bearer " + map.get("access_token")).header("content-type", "application/json")
.body(object.toString()).execute().body();
Map arry = (Map) JSONArray.parse(result);
System.out.println(JSONUtil.toJsonStr(arry));
}catch (Exception e){
e.printStackTrace();
}
// LaKalaInterfaceImpl laKalaInterface = new LaKalaInterfaceImpl();
// laKalaInterface.getOrganCode("1");
// try { // try {
// laKalaInterface.laKaLaFileUpload1(); // laKalaInterface.laKaLaFileUpload1();
// } catch (IOException e) { // } catch (IOException e) {

View File

@ -0,0 +1,29 @@
package cn.pluss.platform.klk.service.impl;
import cn.pluss.platform.channel.BaseMchChannelRateNewService;
import cn.pluss.platform.entity.MerchantRateNew;
import org.springframework.stereotype.Service;
@Service("lklChangeRateNewService")
public class LklChangeRateNewServiceImpl extends BaseMchChannelRateNewService {
@Override
public void process(String userId, MerchantRateNew merchantRate) {
}
@Override
public String getChannelId() {
return "5";
}
@Override
public MerchantRateNew getDefaultRate() {
MerchantRateNew rateNew = new MerchantRateNew();
rateNew.setChannel(5);
rateNew.setWxRate(38);
rateNew.setAliRate(38);
rateNew.setBankRate(38);
rateNew.setBankRateLarge(38);
return rateNew;
}
}

View File

@ -0,0 +1,101 @@
package cn.pluss.platform.klk.util;
import org.apache.tomcat.util.codec.binary.Base64;
import javax.crypto.Cipher;
import java.io.ByteArrayOutputStream;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
public class RSAUtil {
public static final String KEY_ALGORITHM = "RSA";
private static final String PUBLIC_KEY = "RSAPublicKey";
private static final String PRIVATE_KEY = "RSAPrivateKey";
private static final int KEY_SIZE = 1024;
/**
* RSA
*/
private static final int MAX_ENCRYPT_BLOCK = 117;
/**
* RSA
*/
private static final int MAX_DECRYPT_BLOCK = 128;
public static byte[] encryptByPrivateKey(byte[] data, byte[] key) throws Exception {
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(key);
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.ENCRYPT_MODE, privateKey);
int inputLen = data.length;
ByteArrayOutputStream out = new ByteArrayOutputStream();
int offSet = 0;
byte[] cache;
int i = 0;
//
while (inputLen - offSet > 0) {
if (inputLen - offSet > MAX_ENCRYPT_BLOCK) {
cache = cipher.doFinal(data, offSet, MAX_ENCRYPT_BLOCK);
} else {
cache = cipher.doFinal(data, offSet, inputLen - offSet);
}
out.write(cache, 0, cache.length);
i++;
offSet = i * MAX_ENCRYPT_BLOCK;
}
byte[] encryptedData = out.toByteArray();
out.close();
return encryptedData;
}
public static byte[] decryptByPublicKey(byte[] data, byte[] key) throws Exception {
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(key);
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.DECRYPT_MODE, publicKey);
int inputLen = data.length;
ByteArrayOutputStream out = new ByteArrayOutputStream();
int offSet = 0;
byte[] cache;
int i = 0;
//
while (inputLen - offSet > 0) {
if (inputLen - offSet > MAX_DECRYPT_BLOCK) {
cache = cipher.doFinal(data, offSet, MAX_DECRYPT_BLOCK);
} else {
cache = cipher.doFinal(data, offSet, inputLen - offSet);
}
out.write(cache, 0, cache.length);
i++;
offSet = i * MAX_DECRYPT_BLOCK;
}
byte[] dencryptedData = out.toByteArray();
out.close();
return dencryptedData;
}
public static void main(String[] args) throws Exception {
String req="{\"customerNo\":\"123627687\"}";
String pubKey="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCHB7j7gG3ioLnnr7bsuEXTAh/8YSxSp4lQIYGW9gX0Ikgz9JqARdg4iEnU6tgNirxA6Jdg0AWgLJQxQBEZMkwyK2ZfYgesYhlJkv6WVC8v5OkOrhA9NSQ3iS6JsYegsZO0GJSTtLQaTOF8WobPYe5NI+eWU1fRz2ZyxlWlKshBeQIDAQAB";
String priKey="MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAIcHuPuAbeKgueevtuy4RdMCH/xhLFKniVAhgZb2BfQiSDP0moBF2DiISdTq2A2KvEDol2DQBaAslDFAERkyTDIrZl9iB6xiGUmS/pZULy/k6Q6uED01JDeJLomxh6Cxk7QYlJO0tBpM4Xxahs9h7k0j55ZTV9HPZnLGVaUqyEF5AgMBAAECgYAmugRHvXHGiapH1JF2GvOLrRRXYddAbWRoYvOzxCO4/QwQOpsFJwL4U745HpGQcLXFN/ASiBbU9XQbG/DLdS182qAjvdZVJOA2e3H3LhpY3D8ec3webO+0nGk6e4oWGG1efJLM88Nb0FtQiQ0E6z17Paw5AGvxMVBPbL5SoQfq8QJBANHQmvFkAWlBL2XTLPUXaj+NAJzolE90ctAquxfDcTtfEXv0JitC5bwTg87uNl7n4PUTmtMDIkse+D5vQ2CIF78CQQCkwOIMzedKtWhOEbdGxiz1Y/jkuA8yF7HREeC7X2Av0z2Gi3yltoJd0s6zLn+6zowQp1O/5U6ifrYCIObWlTTHAkA0WOZ/eWL8vr2zmvdpgtkIWAaiH0j5deU7WJ3rNODoXjS/h0+KlZs5zGijVT2Nei7fFnAXW33P3j8zXJEj4XCDAkAcrG0rKVLNz9C9dZveN3NvqdyRge8zGqiZ6HCia7ED4dHdbr1c4ezCg4Px72/PhU8fPt/2j+Qlp8PpjuxeAE3VAkBqUiVV9XZptFEXa/77rgHP3SWrC3TcrrS5jtNTGfA4VISV95YXnZzWjYfpgs2WoxdAXjsrM5TB7L3V4um4o6Dp";
String data="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";
byte[] privateKey = Base64.decodeBase64(priKey);
byte[] publicKey = Base64.decodeBase64(pubKey);
byte[] bytes = encryptByPrivateKey(req.getBytes(), privateKey);
String encrypt = Base64.encodeBase64String(bytes);
byte[] bytes1 = decryptByPublicKey(Base64.decodeBase64(data), publicKey);
// System.out.println("加密后的数据:======"+encrypt);
System.out.println("解密后的数据:====="+new String(bytes1));
}
}

View File

@ -77,6 +77,9 @@ public class MerchantRateNewServiceImpl extends ServiceImpl<MerchantRateNewMappe
@Autowired @Lazy @Autowired @Lazy
private MchChannelRateNewService ysChangeRateNewService; private MchChannelRateNewService ysChangeRateNewService;
@Autowired @Lazy
private MchChannelRateNewService lklChangeRateNewService;
@Autowired @Autowired
private AgentService agentInfoService; private AgentService agentInfoService;
@ -218,6 +221,9 @@ public class MerchantRateNewServiceImpl extends ServiceImpl<MerchantRateNewMappe
case 4: case 4:
result = ysChangeRateService.getDefaultRate(); result = ysChangeRateService.getDefaultRate();
break; break;
case 5:
result=lklChangeRateNewService.getDefaultRate();
break;
default: default:
MsgException.throwException("通道异常!"); MsgException.throwException("通道异常!");
} }

View File

@ -1404,6 +1404,7 @@ public class MerchantServiceImpl implements MerchantService {
unionInfo = ysPayOldService.getUnionInfo(userAuthCode, payMentApp,null); unionInfo = ysPayOldService.getUnionInfo(userAuthCode, payMentApp,null);
}else if(channel.getChannel()==5){ }else if(channel.getChannel()==5){
//拉卡拉的被扫接口 //拉卡拉的被扫接口
lklPayService.tradePay(orderAmt,channel,auth_code,IpUtils.getIpAddr(request),payMentApp);
} }
else { else {
@ -1414,12 +1415,18 @@ public class MerchantServiceImpl implements MerchantService {
if ("1".equals(unionInfo.get("code"))) { if ("1".equals(unionInfo.get("code"))) {
Object userIdData = unionInfo.get("data"); Object userIdData = unionInfo.get("data");
String userId = ""; String userId = "";
if(userIdData instanceof Map){ if(channel.getChannel()==5){
Map<String, String> data = (Map<String, String>) userIdData; userId=userIdData.toString();
userId = data.get("data"); }else {
}else{ if(userIdData instanceof Map){
userId = userIdData.toString(); Map<String, String> data = (Map<String, String>) userIdData;
userId = data.get("data");
}else{
userId = userIdData.toString();
}
} }
view.addObject("userId", userId); view.addObject("userId", userId);
} }
}catch (Exception e){ }catch (Exception e){

View File

@ -261,7 +261,7 @@ public interface MerchantOrderService extends IService<MerchantOrder> {
* @param merchantOrderDTO ignored * @param merchantOrderDTO ignored
* @return ignored * @return ignored
*/ */
Result<Object> toActivePay(MerChantOrderDTO merchantOrderDTO); Result<Object> toActivePay(MerChantOrderDTO merchantOrderDTO,String ip);
/** /**
* 主扫会员卡支付 * 主扫会员卡支付

View File

@ -18,6 +18,8 @@ import cn.pluss.platform.entitiy.SettleTypeEnum;
import cn.pluss.platform.entity.*; import cn.pluss.platform.entity.*;
import cn.pluss.platform.enums.UserRoleEnum; import cn.pluss.platform.enums.UserRoleEnum;
import cn.pluss.platform.exception.MsgException; import cn.pluss.platform.exception.MsgException;
import cn.pluss.platform.klk.service.LkLPayServiceImpl;
import cn.pluss.platform.klk.service.LklPayService;
import cn.pluss.platform.mapper.*; import cn.pluss.platform.mapper.*;
import cn.pluss.platform.memberOrder.MemberOrderService; import cn.pluss.platform.memberOrder.MemberOrderService;
import cn.pluss.platform.merchant.MerchantCashPlaceService; import cn.pluss.platform.merchant.MerchantCashPlaceService;
@ -128,6 +130,9 @@ public class MerchantOrderServiceImpl extends ServiceImpl<MerchantOrderMapper, M
@Setter(onMethod_ = {@Autowired}) @Setter(onMethod_ = {@Autowired})
private RyxPayService ryxPayService; private RyxPayService ryxPayService;
@Setter(onMethod_ = {@Autowired})
private LkLPayServiceImpl lkLPayServiceImpl;
@Setter(onMethod_ = {@Autowired, @Qualifier("ysPayOldService")}) @Setter(onMethod_ = {@Autowired, @Qualifier("ysPayOldService")})
private PayService ysPayOldService; private PayService ysPayOldService;
@ -771,7 +776,7 @@ public class MerchantOrderServiceImpl extends ServiceImpl<MerchantOrderMapper, M
@Override @Override
public Result<Object> toActivePay(MerChantOrderDTO dto) { public Result<Object> toActivePay(MerChantOrderDTO dto,String ip) {
//校验参数 //校验参数
checkActivePayParamsMap(dto); checkActivePayParamsMap(dto);
//组装订单参数 //组装订单参数
@ -787,6 +792,7 @@ public class MerchantOrderServiceImpl extends ServiceImpl<MerchantOrderMapper, M
return ResultGenerator.genSuccessResult("支付成功", result); return ResultGenerator.genSuccessResult("支付成功", result);
}else{ }else{
MerchantOrder order = getMerchantOrder(dto, dto.getConsumeFee(), "1","1"); MerchantOrder order = getMerchantOrder(dto, dto.getConsumeFee(), "1","1");
order.setIp(ip);
return activePay(order, dto); return activePay(order, dto);
} }
} }
@ -899,7 +905,10 @@ public class MerchantOrderServiceImpl extends ServiceImpl<MerchantOrderMapper, M
} else if("4".equals(order.getAisleSwitch())){ } else if("4".equals(order.getAisleSwitch())){
JSONObject object = ysPayOldService.tradePay(dto, order); JSONObject object = ysPayOldService.tradePay(dto, order);
return scanPay(object, order); return scanPay(object, order);
}else{ }else if("5".equals(order.getAisleSwitch())){
JSONObject object=lkLPayServiceImpl.tradePay(dto,order);
return scanPay(object,order);
} else{
throw new MsgException("未知通道!"); throw new MsgException("未知通道!");
} }
} }
@ -1218,7 +1227,7 @@ public class MerchantOrderServiceImpl extends ServiceImpl<MerchantOrderMapper, M
/** /**
* merchantIncome:(添加收益记录). <br/> * merchantIncome:(添加收益记录). <br/>
* *
* *
* @author Administrator * @author Administrator
* @since JDK 1.8 * @since JDK 1.8
*/ */
@ -1417,6 +1426,11 @@ public class MerchantOrderServiceImpl extends ServiceImpl<MerchantOrderMapper, M
merchantOrderDTO.setAisleSwitch("4"); merchantOrderDTO.setAisleSwitch("4");
merchantOrderDTO.setPayTypeCode(Constant.PAY_TYPE_WECHAT); merchantOrderDTO.setPayTypeCode(Constant.PAY_TYPE_WECHAT);
merchantOrderDTO.setPayTypeName(Constant.PAY_TYPE_NAME_WECHAT); merchantOrderDTO.setPayTypeName(Constant.PAY_TYPE_NAME_WECHAT);
}else if (channelStatus.getChannel()==5){
orderPrefix = "LKL_W_";
merchantOrderDTO.setAisleSwitch("5");
merchantOrderDTO.setPayTypeCode(Constant.PAY_TYPE_WECHAT);
merchantOrderDTO.setPayTypeName(Constant.PAY_TYPE_NAME_WECHAT);
} }
break; break;
case "2": case "2":
@ -1436,6 +1450,11 @@ public class MerchantOrderServiceImpl extends ServiceImpl<MerchantOrderMapper, M
merchantOrderDTO.setAisleSwitch("4"); merchantOrderDTO.setAisleSwitch("4");
merchantOrderDTO.setPayTypeCode(Constant.PAY_TYPE_ALIPAY); merchantOrderDTO.setPayTypeCode(Constant.PAY_TYPE_ALIPAY);
merchantOrderDTO.setPayTypeName(Constant.PAY_TYPE_NAME_ALIPAY); merchantOrderDTO.setPayTypeName(Constant.PAY_TYPE_NAME_ALIPAY);
}else if (channelStatus.getChannel()==5){
orderPrefix = "LKL_W_";
merchantOrderDTO.setAisleSwitch("5");
merchantOrderDTO.setPayTypeCode(Constant.PAY_TYPE_WECHAT);
merchantOrderDTO.setPayTypeName(Constant.PAY_TYPE_NAME_WECHAT);
} }
break; break;
case "6": case "6":
@ -1454,6 +1473,11 @@ public class MerchantOrderServiceImpl extends ServiceImpl<MerchantOrderMapper, M
merchantOrderDTO.setAisleSwitch("4"); merchantOrderDTO.setAisleSwitch("4");
merchantOrderDTO.setPayTypeCode(Constant.PAY_TYPE_YSFPAY); merchantOrderDTO.setPayTypeCode(Constant.PAY_TYPE_YSFPAY);
merchantOrderDTO.setPayTypeName(Constant.PAY_TYPE_NAME_YSFPAY); merchantOrderDTO.setPayTypeName(Constant.PAY_TYPE_NAME_YSFPAY);
}else if (channelStatus.getChannel()==5){
orderPrefix = "LKL_W_";
merchantOrderDTO.setAisleSwitch("5");
merchantOrderDTO.setPayTypeCode(Constant.PAY_TYPE_WECHAT);
merchantOrderDTO.setPayTypeName(Constant.PAY_TYPE_NAME_WECHAT);
} }
break; break;
default: default:

View File

@ -66,14 +66,6 @@ public interface MerchantProfitService extends IService<MerchantProfit> {
*/ */
void batchInsert(Vector<MerchantProfit> profitList); void batchInsert(Vector<MerchantProfit> profitList);
/**
* 创建分润V2.0模式
* @date: 2022/1/21 15:14
* @param order:
* @param type
*/
void createOrderProfitV2(MerchantOrder order,String type);
/** /**
* 统计按条件分润信息 * 统计按条件分润信息
* @date: 2022/2/9 19:38 * @date: 2022/2/9 19:38
@ -82,6 +74,14 @@ public interface MerchantProfitService extends IService<MerchantProfit> {
*/ */
Map<String, BigDecimal> getProfitAmtCount(MerchantProfit condition); Map<String, BigDecimal> getProfitAmtCount(MerchantProfit condition);
/**
* 创建分润V2.0模式
* @date: 2022/1/21 15:14
* @param order:
* @param type
*/
void createOrderProfitV2(MerchantOrder order,String type);
/** /**
* 推送收益消息 * 推送收益消息
* @param userApp * @param userApp

View File

@ -1,6 +1,7 @@
package cn.pluss.platform.sxf.audit; package cn.pluss.platform.sxf.audit;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import cn.pluss.platform.entity.MerchantChannelStatus;
import cn.pluss.platform.klk.LaKaLaUtility; import cn.pluss.platform.klk.LaKaLaUtility;
import cn.pluss.platform.klk.LakalaConfig; import cn.pluss.platform.klk.LakalaConfig;
import cn.pluss.platform.task.LklMerAuditHandler; import cn.pluss.platform.task.LklMerAuditHandler;
@ -54,4 +55,16 @@ public class LklMerAuditServiceImpl {
"\t\"msg\": \"失败\"\n" + "\t\"msg\": \"失败\"\n" +
"}"; "}";
} }
public MerchantChannelStatus queryMerchantChannelStatus(String customerNo,String externalCustomerNo){
return lklMerAuditHandler.queryMerchatChannelstatus(customerNo, externalCustomerNo);
}
} }

View File

@ -4,11 +4,16 @@ import cn.hutool.core.util.ObjectUtil;
import cn.pluss.platform.MerchantAuditRecordService; import cn.pluss.platform.MerchantAuditRecordService;
import cn.pluss.platform.entity.*; import cn.pluss.platform.entity.*;
import cn.pluss.platform.exception.MsgException; import cn.pluss.platform.exception.MsgException;
import cn.pluss.platform.klk.LaKaLaUtility;
import cn.pluss.platform.klk.LakalaConfig;
import cn.pluss.platform.klk.service.LklPayService;
import cn.pluss.platform.klk.service.impl.LaKalaInterfaceImpl;
import cn.pluss.platform.mapper.*; import cn.pluss.platform.mapper.*;
import cn.pluss.platform.merchant.MerchantBaseInfoService; import cn.pluss.platform.merchant.MerchantBaseInfoService;
import cn.pluss.platform.merchant.MerchantCashPlaceService; import cn.pluss.platform.merchant.MerchantCashPlaceService;
import cn.pluss.platform.util.IpUtils; import cn.pluss.platform.util.IpUtils;
import cn.pluss.platform.util.LogExceptionUtils; import cn.pluss.platform.util.LogExceptionUtils;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -21,9 +26,11 @@ import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.util.Date; import java.util.Date;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
@Slf4j @Slf4j
@ -63,9 +70,16 @@ public class LklMerAuditHandler{
private final MerchantStoreMapper merchantStoreMapper; private final MerchantStoreMapper merchantStoreMapper;
private final MerchantImageMapper merchantImageMapper; private final MerchantImageMapper merchantImageMapper;
private final LaKalaInterfaceImpl laKalaInterface;
private final RestTemplate restTemplate; private final RestTemplate restTemplate;
@Lazy
@Autowired
private LakalaConfig lakalaConfig;
public void auditHandler(Map<String,Object> map) { public void auditHandler(Map<String,Object> map) {
execute(map); execute(map);
} }
@ -73,6 +87,7 @@ public class LklMerAuditHandler{
public void execute(Map<String,Object> map) { public void execute(Map<String,Object> map) {
if(ObjectUtil.isEmpty(map)||!map.containsKey("status")){ if(ObjectUtil.isEmpty(map)||!map.containsKey("status")){
log.error("回调数据为空"); log.error("回调数据为空");
return; return;
@ -108,6 +123,36 @@ public class LklMerAuditHandler{
public MerchantChannelStatus queryMerchatChannelstatus(String customerNo,String externalCustomerNo ){
Map map= laKalaInterface.queryMerchat(customerNo, externalCustomerNo);
if(ObjectUtil.isEmpty(map)){
return null;
}
if(map.containsKey("code")&&"000000".equals(map.get("code").toString())&&map.containsKey("data")&&ObjectUtil.isNotEmpty(map.get("data"))){
String data = LaKaLaUtility.decrypt(lakalaConfig.getPubKey(),map.get("data").toString());
JSONObject object=JSONObject.parseObject(data);
Map<String,Object> reqMap=new HashMap<>();
reqMap.put("customerNo",object.getJSONObject("customer").getString("customerNo"));
reqMap.put("contractId","query".concat(object.getJSONObject("customer").getString("openTime")));
reqMap.put("userNo",LaKalaInterfaceImpl.userNo);
reqMap.put("externalCustomerNo",object.getJSONObject("customer").getString("externalCustomerNo"));
reqMap.put("termNos",object.getJSONObject("customer").getString("termNo"));
reqMap.put("agencyNo",object.getJSONObject("customer").getString("agencyNo"));
reqMap.put("activeNo",object.getJSONObject("customer").getString("activeNo"));
reqMap.put("coreTermIds",object.getJSONArray("terminalInfo").toString());
return auditCallback(reqMap);
}
return null;
}
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public MerchantChannelStatus auditCallback(Map<String,Object> map) { public MerchantChannelStatus auditCallback(Map<String,Object> map) {
MerchantChannelStatus merchantChannelStatus = new MerchantChannelStatus() MerchantChannelStatus merchantChannelStatus = new MerchantChannelStatus()