添加pos 机退款接口

This commit is contained in:
韩鹏辉 2023-06-13 11:23:44 +08:00
parent 064d32c93c
commit 8e4133d57e
6 changed files with 68 additions and 216 deletions

View File

@ -82,7 +82,6 @@ public class MerchantOrderController {
private final MerchantMenberRechargeService merchantMenberRechargeService; private final MerchantMenberRechargeService merchantMenberRechargeService;
private final SxfPayService sxfPayService; private final SxfPayService sxfPayService;
private final RyxPayService ryxPayService; private final RyxPayService ryxPayService;
private final LklPayService lklPayService;
private final MerchantChannelStatusMapper merchantChannelStatusMapper; private final MerchantChannelStatusMapper merchantChannelStatusMapper;
@Autowired @Autowired
private DeviceStockService deviceStockService; private DeviceStockService deviceStockService;
@ -93,6 +92,11 @@ public class MerchantOrderController {
@Setter(onMethod_ = {@Autowired, @Qualifier("ysPayOldService")}) @Setter(onMethod_ = {@Autowired, @Qualifier("ysPayOldService")})
private PayService ysPayOldService; private PayService ysPayOldService;
@Setter(onMethod_ = {@Autowired, @Qualifier("lkLPayService")})
private PayService lklPayService;
// 微信支付无法确认支付结果状态 // 微信支付无法确认支付结果状态
private String[] wechatPayNotSureResult = new String[]{"SYSTEMERROR", "USERPAYING", "BANKERROR"}; private String[] wechatPayNotSureResult = new String[]{"SYSTEMERROR", "USERPAYING", "BANKERROR"};
@ -846,6 +850,10 @@ public class MerchantOrderController {
case 4: case 4:
result = ysPayOldService.tradeQuery(order,channel.getMerchantId()); result = ysPayOldService.tradeQuery(order,channel.getMerchantId());
break; break;
case 5:
result=lklPayService.tradeQuery(order,channel.getMerchantId());
break;
} }
if(result != null){ if(result != null){
@ -908,7 +916,7 @@ public class MerchantOrderController {
result = ysPayOldService.tradeQuery(order,channel.getMerchantId()); result = ysPayOldService.tradeQuery(order,channel.getMerchantId());
break; break;
case 5: case 5:
//result = lklPayService.tradeQuery(order,channel.getMerchantId()); result = lklPayService.tradeQuery(order,channel.getMerchantId());
} }
if(result != null){ if(result != null){

View File

@ -46,6 +46,9 @@ public class CheckTransOrderStatusJob {
@Setter(onMethod_ = {@Autowired, @Qualifier("ysPayOldService")}) @Setter(onMethod_ = {@Autowired, @Qualifier("ysPayOldService")})
private PayService ysPayOldService; private PayService ysPayOldService;
@Setter(onMethod_ = {@Autowired, @Qualifier("lkLPayService")})
private PayService lklPayService;
/** /**
* 检查待确认订单状态定时任务 5秒执行一次 * 检查待确认订单状态定时任务 5秒执行一次
*/ */
@ -116,6 +119,8 @@ public class CheckTransOrderStatusJob {
//银盛 //银盛
}else if(channel.getChannel() == 4){ }else if(channel.getChannel() == 4){
result = ysPayOldService.tradeQuery(order, channel.getMerchantId()); result = ysPayOldService.tradeQuery(order, channel.getMerchantId());
}else if(channel.getChannel()==5){
result=lklPayService.tradeQuery(order,channel.getMerchantId());
}else { }else {
continue; continue;
} }

View File

@ -22,20 +22,6 @@ public class LaKaLaController {
@Resource @Resource
LklPayService lklPayService; LklPayService lklPayService;
@PostMapping("/lkl")
public void aa(@RequestBody TuoKeVo tuoKeVo){
laKalaInterface.tuoKeAddMer(tuoKeVo);
}
@PostMapping("/jjkl")
public void jjkl(MultipartFile file){
// try {
// laKalaInterface.laKaLaFileUpload();
// } catch (IOException e) {
// throw new RuntimeException(e);
// }
}
@PostMapping("/jjkls") @PostMapping("/jjkls")
public void jjkls(){ public void jjkls(){
laKalaInterface.ff(); laKalaInterface.ff();
@ -45,10 +31,6 @@ public class LaKaLaController {
laKalaInterface.createTuoKeInfo("244"); laKalaInterface.createTuoKeInfo("244");
} }
@PostMapping("/callBackToke")
public void callBackToke(@RequestBody Map<String,Object> map){
laKalaInterface.tuoKeCallBack(map);
}
@RequestMapping("/tradeCallBack") @RequestMapping("/tradeCallBack")

View File

@ -1,23 +0,0 @@
package cn.pluss.platform.klk.service;
import cn.pluss.platform.klk.vo.OrganVo;
import cn.pluss.platform.klk.vo.TuoKeVo;
import java.util.List;
public interface LaKalaInterface {
/**
* 拉卡拉进件
* */
void laKaLaAddMer(LaKaLaVO laVO,String ip);
/**
* 拓客进件
* */
void tuoKeAddMer(TuoKeVo tuoKeVo);
/**
* 获取省市区县
* */
List<OrganVo> getOrganCode(String code);
}

View File

@ -323,7 +323,57 @@ public class LkLPayServiceImpl implements PayService {
@Override @Override
public JSONObject tradeQuery(MerchantOrder order, String mchId) { public JSONObject tradeQuery(MerchantOrder order, String mchId) {
return null;
QueryWrapper<MerchantBaseInfo> baseQueyWrapper = new QueryWrapper<>();
baseQueyWrapper.eq("merchantCode", order.getMerchantCode());
MerchantBaseInfo baseInfo = merchantBaseInfoMapper.selectOne(baseQueyWrapper);
MsgException.checkNull(baseInfo, "商户基本信息错误");
QueryWrapper<MerchantBackLkl> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("merchant_code", order.getMerchantCode());
queryWrapper.eq("channel", "5");
queryWrapper.eq("user_no", LaKalaInterfaceImpl.userNo);
MerchantBackLkl merchantBackLkl = merchantBackLklMapper.selectOne(queryWrapper);
MsgException.checkNull(merchantBackLkl, "进件信息不存在");
String req_time = DateUtils.getSdfTimes();
Long order_amt = changeY2F(order.getConsumeFee());
String body = "{\n" +
"\"req_time\":\"" + req_time + "\",\n" +
"\"version\":\"3.0\",\n" +
"\"out_org_code\":\"" + lakalaConfig.getAppid() + "\",\n" +
"\"req_data\":{\n" +
"\"merchant_no\":\"" + merchantBackLkl.getExternalCustomerNo() + "\",\n" +
"\"term_no\":\"" + merchantBackLkl.getTermNos() + "\",\n" +
"\"out_trade_no\":\"" + order.getOrderNumber() + "\"\n" +
"}\n" +
"}\n";
JSONObject result = new JSONObject();
String response = lklPayService.req(body, "api/v3/labs/query/tradequery");
if (ObjectUtil.isNotEmpty(response)) {
JSONObject object = JSONObject.parseObject(response);
if (object.containsKey("code") && "BBS00000".equals(object.getString("code"))) {
result.put("channelOrderNo", object.get("trade_no"));
result.put("payTime", DateUtils.parse(object.getString("trade_time"), "yyyyMMddHHmmss"));
result.put("transNo", object.get("log_no"));
result.put("code", ResultCode.SUCCESS.code());
result.put("payStatus", "1");
result.put("msg", "查询成功!");
result.put("buyerId", object.get("user_id1"));
return result;
} else {
result.put("code", ResultCode.FAIL.code());
result.put("msg", object.getString("msg"));
return result;
}
}
log.error("==============>【拉卡拉】交易订单查询失败<==================");
result.put("code", ResultCode.FAIL.code());
result.put("msg", "订单查询异常");
return result;
} }
@Override @Override

View File

@ -9,7 +9,6 @@ import cn.pluss.platform.channel.ys.impl.YSAuditServiceV3;
import cn.pluss.platform.dto.AccountDTO; 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.LakalaConfig; 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.util.RSAUtil;
@ -38,7 +37,6 @@ import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap; import org.springframework.util.MultiValueMap;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@ -50,7 +48,7 @@ import java.util.*;
@Service @Service
@Slf4j @Slf4j
public class LaKalaInterfaceImpl implements LaKalaInterface { public class LaKalaInterfaceImpl {
@Resource @Resource
LklPayService lklPayService; LklPayService lklPayService;
@Resource @Resource
@ -151,69 +149,19 @@ public class LaKalaInterfaceImpl implements LaKalaInterface {
/** /**
* 拉卡拉模式进件 * 拉卡拉模式进件
*/ */
@Override
public void laKaLaAddMer(LaKaLaVO laVO, String ip) {
String apiPath = "/api/v2/mms/openApi/addMer";
JSONObject object1 = new JSONObject();
JSONObject object2 = new JSONObject();
object1.put("reqData", object2);
object2.put("version", "1.0"); //接口版本号
object2.put("orderNo", laVO.getOrderNo()); //订单编号便于后续跟踪排查问题及核对报文
object2.put("posType", laVO.getPosType()); //进件POS类型 按接入系统做控制参见 POS类型字典表
object2.put("orgCode", "1"); //机构代码 合作方在拉卡拉的标识请联系业务员
object2.put("merRegName", laVO.getMerRegName()); //商户注册名称
object2.put("merRegDistCode", laVO.getMerRegDistCode()); //地区代码参看地区文档]
object2.put("merRegAddr", laVO.getMerRegAddr()); //商户详细地址
object2.put("mccCode", laVO.getMccCode()); //商户MCC编号
if (null != laVO.getMerBlisName() || null != laVO.getMerBlis()) { //小微商户可不传其它必传,为空则小微商户
object2.put("merBlisName", laVO.getMerBlisName()); //营业执照名称
object2.put("merBlis", laVO.getMerBlis()); //营业执照号
object2.put("merBlisStDt", laVO.getMerBlisStDt()); //营业执照开始日期
object2.put("merBlisExpDt", "1.0"); //营业执照有效期
}
object2.put("merBusiContent", laVO.getMerBusiContent()); //参看经营内容字典表文档
object2.put("larName", laVO.getLarName()); //商户法人姓名
object2.put("larIdType", laVO.getLarIdType()); //支持其他证件类型见参证件类型字典表
object2.put("larIdcard", laVO.getLarIdcard()); //法人身份证号码
object2.put("larIdcardStDt", laVO.getLarIdcardStDt()); //法人身份证开始日期 yyyy-MM-dd
object2.put("larIdcardExpDt", laVO.getLarIdcardExpDt()); //法人身份证有效期 yyyy-MM-dd
object2.put("merContactMobile", laVO.getMerContactMobile()); //商户联系人手机号码
object2.put("merContactName", laVO.getMerContactName()); //商户联系人
object2.put("openningBankCode", laVO.getOpenningBankCode()); //可根据结算卡信息进行查询仅支持对私结算卡查询参见卡BIN信息查询
object2.put("openningBankName", laVO.getOpenningBankName()); //可根据结算卡信息进行查询仅支持对私结算卡查询参见卡BIN信息查询
object2.put("clearingBankCode", laVO.getClearingBankCode()); //可根据结算卡信息进行查询仅支持对私结算卡查询参见卡BIN信息查询
object2.put("acctNo", laVO.getAcctNo()); //结算账户账号
object2.put("acctName", laVO.getAcctName()); //结算账户名称
object2.put("acctTypeCode", laVO.getAcctTypeCode()); //结算账户性质 57对公 58 对私
object2.put("settlePeriod", laVO.getSettlePeriod()); //结算周期 参见结算周期表
object2.put("retUrl", "1.0"); //回调地址url
object2.put("feeData", laVO.getFeeData()); //费率信息集合 参看下方费率信息
// orderService.createOrder(object1.toString(),apiPath,"");
}
/** /**
* 拉卡拉拓客进件 * 拉卡拉拓客进件
* */ * */
public void createTuoKeInfo(String userId) { public void createTuoKeInfo(String userId) {
// UserApp userapp=userAppService.getById(userId); // UserApp userapp=userAppService.getById(userId);
// MsgException.checkNull(userapp,"商户基础信息不完整"); // MsgException.checkNull(userapp,"商户基础信息不完整");
// //
// MsgException.checkBlank(userapp.getEmail(),"商户邮箱不允许为空"); // MsgException.checkBlank(userapp.getEmail(),"商户邮箱不允许为空");
MerchantBaseInfo merchantBaseInfo = mbiService.getMerchantBaseInfoByUserId(userId); MerchantBaseInfo merchantBaseInfo = mbiService.getMerchantBaseInfoByUserId(userId);
IdCard idCard = idCardService.getCertIdCard(userId); //获取法人身份证信息 IdCard idCard = idCardService.getCertIdCard(userId); //获取法人身份证信息
MsgException.checkNull(idCard,"商户基本信息不完整"); MsgException.checkNull(idCard,"商户基本信息不完整");
@ -442,128 +390,11 @@ public class LaKalaInterfaceImpl implements LaKalaInterface {
/** /**
* 参数组装 * 参数组装
* */ * */
@Override
public void tuoKeAddMer(TuoKeVo tuoKeVo) {
JSONObject object1 = new JSONObject();
JSONObject object2 = new JSONObject();
object1.put("userNo", userNo); //合作机构信息 由拓客SAAS提供
object1.put("email", tuoKeVo.getEmail()); //商户邮箱
// object1.put("busiCode", "PAPER_CODE");//业务类型 BPOS:传统POS, ZPOS:电签,ZPOS4G4G电签,SUPER_POS:智能pos,B_WIZARD:蓝精灵,PAPER_CODE:码牌,WECHAT_PAY:专业化扫码,KLYX:云音箱,QRCODE:收款王,MONEY_BOX:收钱宝盒根据业务开放取值
object1.put("busiCode", "PAPER_CODE");//业务类型 BPOS:传统POS, ZPOS:电签,ZPOS4G4G电签,SUPER_POS:智能pos,B_WIZARD:蓝精灵,PAPER_CODE:码牌,WECHAT_PAY:专业化扫码,KLYX:云音箱,QRCODE:收款王,MONEY_BOX:收钱宝盒根据业务开放取值
object1.put("merRegName", tuoKeVo.getMerRegName()); //商户注册名称 不能少于七个中文
object1.put("merType", tuoKeVo.getMerType()); //商户注册类型 TP_MERCHANT:企业 TP_PERSONAL:微个
object1.put("merName", tuoKeVo.getMerName()); //商户名称(经营名称) 不能少于七个中文
object1.put("merAddr", tuoKeVo.getMerAddr()); //去掉省市区后的详细地址
object1.put("provinceCode", tuoKeVo.getProvinceCode()); //省代码 通过地区信息获取地区查询接口获取 对应 code字段
object1.put("cityCode", tuoKeVo.getCityCode()); // 市代码 通过地区信息获取地区查询接口获取 对应 code字段
object1.put("countyCode", tuoKeVo.getCountyCode()); // 区县代码 通过地区信息获取地区查询接口获取 对应 code字段
object1.put("licenseName", tuoKeVo.getLicenseName()); //营业执照名称
object1.put("licenseNo", tuoKeVo.getLicenseNo()); //营业执照号码 微商户可不传 其他必传
object1.put("licenseDtStart", tuoKeVo.getLicenseDtStart()); //营业执照开始时间微商户可不传 其他必传格式yyyy-MM-dd
object1.put("licenseDtEnd", tuoKeVo.getLicenseDtEnd()); //微商户可不传 其他必传格式yyyy-MM-dd
object1.put("latitude", "108.94647"); //经度 进件所在地址经度error
object1.put("longtude", "34.34727"); //纬度 进件所在地址纬度 error
object1.put("source", tuoKeVo.getSource()); //进件来源 APP: app H5: h5
object1.put("businessContent", tuoKeVo.getBusinessContent()); //商户经营内容
object1.put("larName", tuoKeVo.getLarName()); //姓名
object1.put("larIdType", tuoKeVo.getLarIdType()); //证件类型 01 身份证 暂时只支持身份证
object1.put("larIdCard", tuoKeVo.getLarIdCard()); //证件号码
object1.put("larIdCardStart", tuoKeVo.getLarIdCardStart()); //证件开始 格式yyyy-MM-dd
object1.put("larIdCardEnd", tuoKeVo.getLarIdCardEnd()); //证件过期时间 格式yyyy-MM-dd
object1.put("contactMobile", tuoKeVo.getContactMobile()); //商户联系⼿机号码
object1.put("contactName", tuoKeVo.getContactName()); //商户联系姓名
object1.put("openningBankCode", tuoKeVo.getOpenningBankCode()); //结算账户开户 通过银行列表查询接口获取 对应 branchBankNo字段
object1.put("openningBankName", tuoKeVo.getOpenningBankName()); //结算账户开户名称 通过银行列表查询接口获取 对应 branchBankName字段
object1.put("clearingBankCode", tuoKeVo.getClearingBankCode()); //结算账户清算 通过银行列表查询接口获取 对应 clearNo字段
object1.put("settleProvinceCode", tuoKeVo.getSettleProvinceCode()); //结算信息省份名称 通过地区信息获取银行地区查询接口获取 对应 code字段
object1.put("settleProvinceName", tuoKeVo.getSettleProvinceName()); //结算信息省份代码 通过地区信息获取银行地区查询接口获取 对应 name字段
object1.put("settleCityCode", tuoKeVo.getSettleCityCode()); //结算信息城市名称 通过地区信息获取银行地区查询接口获取 对应 code字段
object1.put("settleCityName", tuoKeVo.getSettleCityName()); //结算信息城市代码 通过地区信息获取银行地区查询接口获取 对应 name字段
object1.put("accountNo", tuoKeVo.getAccountNo()); //结算人银行卡号
object1.put("accountName", tuoKeVo.getAccountName()); //结算人账户名称
object1.put("accountType", tuoKeVo.getAccountType()); //结算账户类型 57 对公 58 对私
// object1.put("accountIdType",tuoKeVo.getUserNo()); //结算证件类型 为空同法
object1.put("accountIdCard", tuoKeVo.getAccountIdCard()); //结算证件号码
Set<FeesSetVo> feesSet = new HashSet<>();
FeesSetVo f = new FeesSetVo();
f.setFeeCode(tuoKeVo.getFeeCode());
f.setFeeValue(0.038d);
feesSet.add(f);
object2.put("termNum", tuoKeVo.getTermNum()); //终端数量 1-5 5个终端
object2.put("fees", feesSet); //费率集合
object2.put("mcc", tuoKeVo.getMcc()); //商户MCC编号 通过 商户类别查询查询小类接口获取 对应 code字段
// object2.put("activityId", tuoKeVo.getActivityId()); //归属活动信息 由拓客SAAS分配
object2.put("activityId","37"); //归属活动信息 由拓客SAAS分配
object1.put("bizContent", object2); //业务扩展信息 业务扩展信息
//
// Set<AttchmentsVo> attchmentsVoSet = new HashSet<>();
// AttchmentsVo attchmentsVo = new AttchmentsVo();
// attchmentsVo.setId(tuoKeVo.getId());
// attchmentsVo.setType(tuoKeVo.getType());
// attchmentsVoSet.add(attchmentsVo);
// object1.put("attchments", attchmentsVoSet); //附件信息集合 附件信息
object1.put("attchments", tuoKeVo.getSet()); //附件信息集合 附件信息
object1.put("settleType", tuoKeVo.getSettleType()); //结算类型 D0秒到 D1次日结算
System.out.println("请求报文: " + object1);
/**获取拓客accessToken**/
Map map = getToken();
String result="";
try{
result = cn.hutool.http.HttpRequest.post(tuoKeMerchat)
.header("Authorization", "bearer " + map.get("access_token")).header("content-type", "application/json")
.body(object1.toString()).execute().body();
Map arry = (Map) JSONArray.parse(result);
if (String.valueOf(arry.get("status")).equals("WAIT_AUDI")){
PlussMerchantLklEntity plussMerchantLklEntity =new PlussMerchantLklEntity();
plussMerchantLklEntity.setMerchantId(tuoKeVo.getMerchantCode());
plussMerchantLklEntity.setMerchantlkl(String.valueOf(arry.get("merchantNo")));
plussMerchantLklEntity.setType("0");
merchantLklService.save(plussMerchantLklEntity);
}else {
}
}catch (Exception e){
Map arry = (Map) JSONArray.parse(result);
new MsgException(String.valueOf(arry.get("message")));
}
}
@Resource @Resource
YSAuditServiceV3 auditServiceV3; YSAuditServiceV3 auditServiceV3;
/** /**
* 进件回调 * 进件回调
* */ * */
public String tuoKeCallBack(Map<String,Object> map){
// String data = LaKaLaUtility.decrypt(map.get("data").toString());
// Map arryMap = (Map) JSONArray.parse(data);
// System.out.println(arryMap);
// if (String.valueOf(arryMap.get("status")).equals("SUCCESS")){
// CallBackVo callBackVo =new CallBackVo();
// callBackVo.setStatus("00");
// callBackVo.setNote(String.valueOf(arryMap.get("remark")));
// callBackVo.setSysFlowId(String.valueOf(arryMap.get("customerNo")));
// callBackVo.setJsoon(data);
// auditServiceV3.lklResultHandle(callBackVo);
// } else if (String.valueOf(arryMap.get("status")).equals("FAILURE")) {
// CallBackVo callBackVo =new CallBackVo();
// callBackVo.setStatus("90");
// callBackVo.setNote(String.valueOf(arryMap.get("remark")));
// callBackVo.setSysFlowId(String.valueOf(arryMap.get("customerNo")));
// callBackVo.setJsoon(data);
// auditServiceV3.lklResultHandle(callBackVo);
// }
return "200";
}
/** /**
* 获取拓客accessToken * 获取拓客accessToken
@ -687,7 +518,6 @@ public class LaKalaInterfaceImpl implements LaKalaInterface {
/** /**
* 获取地区信息 * 获取地区信息
*/ */
@Override
public List<OrganVo> getOrganCode(String code) { public List<OrganVo> getOrganCode(String code) {
/**获取拓客accessToken**/ /**获取拓客accessToken**/
RestTemplate client = new RestTemplate(); RestTemplate client = new RestTemplate();