@@ -9,7 +9,6 @@ import cn.pluss.platform.channel.ys.impl.YSAuditServiceV3;
import cn.pluss.platform.dto.AccountDTO ;
import cn.pluss.platform.entity.* ;
import cn.pluss.platform.exception.MsgException ;
import cn.pluss.platform.klk.LaKaLaUtility ;
import cn.pluss.platform.klk.LakalaConfig ;
import cn.pluss.platform.klk.service.* ;
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.MultiValueMap ;
import org.springframework.util.ObjectUtils ;
import org.springframework.util.StringUtils ;
import org.springframework.web.client.RestTemplate ;
import org.springframework.web.multipart.MultipartFile ;
@@ -50,7 +48,7 @@ import java.util.*;
@Service
@Slf4j
public class LaKalaInterfaceImpl implements LaKalaInterface {
public class LaKalaInterfaceImpl {
@Resource
LklPayService lklPayService ;
@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 ) {
// UserApp userapp=userAppService.getById(userId);
// MsgException.checkNull(userapp,"商户基础信息不完整");
//
// MsgException.checkBlank(userapp.getEmail(),"商户邮箱不允许为空");
MerchantBaseInfo merchantBaseInfo = mbiService . getMerchantBaseInfoByUserId ( userId ) ;
IdCard idCard = idCardService . getCertIdCard ( userId ) ; //获取法人身份证信息
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:电签,ZPOS4G: 4G电签,SUPER_POS:智能pos,B_WIZARD:蓝精灵,PAPER_CODE:码牌,WECHAT_PAY:专业化扫码,KLYX:云音箱,QRCODE:收款王,MONEY_BOX:收钱宝盒根据业务开放取值
object1 . put ( " busiCode " , " PAPER_CODE " ) ; //业务类型 BPOS:传统POS, ZPOS:电签,ZPOS4G: 4G电签,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
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
@@ -687,7 +518,6 @@ public class LaKalaInterfaceImpl implements LaKalaInterface {
/**
* 获取地区信息
*/
@Override
public List < OrganVo > getOrganCode ( String code ) {
/**获取拓客accessToken**/
RestTemplate client = new RestTemplate ( ) ;