package com.szwl.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.huifu.bspay.sdk.opps.core.exception.BasePayException;
import com.huifu.bspay.sdk.opps.core.utils.DateTools;
import com.huifu.bspay.sdk.opps.core.utils.OkHttpClientTools;
import com.huifu.bspay.sdk.opps.core.utils.SequenceTools;
import com.szwl.common.myAnnotation.HuifuBaseCommon;
import com.szwl.config.OppsMerchantConfig;
import com.szwl.constant.HuifuConstant;
import com.szwl.model.bo.R;
import com.szwl.model.entity.THuifuMch;
import com.szwl.mapper.THuifuMchMapper;
import com.szwl.model.entity.THuifuMchCheck;
import com.szwl.service.THuifuMchCheckService;
import com.szwl.service.THuifuMchService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.szwl.util.HuifuUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.nio.charset.Charset;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
import static com.szwl.util.HuifuUtils.base64ToTempImage;
/**
*
* 服务实现类
*
*
* @author wuhs
* @since 2023-07-12
*/
@Slf4j
@Service
public class THuifuMchServiceImpl extends ServiceImpl implements THuifuMchService {
@Autowired
private THuifuMchCheckService tHuifuMchCheckService;
@Autowired
private THuifuMchService tHuifuMchService;
/**
* 汇付个人商户入驻
* @param tHuifuMchCheck
* @return
* @throws Exception
*/
@Override
public String addPersonage(THuifuMchCheck tHuifuMchCheck) throws Exception {
// 请求接口
String url = "https://api.huifu.com/v2/merchant/basicdata/indv";
HuifuBaseCommon.doInit(OppsMerchantConfig.getMerchantConfig());
// 请求参数:Data
JSONObject request = new JSONObject();
// 请求流水号
request.put("req_seq_id", HuifuUtils.initReqSeqId());
// 请求日期
request.put("req_date", DateTools.getCurrentDateYYYYMMDD());
// 上级主体ID
request.put("upper_huifu_id", HuifuConstant.HUIFU_ID);
// 商户名称
request.put("reg_name", tHuifuMchCheck.getRegName());
// 商户简称
if(StrUtil.isNotEmpty(tHuifuMchCheck.getShortName())) {
request.put("short_name", tHuifuMchCheck.getShortName());
}
// 经营省
request.put("prov_id", tHuifuMchCheck.getProvId());
// 经营市
request.put("area_id", tHuifuMchCheck.getAreaId());
// 经营区
request.put("district_id", tHuifuMchCheck.getDistrictId());
// 经营详细地址
request.put("detail_addr", tHuifuMchCheck.getDetailAddr());
// 联系人姓名
request.put("contact_name", tHuifuMchCheck.getRegName());
// 联系人手机号
request.put("contact_mobile_no", tHuifuMchCheck.getPhone());
// 联系人电子邮箱
request.put("contact_email", tHuifuMchCheck.getEmail());
// 商户名
request.put("sms_send_flag", "M");
// 异步通知地址:审核结果消息接收地址
// request.put("async_return_url", "异步通知地址");
// 法人证件号码
request.put("legal_cert_no", tHuifuMchCheck.getCertNo());
// 结算卡正面
request.put("settle_card_front_pic", tHuifuMchCheck.getCardFrontPic());
// 法人身份证国徽面
request.put("legal_cert_back_pic", tHuifuMchCheck.getLegalCertBackPic());
// 法人身份证人像面
request.put("legal_cert_front_pic", tHuifuMchCheck.getLegalCertFrontPic());
// 结算卡信息配置
JSONObject cardInfo = new JSONObject();
// 卡户名
cardInfo.put("card_name", tHuifuMchCheck.getCardName());
// 结算账号
cardInfo.put("card_no", tHuifuMchCheck.getCardNo());
// 银行所在省
cardInfo.put("prov_id", tHuifuMchCheck.getCardProvId());
// 银行所在市
cardInfo.put("area_id", tHuifuMchCheck.getCardAreaId());
// 持卡人证件类型
cardInfo.put("cert_type", "00");
// 持卡人证件号码
cardInfo.put("cert_no", tHuifuMchCheck.getCertNo());
// 持卡人证件有效期类型,1:长期有效,0:非长期有效;
cardInfo.put("cert_validity_type", tHuifuMchCheck.getCertValidityType());
// 持卡人证件有效期开始
cardInfo.put("cert_begin_date", tHuifuMchCheck.getCertBeginDate());
// 持卡人证件有效期截止日期
if (StrUtil.isNotEmpty(tHuifuMchCheck.getCertEndDate())) {
cardInfo.put("cert_end_date", tHuifuMchCheck.getCertEndDate());
}
// 结算人手机号
cardInfo.put("mp", tHuifuMchCheck.getMp());
request.put("card_info", cardInfo);
// 结算规则配置
JSONObject settleConfig = new JSONObject();
// 结算周期
settleConfig.put("settle_cycle", "T1");
request.put("settle_config", settleConfig);
// 签名:sign
String s = JSON.toJSONString(request);
String s1 = JSON.toJSONString(JSONObject.parseObject(s, TreeMap.class));
String sign = HuifuUtils.sign(s1, HuifuConstant.RSA_PRIVATE_KEY);
// 公共参数
System.out.println("请求参数:"+ request);
JSONObject requestData = new JSONObject();
requestData.put("sys_id", HuifuConstant.SYS_ID);
requestData.put("product_id", HuifuConstant.PRODUCT_ID);
requestData.put("sign", sign);
requestData.put("data", request);
String result = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
System.out.println("返回的数据:"+ result);
JSONObject jsonObject = JSONObject.parseObject(result);
JSONObject dataObject = jsonObject.getJSONObject("data");
String code = dataObject.getString("resp_code");
if(code.equals("90000000")) {
THuifuMch tHuifuMch = new THuifuMch();
BeanUtil.copyProperties(tHuifuMchCheck, tHuifuMch);
String huifuId = dataObject.getString("huifu_id");
// 判断持卡人证件有效期类型,1:长期有效,0:非长期有效
if(tHuifuMchCheck.getCertValidityType().equals("0")) {
LocalDate date = LocalDate.parse(tHuifuMchCheck.getCertEndDate(), DateTimeFormatter.ofPattern("yyyyMMdd"));
String certEndDate = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
tHuifuMch.setCertDate(certEndDate);
} else {
tHuifuMch.setCertDate("长期");
}
tHuifuMch.setCreateDate(new Date());
tHuifuMch.setModifyDate(new Date());
tHuifuMch.setHuifuId(huifuId);
tHuifuMchCheck.setModifyDate(new Date());
tHuifuMchCheck.setStatus("2");
tHuifuMchCheck.setHuifuId(huifuId);
tHuifuMchService.save(tHuifuMch);
tHuifuMchCheckService.updateById(tHuifuMchCheck);
return "success";
}else {
String respDesc = dataObject.getString("resp_desc");
tHuifuMchCheck.setModifyDate(new Date());
tHuifuMchCheck.setStatus("3");
tHuifuMchCheck.setAuditDesc(respDesc);
tHuifuMchCheckService.updateById(tHuifuMchCheck);
return respDesc;
}
}
/**
* 汇付企业商户入驻
* @param tHuifuMchCheck
* @return
* @throws Exception
*/
@Override
public String addEnterprise(THuifuMchCheck tHuifuMchCheck) throws Exception {
// 请求接口
String url = "https://api.huifu.com/v2/merchant/basicdata/ent";
HuifuBaseCommon.doInit(OppsMerchantConfig.getMerchantConfig());
// 请求参数:Data
JSONObject request = new JSONObject();
// 请求流水号
request.put("req_seq_id", HuifuUtils.initReqSeqId());
// 请求日期
request.put("req_date", DateTools.getCurrentDateYYYYMMDD());
// 上级主体ID
request.put("upper_huifu_id", HuifuConstant.HUIFU_ID);
// 商户名称
request.put("reg_name", tHuifuMchCheck.getRegName());
// 商户简称
if(StrUtil.isNotEmpty(tHuifuMchCheck.getShortName())) {
request.put("short_name", tHuifuMchCheck.getShortName());
}
// 公司类型
request.put("ent_type", "3");
// 营业执照编号
request.put("license_code", tHuifuMchCheck.getLicenseCode());
// 营业执照有效期类型,0:非长期有效 ,1:长期有效
request.put("license_validity_type", tHuifuMchCheck.getLicenseValidityType());
// 营业执照有效期开始日期
request.put("license_begin_date", "20151208");
// 营业执照有效期截止日期
if (StrUtil.isNotEmpty(tHuifuMchCheck.getLicenseEndDate())) {
request.put("license_end_date", tHuifuMchCheck.getLicenseEndDate());
}
// 注册省
request.put("reg_prov_id", tHuifuMchCheck.getRegProvId());
// 注册市
request.put("reg_area_id", tHuifuMchCheck.getRegAreaId());
// 注册区
request.put("reg_district_id", tHuifuMchCheck.getRegDistrictId());
// 注册详细地址
request.put("reg_detail", tHuifuMchCheck.getRegDetail());
// 法人姓名
request.put("legal_name", tHuifuMchCheck.getName());
// 法人证件类型
request.put("legal_cert_type", "00");
// 法人证件号码
request.put("legal_cert_no", tHuifuMchCheck.getCertNo());
// 法人证件有效期类型,1:长期有效;0:非长期有效 ;
request.put("legal_cert_validity_type", tHuifuMchCheck.getCertValidityType());
// 法人证件有效期开始日期
request.put("legal_cert_begin_date", tHuifuMchCheck.getCertBeginDate());
// 法人证件有效期截止日期
if (StrUtil.isNotEmpty(tHuifuMchCheck.getCertEndDate())) {
request.put("legal_cert_end_date", tHuifuMchCheck.getCertEndDate());
}
// 经营省
request.put("prov_id", tHuifuMchCheck.getProvId());
// 经营市
request.put("area_id", tHuifuMchCheck.getAreaId());
// 经营区
request.put("district_id", tHuifuMchCheck.getDistrictId());
// 经营详细地址
request.put("detail_addr", tHuifuMchCheck.getDetailAddr());
// 联系人姓名
request.put("contact_name", tHuifuMchCheck.getRegName());
// 联系人手机号
request.put("contact_mobile_no", tHuifuMchCheck.getPhone());
// 联系人电子邮箱
request.put("contact_email", tHuifuMchCheck.getEmail());
// 客服电话
request.put("service_phone", tHuifuMchCheck.getServicePhone());
// 经营类型,1:实体,2:虚拟 ;
request.put("busi_type", "1");
// 小票名称
request.put("receipt_name", tHuifuMchCheck.getRegName());
// 所属行业
request.put("mcc", "6071");
// 基本存款账户编号或核准号
if(StrUtil.isNotEmpty(tHuifuMchCheck.getOpenLicenceNo())){
request.put("open_licence_no", tHuifuMchCheck.getOpenLicenceNo());
}
// 开户许可证
if(StrUtil.isNotEmpty(tHuifuMchCheck.getRegAcctPic())){
request.put("reg_acct_pic", tHuifuMchCheck.getRegAcctPic());
}
if(tHuifuMchCheck.getCardType().equals("1")) {
// 结算卡正面
request.put("settle_card_front_pic", tHuifuMchCheck.getCardFrontPic());
// 法人身份证人像面
request.put("settle_cert_back_pic", tHuifuMchCheck.getCertBackPic());
// 法人身份证国徽面
request.put("settle_cert_front_pic", tHuifuMchCheck.getCertFrontPic());
} else {
// 法人身份证人像面
request.put("legal_cert_back_pic", tHuifuMchCheck.getLegalCertBackPic());
// 法人身份证国徽面
request.put("legal_cert_front_pic", tHuifuMchCheck.getLegalCertFrontPic());
}
// 营业执照图片
request.put("license_pic", tHuifuMchCheck.getLicensePic());
// 成立时间
request.put("found_date", tHuifuMchCheck.getFoundDate());
// 法人手机号
request.put("legal_mobile_no", tHuifuMchCheck.getPhone());
// 法人身份证地址
request.put("legal_addr", tHuifuMchCheck.getCertAddress());
// 结算卡信息配置
JSONObject cardInfo = new JSONObject();
// 结算账户类型
cardInfo.put("card_type", tHuifuMchCheck.getCardType());
// 卡户名
cardInfo.put("card_name", tHuifuMchCheck.getCardName());
// 结算账号
cardInfo.put("card_no", tHuifuMchCheck.getCardNo());
// 银行所在省
if (StrUtil.isNotEmpty(tHuifuMchCheck.getCardProvId())) {
cardInfo.put("prov_id", tHuifuMchCheck.getCardProvId());
}
// 银行所在市
if (StrUtil.isNotEmpty(tHuifuMchCheck.getCardAreaId())) {
cardInfo.put("area_id", tHuifuMchCheck.getCardAreaId());
}
// 联行号
if(StrUtil.isNotEmpty(tHuifuMchCheck.getBranchCode())){
cardInfo.put("branch_code", tHuifuMchCheck.getBranchCode());
}
if(StrUtil.isNotEmpty(tHuifuMchCheck.getMp())){
cardInfo.put("mp", tHuifuMchCheck.getMp());
}
request.put("card_info", cardInfo);
// 结算规则配置
JSONObject settleConfig = new JSONObject();
// 结算周期
settleConfig.put("settle_cycle", "T1");
request.put("settle_config", settleConfig);
// 签名:sign
String s = JSON.toJSONString(request);
String s1 = JSON.toJSONString(JSONObject.parseObject(s, TreeMap.class));
String sign = HuifuUtils.sign(s1, HuifuConstant.RSA_PRIVATE_KEY);
// 公共参数
System.out.println("请求参数:"+ request);
JSONObject requestData = new JSONObject();
requestData.put("sys_id", HuifuConstant.SYS_ID);
requestData.put("product_id", HuifuConstant.PRODUCT_ID);
requestData.put("sign", sign);
requestData.put("data", request);
System.out.println("请求体:"+ requestData);
String result = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
System.out.println("返回的数据:"+ result);
JSONObject jsonObject = JSONObject.parseObject(result);
JSONObject dataObject = jsonObject.getJSONObject("data");
String code = dataObject.getString("resp_code");
if(code.equals("90000000")) {
THuifuMch tHuifuMch = new THuifuMch();
BeanUtil.copyProperties(tHuifuMchCheck, tHuifuMch);
String huifuId = dataObject.getString("huifu_id");
// 判断持卡人证件有效期类型,1:长期有效,0:非长期有效
if(tHuifuMchCheck.getCertValidityType().equals("0")) {
LocalDate date = LocalDate.parse(tHuifuMchCheck.getCertEndDate(), DateTimeFormatter.ofPattern("yyyyMMdd"));
String certEndDate = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
tHuifuMch.setCertDate(certEndDate);
} else {
tHuifuMch.setCertDate("长期");
}
tHuifuMch.setCreateDate(new Date());
tHuifuMch.setModifyDate(new Date());
tHuifuMch.setHuifuId(huifuId);
tHuifuMchCheck.setModifyDate(new Date());
tHuifuMchCheck.setStatus("2");
tHuifuMchCheck.setHuifuId(huifuId);
tHuifuMchService.save(tHuifuMch);
tHuifuMchCheckService.updateById(tHuifuMchCheck);
return "success";
}else {
String respDesc = dataObject.getString("resp_desc");
tHuifuMchCheck.setModifyDate(new Date());
tHuifuMchCheck.setStatus("3");
tHuifuMchCheck.setAuditDesc(respDesc);
tHuifuMchCheckService.updateById(tHuifuMchCheck);
return respDesc;
}
}
/**
* 汇付商户基本信息修改
* @param huifuMchCheck
* @return
*/
@Override
public String updateMerchant(THuifuMchCheck huifuMchCheck) throws Exception {
// 请求接口
String url = "https://api.huifu.com/v2/merchant/basicdata/modify";
// 请求参数:Data
JSONObject request = new JSONObject();
// 请求流水号
request.put("req_seq_id", HuifuUtils.initReqSeqId());
// 请求日期
request.put("req_date", DateTools.getCurrentDateYYYYMMDD());
// 上级主体ID
request.put("upper_huifu_id", HuifuConstant.HUIFU_ID);
// 汇付客户Id
request.put("huifu_id", huifuMchCheck.getHuifuId());
// 商户名称
request.put("reg_name", huifuMchCheck.getRegName());
// 商户简称
if(StrUtil.isNotEmpty(huifuMchCheck.getShortName())) {
request.put("short_name", huifuMchCheck.getShortName());
}
// 经营省
request.put("prov_id", huifuMchCheck.getProvId());
// 经营市
request.put("area_id", huifuMchCheck.getAreaId());
// 经营区
request.put("district_id", huifuMchCheck.getDistrictId());
// 经营详细地址
request.put("detail_addr", huifuMchCheck.getDetailAddr());
// 联系人姓名
request.put("contact_name", huifuMchCheck.getRegName());
// 联系人手机号
request.put("contact_mobile_no", huifuMchCheck.getPhone());
// 联系人电子邮箱
request.put("contact_email", huifuMchCheck.getEmail());
// // 联系人电子邮箱
// request.put("async_return_url", "http://598ef306.r10.cpolar.top/tHuifuMch/auditNotify");
// 取现信息配置
JSONObject cardInfo = new JSONObject();
cardInfo.put("card_type", huifuMchCheck.getCardType());
cardInfo.put("card_name", huifuMchCheck.getCardName());
cardInfo.put("card_no", huifuMchCheck.getCardNo());
if(StrUtil.isNotEmpty(huifuMchCheck.getCardProvId())) {
cardInfo.put("prov_id", huifuMchCheck.getCardProvId());
}
if(StrUtil.isNotEmpty(huifuMchCheck.getCardAreaId())) {
cardInfo.put("area_id", huifuMchCheck.getCardAreaId());
}
cardInfo.put("cert_type", "00");
cardInfo.put("cert_no", huifuMchCheck.getCertNo());
cardInfo.put("cert_validity_type", huifuMchCheck.getCertValidityType());
cardInfo.put("cert_begin_date", huifuMchCheck.getCertBeginDate());
cardInfo.put("cert_end_date", huifuMchCheck.getCertEndDate());
if(StrUtil.isNotEmpty(huifuMchCheck.getMp())) {
cardInfo.put("mp", huifuMchCheck.getMp());
}
cardInfo.put("settle_card_front_pic", huifuMchCheck.getCardFrontPic());
cardInfo.put("settle_cert_front_pic", huifuMchCheck.getCertFrontPic());
cardInfo.put("settle_cert_back_pic", huifuMchCheck.getCertBackPic());
cardInfo.put("legal_cert_front_pic", huifuMchCheck.getLegalCertFrontPic());
cardInfo.put("legal_cert_back_pic", huifuMchCheck.getLegalCertBackPic());
if(StrUtil.isNotEmpty(huifuMchCheck.getSms())) {
cardInfo.put("verify_code", huifuMchCheck.getSms());
}
request.put("card_info", cardInfo);
// 签名:sign
String s = JSON.toJSONString(request);
String s1 = JSON.toJSONString(JSONObject.parseObject(s, TreeMap.class));
String sign = HuifuUtils.sign(s1, HuifuConstant.RSA_PRIVATE_KEY);
JSONObject requestData = new JSONObject();
requestData.put("sys_id", HuifuConstant.SYS_ID);
requestData.put("product_id", HuifuConstant.PRODUCT_ID);
requestData.put("sign", sign);
requestData.put("data", request);
System.out.println("请求体:"+ requestData);
String result = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
System.out.println("返回的数据:"+ result);
JSONObject jsonObject = JSONObject.parseObject(result);
JSONObject dataObject = jsonObject.getJSONObject("data");
String code = dataObject.getString("resp_code");
if(code.equals("90000000")) {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(THuifuMch::getAdminId,huifuMchCheck.getAdminId());
THuifuMch tHuifuMch = tHuifuMchService.getOne(queryWrapper);
// 排除掉不复制的属性
String[] ignoreProperties = {"id", "createDate","adminId","huifuId"};
BeanUtil.copyProperties(huifuMchCheck, tHuifuMch, ignoreProperties);
// 判断持卡人证件有效期类型,1:长期有效,0:非长期有效
if(huifuMchCheck.getCertValidityType().equals("0")) {
LocalDate date = LocalDate.parse(huifuMchCheck.getCertEndDate(), DateTimeFormatter.ofPattern("yyyyMMdd"));
String certEndDate = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
tHuifuMch.setCertDate(certEndDate);
} else {
tHuifuMch.setCertDate("长期");
}
tHuifuMch.setModifyDate(new Date());
huifuMchCheck.setStatus("2");
huifuMchCheck.setSms(null);
huifuMchCheck.setModifyDate(new Date());
tHuifuMchService.updateById(tHuifuMch);
tHuifuMchCheckService.updateById(huifuMchCheck);
return "success";
}else {
String respDesc = dataObject.getString("resp_desc");
huifuMchCheck.setStatus("3");
huifuMchCheck.setSms(null);
huifuMchCheck.setAuditDesc(respDesc);
huifuMchCheck.setModifyDate(new Date());
tHuifuMchCheckService.updateById(huifuMchCheck);
return respDesc;
}
}
/**
* 汇付上传图片
* @param file
* @return
*/
@Override
public String uploadPic(MultipartFile file, HuifuConstant.fileType fileType) {
String url = "https://api.huifu.com/v2/supplementary/picture";
// 请求参数
Map params = new HashMap();
// 请求流水号,需保证当天商户下唯一,推荐采用日期时间+几位流水号的形式
params.put("req_seq_id", SequenceTools.getReqSeqId32());
params.put("req_date", DateTools.getCurrentDateYYYYMMDD());
params.put("file_type", fileType);
params.put("picture", fileType.toValue());
String data = JSON.toJSONString(params);
CloseableHttpClient httpclient1 = HttpClients.createDefault();
CloseableHttpResponse response = null;
String result = null;
try {
// 获取原始文件名
String fileName = file.getOriginalFilename();
// 取得文件扩展名
String extension = fileName.substring(fileName.lastIndexOf("."));
// 创建临时文件
File tempFile = File.createTempFile("temp", extension);
file.transferTo(tempFile);
HttpPost httpPost = new HttpPost(url);
ContentType contentType = ContentType.create("text/plain", Charset.forName("UTF-8"));
MultipartEntityBuilder mEntityBuilder = MultipartEntityBuilder.create();
mEntityBuilder.addTextBody("sys_id", HuifuConstant.SYS_ID, contentType);
mEntityBuilder.addTextBody("product_id", HuifuConstant.PRODUCT_ID, contentType);
mEntityBuilder.addTextBody("data", data, contentType);
mEntityBuilder.addBinaryBody("file", tempFile);
httpPost.setEntity(mEntityBuilder.build());
response = httpclient1.execute(httpPost);
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_OK) {
HttpEntity resEntity = response.getEntity();
result = EntityUtils.toString(resEntity);
System.out.print(result);
JSONObject jsonObject = JSONObject.parseObject(result);
JSONObject dataObject = jsonObject.getJSONObject("data");
result = dataObject.getString("file_id");
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
@Override
public String refund(String sn, BigDecimal price, String payDate, String remark, String acctSplitBunch, String companyType) throws Exception {
String url = "https://api.huifu.com/v2/trade/payment/scanpay/refund";
HuifuBaseCommon.doInit(OppsMerchantConfig.getMerchantConfig());
JSONObject request = new JSONObject();
request.put("req_seq_id", HuifuUtils.initReqSeqId());
request.put("req_date", DateTools.getCurrentDateYYYYMMDD());
if(StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
request.put("huifu_id", HuifuConstant.SC_DIV_HUIFU_ID);
} else {
request.put("huifu_id", HuifuConstant.SZ_DIV_HUIFU_ID);
}
request.put("ord_amt", price);
request.put("org_req_date", payDate);
request.put("org_req_seq_id", sn);
// 分账明细
request.put("acct_split_bunch", acctSplitBunch);
request.put("notify_url", HuifuConstant.Notify_Refund_Url);
// 签名:sign
String s = JSON.toJSONString(request);
String s1 = JSON.toJSONString(JSONObject.parseObject(s, TreeMap.class));
String sign = HuifuUtils.sign(s1, HuifuConstant.RSA_PRIVATE_KEY);
// 公共参数
System.out.println("请求参数:"+ request);
JSONObject requestData = new JSONObject();
requestData.put("sys_id", HuifuConstant.SYS_ID);
requestData.put("product_id", HuifuConstant.PRODUCT_ID);
requestData.put("sign", sign);
requestData.put("data", request);
log.info("退款请求参数:{}", requestData);
String success = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
System.out.println("返回的数据:"+ success);
// 拿到返回参数
JSONObject result = JSONObject.parseObject(success);
log.info("汇付返回参数:{}", result);
JSONObject data = result.getJSONObject("data");
String transStat = data.getString("trans_stat");
String respCode = data.getString("resp_code");
String respDesc = data.getString("resp_desc");
if(respCode.equals("00000000") || respCode.equals("00000100")) {
return transStat;
} else {
return respDesc;
}
}
/**
* 汇付发送验证码
* @param tHuifuMch
* @return
* @throws Exception
*/
@Override
public String sendSms(THuifuMch tHuifuMch) throws Exception {
String url = "https://api.huifu.com/v2/merchant/basicdata/sms/send";
HuifuBaseCommon.doInit(OppsMerchantConfig.getMerchantConfig());
JSONObject request = new JSONObject();
request.put("req_seq_id", HuifuUtils.initReqSeqId());
request.put("req_date", DateTools.getCurrentDateYYYYMMDD());
request.put("huifu_id", tHuifuMch.getHuifuId());
request.put("phone", tHuifuMch.getPhone());
request.put("verify_type", "settleBankChange");
// 签名:sign
String s = JSON.toJSONString(request);
String s1 = JSON.toJSONString(JSONObject.parseObject(s, TreeMap.class));
String sign = HuifuUtils.sign(s1, HuifuConstant.RSA_PRIVATE_KEY);
// 公共参数
System.out.println("请求参数:"+ request);
JSONObject requestData = new JSONObject();
requestData.put("sys_id", HuifuConstant.SYS_ID);
requestData.put("product_id", HuifuConstant.PRODUCT_ID);
requestData.put("sign", sign);
requestData.put("data", request);
System.out.println("请求体:"+ requestData);
String success = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
System.out.println("返回的数据:"+ success);
// 拿到返回参数
JSONObject result = JSONObject.parseObject(success);
log.info("汇付返回参数:{}", result);
JSONObject data = result.getJSONObject("data");
String respCode = data.getString("resp_code");
return respCode;
}
/**
* 汇付上传图片
* @param base64Str
* @return
*/
@Override
public String newUploadPic(String base64Str, HuifuConstant.fileType fileType, String huifuId) {
String url = "https://api.huifu.com/v2/supplementary/picture";
// 请求参数
Map params = new HashMap();
// 请求流水号,需保证当天商户下唯一,推荐采用日期时间+几位流水号的形式
params.put("req_seq_id", SequenceTools.getReqSeqId32());
params.put("req_date", DateTools.getCurrentDateYYYYMMDD());
params.put("file_type", fileType);
if(StringUtils.isNotEmpty(huifuId)) {
params.put("huifu_id", huifuId);
}
String data = JSON.toJSONString(params);
CloseableHttpClient httpclient1 = HttpClients.createDefault();
CloseableHttpResponse response = null;
String result = null;
File tempFile = new File("");
try {
tempFile = base64ToTempImage(base64Str);
HttpPost httpPost = new HttpPost(url);
ContentType contentType = ContentType.create("text/plain", Charset.forName("UTF-8"));
MultipartEntityBuilder mEntityBuilder = MultipartEntityBuilder.create();
mEntityBuilder.addTextBody("sys_id", HuifuConstant.SYS_ID, contentType);
mEntityBuilder.addTextBody("product_id", HuifuConstant.PRODUCT_ID, contentType);
mEntityBuilder.addTextBody("data", data, contentType);
mEntityBuilder.addBinaryBody("file", tempFile);
httpPost.setEntity(mEntityBuilder.build());
response = httpclient1.execute(httpPost);
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_OK) {
HttpEntity resEntity = response.getEntity();
result = EntityUtils.toString(resEntity);
System.out.print(result);
JSONObject jsonObject = JSONObject.parseObject(result);
JSONObject dataObject = jsonObject.getJSONObject("data");
result = dataObject.getString("file_id");
}
} catch (IOException e) {
e.printStackTrace();
} finally{
tempFile.delete();
}
return result;
}
@Override
public String updateConStat(THuifuMchCheck tHuifuMchCheck) throws BasePayException {
// 请求接口
String url = "https://api.huifu.com/v2/merchant/basicdata/query";
// 请求参数:Data
JSONObject request = new JSONObject();
request.put("req_seq_id", SequenceTools.getReqSeqId32());
request.put("req_date", DateTools.getCurrentDateYYYYMMDD());
request.put("huifu_id", tHuifuMchCheck.getHuifuId());
// 签名:sign
String s = JSON.toJSONString(request);
String s1 = JSON.toJSONString(JSONObject.parseObject(s, TreeMap.class));
String sign = HuifuUtils.sign(s1, HuifuConstant.RSA_PRIVATE_KEY);
// 公共参数
System.out.println("请求参数:"+ request);
JSONObject requestData = new JSONObject();
requestData.put("sys_id", HuifuConstant.SYS_ID);
requestData.put("product_id", HuifuConstant.PRODUCT_ID);
requestData.put("sign", sign);
requestData.put("data", request);
System.out.println("请求体:"+ requestData);
String success = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
JSONObject result = JSONObject.parseObject(success);
log.info("汇付返回参数:{}", result);
JSONObject data = result.getJSONObject("data");
String respCode = data.getString("resp_code");
if(respCode.equals("00000000") || respCode.equals("00000100")) {
try {
ObjectMapper objectMapper = new ObjectMapper();
JsonNode rootNode = objectMapper.readTree(success);
JsonNode agreementInfoList = rootNode.path("data").path("agreement_info_list");
JsonNode agreementNode = objectMapper.readTree(agreementInfoList.asText()).get(0);
String conStatValue = agreementNode.path("con_stat").asText();
System.out.println("con_stat value: " + conStatValue);
tHuifuMchCheck.setConStat(conStatValue);
tHuifuMchCheckService.updateById(tHuifuMchCheck);
return conStatValue;
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
}