THuifuMchServiceImpl.java 47 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046
  1. package com.szwl.service.impl;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.core.util.StrUtil;
  4. import com.alibaba.fastjson.JSON;
  5. import com.alibaba.fastjson.JSONArray;
  6. import com.alibaba.fastjson.JSONObject;
  7. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  8. import com.fasterxml.jackson.databind.JsonNode;
  9. import com.fasterxml.jackson.databind.ObjectMapper;
  10. import com.huifu.bspay.sdk.opps.core.exception.BasePayException;
  11. import com.huifu.bspay.sdk.opps.core.utils.DateTools;
  12. import com.huifu.bspay.sdk.opps.core.utils.OkHttpClientTools;
  13. import com.huifu.bspay.sdk.opps.core.utils.SequenceTools;
  14. import com.szwl.common.myAnnotation.HuifuBaseCommon;
  15. import com.szwl.config.OppsMerchantConfig;
  16. import com.szwl.constant.HuifuConstant;
  17. import com.szwl.model.bo.R;
  18. import com.szwl.model.entity.TAdmin;
  19. import com.szwl.model.entity.THuifuMch;
  20. import com.szwl.mapper.THuifuMchMapper;
  21. import com.szwl.model.entity.THuifuMchCheck;
  22. import com.szwl.service.TAdminService;
  23. import com.szwl.service.THuifuMchCheckService;
  24. import com.szwl.service.THuifuMchService;
  25. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  26. import com.szwl.util.HuifuUtils;
  27. import lombok.extern.slf4j.Slf4j;
  28. import org.apache.commons.lang.StringUtils;
  29. import org.apache.http.HttpEntity;
  30. import org.apache.http.HttpStatus;
  31. import org.apache.http.client.methods.CloseableHttpResponse;
  32. import org.apache.http.client.methods.HttpPost;
  33. import org.apache.http.entity.ContentType;
  34. import org.apache.http.entity.mime.MultipartEntityBuilder;
  35. import org.apache.http.impl.client.CloseableHttpClient;
  36. import org.apache.http.impl.client.HttpClients;
  37. import org.apache.http.util.EntityUtils;
  38. import org.springframework.beans.factory.annotation.Autowired;
  39. import org.springframework.stereotype.Service;
  40. import org.springframework.web.multipart.MultipartFile;
  41. import java.io.File;
  42. import java.io.IOException;
  43. import java.math.BigDecimal;
  44. import java.nio.charset.Charset;
  45. import java.time.LocalDate;
  46. import java.time.format.DateTimeFormatter;
  47. import java.util.*;
  48. import static com.szwl.util.HuifuUtils.base64ToTempImage;
  49. /**
  50. * <p>
  51. * 服务实现类
  52. * </p>
  53. *
  54. * @author wuhs
  55. * @since 2023-07-12
  56. */
  57. @Slf4j
  58. @Service
  59. public class THuifuMchServiceImpl extends ServiceImpl<THuifuMchMapper, THuifuMch> implements THuifuMchService {
  60. @Autowired
  61. private THuifuMchCheckService tHuifuMchCheckService;
  62. @Autowired
  63. private THuifuMchService tHuifuMchService;
  64. @Autowired
  65. private TAdminService tAdminService;
  66. /**
  67. * 汇付用户开户
  68. * @param tHuifuMchCheck
  69. * @return
  70. * @throws Exception
  71. */
  72. @Override
  73. public String openAccount(THuifuMchCheck tHuifuMchCheck) throws Exception {
  74. // 请求接口
  75. String url = "https://api.huifu.com/v2/user/basicdata/indv";
  76. HuifuBaseCommon.doInit(OppsMerchantConfig.getMerchantConfig());
  77. // 请求参数:Data
  78. JSONObject request = new JSONObject();
  79. // 请求流水号
  80. request.put("req_seq_id", HuifuUtils.initReqSeqId());
  81. // 请求日期
  82. request.put("req_date", DateTools.getCurrentDateYYYYMMDD());
  83. // 判断商户类型,“0”为个人,“1”为企业
  84. if(tHuifuMchCheck.getType().equals("0")) {
  85. // 个人姓名
  86. request.put("name", tHuifuMchCheck.getRegName());
  87. // 个人证件类型
  88. request.put("cert_type", "00");
  89. // 个人证件号码
  90. request.put("cert_no", tHuifuMchCheck.getCertNo());
  91. // 个人证件有效期类型,1:长期有效;0:非长期有效
  92. request.put("cert_validity_type", tHuifuMchCheck.getCertValidityType());
  93. // 个人证件有效期开始日期
  94. request.put("cert_begin_date", tHuifuMchCheck.getCertBeginDate());
  95. // 个人证件有效期截止日期
  96. if (StrUtil.isNotEmpty(tHuifuMchCheck.getCertEndDate())) {
  97. request.put("cert_end_date", tHuifuMchCheck.getCertEndDate());
  98. }
  99. // 手机号
  100. request.put("mobile_no", tHuifuMchCheck.getPhone());
  101. } else {
  102. url = "https://api.huifu.com/v2/user/basicdata/ent";
  103. // 企业用户名称
  104. request.put("reg_name", tHuifuMchCheck.getRegName());
  105. // 营业执照编号
  106. request.put("license_code", tHuifuMchCheck.getLicenseCode());
  107. // 营业执照有效期类型,0:非长期有效 ,1:长期有效
  108. request.put("license_validity_type", tHuifuMchCheck.getLicenseValidityType());
  109. // 营业执照有效期开始日期
  110. request.put("license_begin_date", tHuifuMchCheck.getLicenseBeginDate());
  111. // 营业执照有效期截止日期
  112. if (StrUtil.isNotEmpty(tHuifuMchCheck.getLicenseEndDate())) {
  113. request.put("license_end_date", tHuifuMchCheck.getLicenseEndDate());
  114. }
  115. // 注册省
  116. request.put("reg_prov_id", tHuifuMchCheck.getRegProvId());
  117. // 注册市
  118. request.put("reg_area_id", tHuifuMchCheck.getRegAreaId());
  119. // 注册区
  120. request.put("reg_district_id", tHuifuMchCheck.getRegDistrictId());
  121. // 注册详细地址
  122. request.put("reg_detail", tHuifuMchCheck.getRegDetail());
  123. // 法人姓名
  124. request.put("legal_name", tHuifuMchCheck.getName());
  125. // 法人证件类型
  126. request.put("legal_cert_type", "00");
  127. // 法人证件号码
  128. request.put("legal_cert_no", tHuifuMchCheck.getCertNo());
  129. // 法人证件有效期类型,1:长期有效;0:非长期有效 ;
  130. request.put("legal_cert_validity_type", tHuifuMchCheck.getCertValidityType());
  131. // 法人证件有效期开始日期
  132. request.put("legal_cert_begin_date", tHuifuMchCheck.getCertBeginDate());
  133. // 法人证件有效期截止日期
  134. if (StrUtil.isNotEmpty(tHuifuMchCheck.getCertEndDate())) {
  135. request.put("legal_cert_end_date", tHuifuMchCheck.getCertEndDate());
  136. }
  137. // 联系人姓名
  138. request.put("contact_name", tHuifuMchCheck.getRegName());
  139. // 联系人手机号
  140. request.put("contact_mobile", tHuifuMchCheck.getPhone());
  141. }
  142. // 签名:sign
  143. String s = JSON.toJSONString(request);
  144. String s1 = JSON.toJSONString(JSONObject.parseObject(s, TreeMap.class));
  145. String sign = HuifuUtils.sign(s1, HuifuConstant.RSA_PRIVATE_KEY);
  146. // 公共参数
  147. System.out.println("请求参数:"+ request);
  148. JSONObject requestData = new JSONObject();
  149. requestData.put("sys_id", HuifuConstant.SYS_ID);
  150. requestData.put("product_id", HuifuConstant.PRODUCT_ID);
  151. requestData.put("sign", sign);
  152. requestData.put("data", request);
  153. String result = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
  154. System.out.println("返回的数据:"+ result);
  155. JSONObject jsonObject = JSONObject.parseObject(result);
  156. JSONObject dataObject = jsonObject.getJSONObject("data");
  157. String code = dataObject.getString("resp_code");
  158. if(code.equals(HuifuConstant.RESP_CODE)) {
  159. String huifuId = dataObject.getString("huifu_id");
  160. tHuifuMchCheck.setModifyDate(new Date());
  161. tHuifuMchCheck.setStatus("1");
  162. tHuifuMchCheck.setHuifuId(huifuId);
  163. tHuifuMchCheckService.updateById(tHuifuMchCheck);
  164. return HuifuConstant.SUCCESS;
  165. }else {
  166. String respDesc = dataObject.getString("resp_desc");
  167. tHuifuMchCheck.setModifyDate(new Date());
  168. tHuifuMchCheck.setStatus("3");
  169. tHuifuMchCheck.setAuditDesc(respDesc);
  170. tHuifuMchCheckService.updateById(tHuifuMchCheck);
  171. return respDesc;
  172. }
  173. }
  174. /**
  175. * 用户业务入驻
  176. * @param tHuifuMchCheck
  177. * @return
  178. * @throws Exception
  179. */
  180. @Override
  181. public String openBusiness(THuifuMchCheck tHuifuMchCheck) throws Exception {
  182. // 请求接口
  183. String url = "https://api.huifu.com/v2/user/busi/open";
  184. HuifuBaseCommon.doInit(OppsMerchantConfig.getMerchantConfig());
  185. // 请求参数:Data
  186. JSONObject request = new JSONObject();
  187. // 请求流水号
  188. request.put("req_seq_id", HuifuUtils.initReqSeqId());
  189. // 请求日期
  190. request.put("req_date", DateTools.getCurrentDateYYYYMMDD());
  191. // 汇付ID
  192. request.put("huifu_id", tHuifuMchCheck.getHuifuId());
  193. // 上级汇付Id:判断是申泽还是七云
  194. TAdmin tAdmin = tAdminService.getById(tHuifuMchCheck.getAdminId());
  195. if (StringUtils.isNotEmpty(tAdmin.getCompanyType()) && tAdmin.getCompanyType().equals("1")) {
  196. request.put("upper_huifu_id", HuifuConstant.SC_DIV_HUIFU_ID);
  197. } else {
  198. request.put("upper_huifu_id", HuifuConstant.SZ_DIV_HUIFU_ID);
  199. }
  200. // 结算卡信息配置
  201. JSONObject cardInfo = new JSONObject();
  202. // 卡类型
  203. cardInfo.put("card_type", tHuifuMchCheck.getCardType());
  204. // 卡户名
  205. cardInfo.put("card_name", tHuifuMchCheck.getCardName());
  206. // 结算账号
  207. cardInfo.put("card_no", tHuifuMchCheck.getCardNo());
  208. // 银行所在省
  209. cardInfo.put("prov_id", tHuifuMchCheck.getCardProvId());
  210. // 银行所在市
  211. cardInfo.put("area_id", tHuifuMchCheck.getCardAreaId());
  212. // 如果是对私
  213. if (StringUtils.isNotEmpty(tHuifuMchCheck.getCardType()) && tHuifuMchCheck.getCardType().equals("1")) {
  214. // 持卡人证件类型
  215. cardInfo.put("cert_type", "00");
  216. // 持卡人证件号码
  217. cardInfo.put("cert_no", tHuifuMchCheck.getCertNo());
  218. // 持卡人证件有效期类型,1:长期有效,0:非长期有效;
  219. cardInfo.put("cert_validity_type", tHuifuMchCheck.getCertValidityType());
  220. // 持卡人证件有效期开始
  221. cardInfo.put("cert_begin_date", tHuifuMchCheck.getCertBeginDate());
  222. // 持卡人证件有效期截止日期
  223. if (StringUtils.isNotEmpty(tHuifuMchCheck.getCertEndDate())) {
  224. cardInfo.put("cert_end_date", tHuifuMchCheck.getCertEndDate());
  225. }
  226. }
  227. if (StringUtils.isNotEmpty(tHuifuMchCheck.getCardType()) && tHuifuMchCheck.getCardType().equals("0")) {
  228. // 银行号
  229. cardInfo.put("bank_code", tHuifuMchCheck.getBankCode());
  230. // 支行联行号
  231. cardInfo.put("branch_code", tHuifuMchCheck.getBranchCode());
  232. }
  233. request.put("card_info", cardInfo);
  234. JSONObject settleConfig = new JSONObject();
  235. // 如果是修改接口
  236. if (tHuifuMchCheck.getStatus().equals("4")) {
  237. url = "https://api.huifu.com/v2/user/busi/modify";
  238. // 结算周期
  239. settleConfig.put("settle_status", "1");
  240. }
  241. settleConfig.put("settle_cycle", "T1");
  242. request.put("settle_config", settleConfig);
  243. // 签名:sign
  244. String s = JSON.toJSONString(request);
  245. String s1 = JSON.toJSONString(JSONObject.parseObject(s, TreeMap.class));
  246. String sign = HuifuUtils.sign(s1, HuifuConstant.RSA_PRIVATE_KEY);
  247. // 公共参数
  248. System.out.println("请求参数:"+ request);
  249. JSONObject requestData = new JSONObject();
  250. requestData.put("sys_id", HuifuConstant.SYS_ID);
  251. requestData.put("product_id", HuifuConstant.PRODUCT_ID);
  252. requestData.put("sign", sign);
  253. requestData.put("data", request);
  254. String result = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
  255. System.out.println("返回的数据:"+ result);
  256. JSONObject jsonObject = JSONObject.parseObject(result);
  257. JSONObject dataObject = jsonObject.getJSONObject("data");
  258. String code = dataObject.getString("resp_code");
  259. if(code.equals(HuifuConstant.RESP_CODE)) {
  260. String huifuId = dataObject.getString("huifu_id");
  261. tHuifuMchCheck.setModifyDate(new Date());
  262. tHuifuMchCheck.setStatus("2");
  263. tHuifuMchCheck.setHuifuId(huifuId);
  264. LambdaQueryWrapper<THuifuMch> wrapper = new LambdaQueryWrapper<>();
  265. wrapper.eq(THuifuMch::getAdminId, tHuifuMchCheck.getAdminId());
  266. THuifuMch huifuMch = tHuifuMchService.getOne(wrapper);
  267. if (huifuMch != null) {
  268. String[] ignoreProperties = {"id", "createDate","adminId"};
  269. BeanUtil.copyProperties(tHuifuMchCheck, huifuMch, ignoreProperties);
  270. huifuMch.setModifyDate(new Date());
  271. tHuifuMchService.updateById(huifuMch);
  272. } else {
  273. THuifuMch tHuifuMch = new THuifuMch();
  274. BeanUtil.copyProperties(tHuifuMchCheck, tHuifuMch);
  275. // 判断持卡人证件有效期类型,1:长期有效,0:非长期有效
  276. if(tHuifuMchCheck.getCertValidityType().equals("0")) {
  277. LocalDate date = LocalDate.parse(tHuifuMchCheck.getCertEndDate(), DateTimeFormatter.ofPattern("yyyyMMdd"));
  278. String certEndDate = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
  279. tHuifuMch.setCertDate(certEndDate);
  280. } else {
  281. tHuifuMch.setCertDate("长期");
  282. }
  283. tHuifuMch.setCreateDate(new Date());
  284. tHuifuMch.setModifyDate(new Date());
  285. tHuifuMch.setHuifuId(huifuId);
  286. tHuifuMchService.save(tHuifuMch);
  287. }
  288. tHuifuMchCheckService.updateById(tHuifuMchCheck);
  289. return HuifuConstant.SUCCESS;
  290. }else {
  291. String respDesc = dataObject.getString("resp_desc");
  292. tHuifuMchCheck.setModifyDate(new Date());
  293. tHuifuMchCheck.setStatus("3");
  294. tHuifuMchCheck.setAuditDesc(respDesc);
  295. tHuifuMchCheckService.updateById(tHuifuMchCheck);
  296. return respDesc;
  297. }
  298. }
  299. /**
  300. * 汇付个人商户入驻
  301. * @param tHuifuMchCheck
  302. * @return
  303. * @throws Exception
  304. */
  305. @Override
  306. public String addPersonage(THuifuMchCheck tHuifuMchCheck) throws Exception {
  307. // 请求接口
  308. String url = "https://api.huifu.com/v2/merchant/basicdata/indv";
  309. HuifuBaseCommon.doInit(OppsMerchantConfig.getMerchantConfig());
  310. // 请求参数:Data
  311. JSONObject request = new JSONObject();
  312. // 请求流水号
  313. request.put("req_seq_id", HuifuUtils.initReqSeqId());
  314. // 请求日期
  315. request.put("req_date", DateTools.getCurrentDateYYYYMMDD());
  316. // 上级主体ID
  317. request.put("upper_huifu_id", HuifuConstant.HUIFU_ID);
  318. // 商户名称
  319. request.put("reg_name", tHuifuMchCheck.getRegName());
  320. // 商户简称
  321. if(StrUtil.isNotEmpty(tHuifuMchCheck.getShortName())) {
  322. request.put("short_name", tHuifuMchCheck.getShortName());
  323. }
  324. // 经营省
  325. request.put("prov_id", tHuifuMchCheck.getProvId());
  326. // 经营市
  327. request.put("area_id", tHuifuMchCheck.getAreaId());
  328. // 经营区
  329. request.put("district_id", tHuifuMchCheck.getDistrictId());
  330. // 经营详细地址
  331. request.put("detail_addr", tHuifuMchCheck.getDetailAddr());
  332. // 联系人姓名
  333. request.put("contact_name", tHuifuMchCheck.getRegName());
  334. // 联系人手机号
  335. request.put("contact_mobile_no", tHuifuMchCheck.getPhone());
  336. // 联系人电子邮箱
  337. request.put("contact_email", tHuifuMchCheck.getEmail());
  338. // 商户名
  339. request.put("sms_send_flag", "M");
  340. // 异步通知地址:审核结果消息接收地址
  341. // request.put("async_return_url", "异步通知地址");
  342. // 法人证件号码
  343. request.put("legal_cert_no", tHuifuMchCheck.getCertNo());
  344. // 结算卡正面
  345. request.put("settle_card_front_pic", tHuifuMchCheck.getCardFrontPic());
  346. // 法人身份证国徽面
  347. request.put("legal_cert_back_pic", tHuifuMchCheck.getLegalCertBackPic());
  348. // 法人身份证人像面
  349. request.put("legal_cert_front_pic", tHuifuMchCheck.getLegalCertFrontPic());
  350. // 结算卡信息配置
  351. JSONObject cardInfo = new JSONObject();
  352. // 卡户名
  353. cardInfo.put("card_name", tHuifuMchCheck.getCardName());
  354. // 结算账号
  355. cardInfo.put("card_no", tHuifuMchCheck.getCardNo());
  356. // 银行所在省
  357. cardInfo.put("prov_id", tHuifuMchCheck.getCardProvId());
  358. // 银行所在市
  359. cardInfo.put("area_id", tHuifuMchCheck.getCardAreaId());
  360. // 持卡人证件类型
  361. cardInfo.put("cert_type", "00");
  362. // 持卡人证件号码
  363. cardInfo.put("cert_no", tHuifuMchCheck.getCertNo());
  364. // 持卡人证件有效期类型,1:长期有效,0:非长期有效;
  365. cardInfo.put("cert_validity_type", tHuifuMchCheck.getCertValidityType());
  366. // 持卡人证件有效期开始
  367. cardInfo.put("cert_begin_date", tHuifuMchCheck.getCertBeginDate());
  368. // 持卡人证件有效期截止日期
  369. if (StrUtil.isNotEmpty(tHuifuMchCheck.getCertEndDate())) {
  370. cardInfo.put("cert_end_date", tHuifuMchCheck.getCertEndDate());
  371. }
  372. // 结算人手机号
  373. cardInfo.put("mp", tHuifuMchCheck.getMp());
  374. request.put("card_info", cardInfo);
  375. // 结算规则配置
  376. JSONObject settleConfig = new JSONObject();
  377. // 结算周期
  378. settleConfig.put("settle_cycle", "T1");
  379. request.put("settle_config", settleConfig);
  380. // 签名:sign
  381. String s = JSON.toJSONString(request);
  382. String s1 = JSON.toJSONString(JSONObject.parseObject(s, TreeMap.class));
  383. String sign = HuifuUtils.sign(s1, HuifuConstant.RSA_PRIVATE_KEY);
  384. // 公共参数
  385. System.out.println("请求参数:"+ request);
  386. JSONObject requestData = new JSONObject();
  387. requestData.put("sys_id", HuifuConstant.SYS_ID);
  388. requestData.put("product_id", HuifuConstant.PRODUCT_ID);
  389. requestData.put("sign", sign);
  390. requestData.put("data", request);
  391. String result = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
  392. System.out.println("返回的数据:"+ result);
  393. JSONObject jsonObject = JSONObject.parseObject(result);
  394. JSONObject dataObject = jsonObject.getJSONObject("data");
  395. String code = dataObject.getString("resp_code");
  396. if(code.equals("90000000")) {
  397. THuifuMch tHuifuMch = new THuifuMch();
  398. BeanUtil.copyProperties(tHuifuMchCheck, tHuifuMch);
  399. String huifuId = dataObject.getString("huifu_id");
  400. // 判断持卡人证件有效期类型,1:长期有效,0:非长期有效
  401. if(tHuifuMchCheck.getCertValidityType().equals("0")) {
  402. LocalDate date = LocalDate.parse(tHuifuMchCheck.getCertEndDate(), DateTimeFormatter.ofPattern("yyyyMMdd"));
  403. String certEndDate = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
  404. tHuifuMch.setCertDate(certEndDate);
  405. } else {
  406. tHuifuMch.setCertDate("长期");
  407. }
  408. tHuifuMch.setCreateDate(new Date());
  409. tHuifuMch.setModifyDate(new Date());
  410. tHuifuMch.setHuifuId(huifuId);
  411. tHuifuMchCheck.setModifyDate(new Date());
  412. tHuifuMchCheck.setStatus("2");
  413. tHuifuMchCheck.setHuifuId(huifuId);
  414. tHuifuMchService.save(tHuifuMch);
  415. tHuifuMchCheckService.updateById(tHuifuMchCheck);
  416. return "success";
  417. }else {
  418. String respDesc = dataObject.getString("resp_desc");
  419. tHuifuMchCheck.setModifyDate(new Date());
  420. tHuifuMchCheck.setStatus("3");
  421. tHuifuMchCheck.setAuditDesc(respDesc);
  422. tHuifuMchCheckService.updateById(tHuifuMchCheck);
  423. return respDesc;
  424. }
  425. }
  426. /**
  427. * 汇付企业商户入驻
  428. * @param tHuifuMchCheck
  429. * @return
  430. * @throws Exception
  431. */
  432. @Override
  433. public String addEnterprise(THuifuMchCheck tHuifuMchCheck) throws Exception {
  434. // 请求接口
  435. String url = "https://api.huifu.com/v2/merchant/basicdata/ent";
  436. HuifuBaseCommon.doInit(OppsMerchantConfig.getMerchantConfig());
  437. // 请求参数:Data
  438. JSONObject request = new JSONObject();
  439. // 请求流水号
  440. request.put("req_seq_id", HuifuUtils.initReqSeqId());
  441. // 请求日期
  442. request.put("req_date", DateTools.getCurrentDateYYYYMMDD());
  443. // 上级主体ID
  444. request.put("upper_huifu_id", HuifuConstant.HUIFU_ID);
  445. // 商户名称
  446. request.put("reg_name", tHuifuMchCheck.getRegName());
  447. // 商户简称
  448. if(StrUtil.isNotEmpty(tHuifuMchCheck.getShortName())) {
  449. request.put("short_name", tHuifuMchCheck.getShortName());
  450. }
  451. // 公司类型
  452. request.put("ent_type", "3");
  453. // 营业执照编号
  454. request.put("license_code", tHuifuMchCheck.getLicenseCode());
  455. // 营业执照有效期类型,0:非长期有效 ,1:长期有效
  456. request.put("license_validity_type", tHuifuMchCheck.getLicenseValidityType());
  457. // 营业执照有效期开始日期
  458. request.put("license_begin_date", tHuifuMchCheck.getLicenseBeginDate());
  459. // 营业执照有效期截止日期
  460. if (StrUtil.isNotEmpty(tHuifuMchCheck.getLicenseEndDate())) {
  461. request.put("license_end_date", tHuifuMchCheck.getLicenseEndDate());
  462. }
  463. // 注册省
  464. request.put("reg_prov_id", tHuifuMchCheck.getRegProvId());
  465. // 注册市
  466. request.put("reg_area_id", tHuifuMchCheck.getRegAreaId());
  467. // 注册区
  468. request.put("reg_district_id", tHuifuMchCheck.getRegDistrictId());
  469. // 注册详细地址
  470. request.put("reg_detail", tHuifuMchCheck.getRegDetail());
  471. // 法人姓名
  472. request.put("legal_name", tHuifuMchCheck.getName());
  473. // 法人证件类型
  474. request.put("legal_cert_type", "00");
  475. // 法人证件号码
  476. request.put("legal_cert_no", tHuifuMchCheck.getCertNo());
  477. // 法人证件有效期类型,1:长期有效;0:非长期有效 ;
  478. request.put("legal_cert_validity_type", tHuifuMchCheck.getCertValidityType());
  479. // 法人证件有效期开始日期
  480. request.put("legal_cert_begin_date", tHuifuMchCheck.getCertBeginDate());
  481. // 法人证件有效期截止日期
  482. if (StrUtil.isNotEmpty(tHuifuMchCheck.getCertEndDate())) {
  483. request.put("legal_cert_end_date", tHuifuMchCheck.getCertEndDate());
  484. }
  485. // 经营省
  486. request.put("prov_id", tHuifuMchCheck.getProvId());
  487. // 经营市
  488. request.put("area_id", tHuifuMchCheck.getAreaId());
  489. // 经营区
  490. request.put("district_id", tHuifuMchCheck.getDistrictId());
  491. // 经营详细地址
  492. request.put("detail_addr", tHuifuMchCheck.getDetailAddr());
  493. // 联系人姓名
  494. request.put("contact_name", tHuifuMchCheck.getRegName());
  495. // 联系人手机号
  496. request.put("contact_mobile_no", tHuifuMchCheck.getPhone());
  497. // 联系人电子邮箱
  498. request.put("contact_email", tHuifuMchCheck.getEmail());
  499. // 客服电话
  500. request.put("service_phone", tHuifuMchCheck.getServicePhone());
  501. // 经营类型,1:实体,2:虚拟 ;
  502. request.put("busi_type", "1");
  503. // 小票名称
  504. request.put("receipt_name", tHuifuMchCheck.getRegName());
  505. // 所属行业
  506. request.put("mcc", "6071");
  507. // 基本存款账户编号或核准号
  508. if(StrUtil.isNotEmpty(tHuifuMchCheck.getOpenLicenceNo())){
  509. request.put("open_licence_no", tHuifuMchCheck.getOpenLicenceNo());
  510. }
  511. // 开户许可证
  512. if(StrUtil.isNotEmpty(tHuifuMchCheck.getRegAcctPic())){
  513. request.put("reg_acct_pic", tHuifuMchCheck.getRegAcctPic());
  514. }
  515. if(tHuifuMchCheck.getCardType().equals("1")) {
  516. // 结算卡正面
  517. request.put("settle_card_front_pic", tHuifuMchCheck.getCardFrontPic());
  518. // 法人身份证人像面
  519. request.put("settle_cert_back_pic", tHuifuMchCheck.getCertBackPic());
  520. // 法人身份证国徽面
  521. request.put("settle_cert_front_pic", tHuifuMchCheck.getCertFrontPic());
  522. } else {
  523. // 法人身份证人像面
  524. request.put("legal_cert_back_pic", tHuifuMchCheck.getLegalCertBackPic());
  525. // 法人身份证国徽面
  526. request.put("legal_cert_front_pic", tHuifuMchCheck.getLegalCertFrontPic());
  527. }
  528. // 营业执照图片
  529. request.put("license_pic", tHuifuMchCheck.getLicensePic());
  530. // 成立时间
  531. request.put("found_date", tHuifuMchCheck.getFoundDate());
  532. // 法人手机号
  533. request.put("legal_mobile_no", tHuifuMchCheck.getPhone());
  534. // 法人身份证地址
  535. request.put("legal_addr", tHuifuMchCheck.getCertAddress());
  536. // 结算卡信息配置
  537. JSONObject cardInfo = new JSONObject();
  538. // 结算账户类型
  539. cardInfo.put("card_type", tHuifuMchCheck.getCardType());
  540. // 卡户名
  541. cardInfo.put("card_name", tHuifuMchCheck.getCardName());
  542. // 结算账号
  543. cardInfo.put("card_no", tHuifuMchCheck.getCardNo());
  544. // 银行所在省
  545. if (StrUtil.isNotEmpty(tHuifuMchCheck.getCardProvId())) {
  546. cardInfo.put("prov_id", tHuifuMchCheck.getCardProvId());
  547. }
  548. // 银行所在市
  549. if (StrUtil.isNotEmpty(tHuifuMchCheck.getCardAreaId())) {
  550. cardInfo.put("area_id", tHuifuMchCheck.getCardAreaId());
  551. }
  552. // 联行号
  553. if(StrUtil.isNotEmpty(tHuifuMchCheck.getBranchCode())){
  554. cardInfo.put("branch_code", tHuifuMchCheck.getBranchCode());
  555. }
  556. if(StrUtil.isNotEmpty(tHuifuMchCheck.getMp())){
  557. cardInfo.put("mp", tHuifuMchCheck.getMp());
  558. }
  559. request.put("card_info", cardInfo);
  560. // 结算规则配置
  561. JSONObject settleConfig = new JSONObject();
  562. // 结算周期
  563. settleConfig.put("settle_cycle", "T1");
  564. request.put("settle_config", settleConfig);
  565. // 签名:sign
  566. String s = JSON.toJSONString(request);
  567. String s1 = JSON.toJSONString(JSONObject.parseObject(s, TreeMap.class));
  568. String sign = HuifuUtils.sign(s1, HuifuConstant.RSA_PRIVATE_KEY);
  569. // 公共参数
  570. System.out.println("请求参数:"+ request);
  571. JSONObject requestData = new JSONObject();
  572. requestData.put("sys_id", HuifuConstant.SYS_ID);
  573. requestData.put("product_id", HuifuConstant.PRODUCT_ID);
  574. requestData.put("sign", sign);
  575. requestData.put("data", request);
  576. System.out.println("请求体:"+ requestData);
  577. String result = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
  578. System.out.println("返回的数据:"+ result);
  579. JSONObject jsonObject = JSONObject.parseObject(result);
  580. JSONObject dataObject = jsonObject.getJSONObject("data");
  581. String code = dataObject.getString("resp_code");
  582. if(code.equals("90000000")) {
  583. THuifuMch tHuifuMch = new THuifuMch();
  584. BeanUtil.copyProperties(tHuifuMchCheck, tHuifuMch);
  585. String huifuId = dataObject.getString("huifu_id");
  586. // 判断持卡人证件有效期类型,1:长期有效,0:非长期有效
  587. if(tHuifuMchCheck.getCertValidityType().equals("0")) {
  588. LocalDate date = LocalDate.parse(tHuifuMchCheck.getCertEndDate(), DateTimeFormatter.ofPattern("yyyyMMdd"));
  589. String certEndDate = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
  590. tHuifuMch.setCertDate(certEndDate);
  591. } else {
  592. tHuifuMch.setCertDate("长期");
  593. }
  594. tHuifuMch.setCreateDate(new Date());
  595. tHuifuMch.setModifyDate(new Date());
  596. tHuifuMch.setHuifuId(huifuId);
  597. tHuifuMchCheck.setModifyDate(new Date());
  598. tHuifuMchCheck.setStatus("2");
  599. tHuifuMchCheck.setHuifuId(huifuId);
  600. tHuifuMchService.save(tHuifuMch);
  601. tHuifuMchCheckService.updateById(tHuifuMchCheck);
  602. return "success";
  603. }else {
  604. String respDesc = dataObject.getString("resp_desc");
  605. tHuifuMchCheck.setModifyDate(new Date());
  606. tHuifuMchCheck.setStatus("3");
  607. tHuifuMchCheck.setAuditDesc(respDesc);
  608. tHuifuMchCheckService.updateById(tHuifuMchCheck);
  609. return respDesc;
  610. }
  611. }
  612. /**
  613. * 汇付商户基本信息修改
  614. * @param huifuMchCheck
  615. * @return
  616. */
  617. @Override
  618. public String updateMerchant(THuifuMchCheck huifuMchCheck) throws Exception {
  619. // 请求接口
  620. String url = "https://api.huifu.com/v2/merchant/basicdata/modify";
  621. // 请求参数:Data
  622. JSONObject request = new JSONObject();
  623. // 请求流水号
  624. request.put("req_seq_id", HuifuUtils.initReqSeqId());
  625. // 请求日期
  626. request.put("req_date", DateTools.getCurrentDateYYYYMMDD());
  627. // 上级主体ID
  628. request.put("upper_huifu_id", HuifuConstant.HUIFU_ID);
  629. // 汇付客户Id
  630. request.put("huifu_id", huifuMchCheck.getHuifuId());
  631. // 商户名称
  632. request.put("reg_name", huifuMchCheck.getRegName());
  633. // 商户简称
  634. if(StrUtil.isNotEmpty(huifuMchCheck.getShortName())) {
  635. request.put("short_name", huifuMchCheck.getShortName());
  636. }
  637. // 经营省
  638. request.put("prov_id", huifuMchCheck.getProvId());
  639. // 经营市
  640. request.put("area_id", huifuMchCheck.getAreaId());
  641. // 经营区
  642. request.put("district_id", huifuMchCheck.getDistrictId());
  643. // 经营详细地址
  644. request.put("detail_addr", huifuMchCheck.getDetailAddr());
  645. // 联系人姓名
  646. request.put("contact_name", huifuMchCheck.getRegName());
  647. // 联系人手机号
  648. request.put("contact_mobile_no", huifuMchCheck.getPhone());
  649. // 联系人电子邮箱
  650. request.put("contact_email", huifuMchCheck.getEmail());
  651. // // 联系人电子邮箱
  652. // request.put("async_return_url", "http://598ef306.r10.cpolar.top/tHuifuMch/auditNotify");
  653. // 取现信息配置
  654. JSONObject cardInfo = new JSONObject();
  655. cardInfo.put("card_type", huifuMchCheck.getCardType());
  656. cardInfo.put("card_name", huifuMchCheck.getCardName());
  657. cardInfo.put("card_no", huifuMchCheck.getCardNo());
  658. if(StrUtil.isNotEmpty(huifuMchCheck.getCardProvId())) {
  659. cardInfo.put("prov_id", huifuMchCheck.getCardProvId());
  660. }
  661. if(StrUtil.isNotEmpty(huifuMchCheck.getCardAreaId())) {
  662. cardInfo.put("area_id", huifuMchCheck.getCardAreaId());
  663. }
  664. cardInfo.put("cert_type", "00");
  665. cardInfo.put("cert_no", huifuMchCheck.getCertNo());
  666. cardInfo.put("cert_validity_type", huifuMchCheck.getCertValidityType());
  667. cardInfo.put("cert_begin_date", huifuMchCheck.getCertBeginDate());
  668. cardInfo.put("cert_end_date", huifuMchCheck.getCertEndDate());
  669. if(StrUtil.isNotEmpty(huifuMchCheck.getMp())) {
  670. cardInfo.put("mp", huifuMchCheck.getMp());
  671. }
  672. cardInfo.put("settle_card_front_pic", huifuMchCheck.getCardFrontPic());
  673. cardInfo.put("settle_cert_front_pic", huifuMchCheck.getCertFrontPic());
  674. cardInfo.put("settle_cert_back_pic", huifuMchCheck.getCertBackPic());
  675. cardInfo.put("legal_cert_front_pic", huifuMchCheck.getLegalCertFrontPic());
  676. cardInfo.put("legal_cert_back_pic", huifuMchCheck.getLegalCertBackPic());
  677. if(StrUtil.isNotEmpty(huifuMchCheck.getSms())) {
  678. cardInfo.put("verify_code", huifuMchCheck.getSms());
  679. }
  680. request.put("card_info", cardInfo);
  681. // 签名:sign
  682. String s = JSON.toJSONString(request);
  683. String s1 = JSON.toJSONString(JSONObject.parseObject(s, TreeMap.class));
  684. String sign = HuifuUtils.sign(s1, HuifuConstant.RSA_PRIVATE_KEY);
  685. JSONObject requestData = new JSONObject();
  686. requestData.put("sys_id", HuifuConstant.SYS_ID);
  687. requestData.put("product_id", HuifuConstant.PRODUCT_ID);
  688. requestData.put("sign", sign);
  689. requestData.put("data", request);
  690. System.out.println("请求体:"+ requestData);
  691. String result = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
  692. System.out.println("返回的数据:"+ result);
  693. JSONObject jsonObject = JSONObject.parseObject(result);
  694. JSONObject dataObject = jsonObject.getJSONObject("data");
  695. String code = dataObject.getString("resp_code");
  696. if(code.equals("90000000")) {
  697. LambdaQueryWrapper<THuifuMch> queryWrapper = new LambdaQueryWrapper<>();
  698. queryWrapper.eq(THuifuMch::getAdminId,huifuMchCheck.getAdminId());
  699. THuifuMch tHuifuMch = tHuifuMchService.getOne(queryWrapper);
  700. // 排除掉不复制的属性
  701. String[] ignoreProperties = {"id", "createDate","adminId","huifuId"};
  702. BeanUtil.copyProperties(huifuMchCheck, tHuifuMch, ignoreProperties);
  703. // 判断持卡人证件有效期类型,1:长期有效,0:非长期有效
  704. if(huifuMchCheck.getCertValidityType().equals("0")) {
  705. LocalDate date = LocalDate.parse(huifuMchCheck.getCertEndDate(), DateTimeFormatter.ofPattern("yyyyMMdd"));
  706. String certEndDate = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
  707. tHuifuMch.setCertDate(certEndDate);
  708. } else {
  709. tHuifuMch.setCertDate("长期");
  710. }
  711. tHuifuMch.setModifyDate(new Date());
  712. huifuMchCheck.setStatus("2");
  713. huifuMchCheck.setSms(null);
  714. huifuMchCheck.setModifyDate(new Date());
  715. tHuifuMchService.updateById(tHuifuMch);
  716. tHuifuMchCheckService.updateById(huifuMchCheck);
  717. return "success";
  718. }else {
  719. String respDesc = dataObject.getString("resp_desc");
  720. huifuMchCheck.setStatus("3");
  721. huifuMchCheck.setSms(null);
  722. huifuMchCheck.setAuditDesc(respDesc);
  723. huifuMchCheck.setModifyDate(new Date());
  724. tHuifuMchCheckService.updateById(huifuMchCheck);
  725. return respDesc;
  726. }
  727. }
  728. /**
  729. * 汇付上传图片
  730. * @param file
  731. * @return
  732. */
  733. @Override
  734. public String uploadPic(MultipartFile file, HuifuConstant.fileType fileType) {
  735. String url = "https://api.huifu.com/v2/supplementary/picture";
  736. // 请求参数
  737. Map<String, Object> params = new HashMap<String, Object>();
  738. // 请求流水号,需保证当天商户下唯一,推荐采用日期时间+几位流水号的形式
  739. params.put("req_seq_id", SequenceTools.getReqSeqId32());
  740. params.put("req_date", DateTools.getCurrentDateYYYYMMDD());
  741. params.put("file_type", fileType);
  742. params.put("picture", fileType.toValue());
  743. String data = JSON.toJSONString(params);
  744. CloseableHttpClient httpclient1 = HttpClients.createDefault();
  745. CloseableHttpResponse response = null;
  746. String result = null;
  747. try {
  748. // 获取原始文件名
  749. String fileName = file.getOriginalFilename();
  750. // 取得文件扩展名
  751. String extension = fileName.substring(fileName.lastIndexOf("."));
  752. // 创建临时文件
  753. File tempFile = File.createTempFile("temp", extension);
  754. file.transferTo(tempFile);
  755. HttpPost httpPost = new HttpPost(url);
  756. ContentType contentType = ContentType.create("text/plain", Charset.forName("UTF-8"));
  757. MultipartEntityBuilder mEntityBuilder = MultipartEntityBuilder.create();
  758. mEntityBuilder.addTextBody("sys_id", HuifuConstant.SYS_ID, contentType);
  759. mEntityBuilder.addTextBody("product_id", HuifuConstant.PRODUCT_ID, contentType);
  760. mEntityBuilder.addTextBody("data", data, contentType);
  761. mEntityBuilder.addBinaryBody("file", tempFile);
  762. httpPost.setEntity(mEntityBuilder.build());
  763. response = httpclient1.execute(httpPost);
  764. int statusCode = response.getStatusLine().getStatusCode();
  765. if (statusCode == HttpStatus.SC_OK) {
  766. HttpEntity resEntity = response.getEntity();
  767. result = EntityUtils.toString(resEntity);
  768. System.out.print(result);
  769. JSONObject jsonObject = JSONObject.parseObject(result);
  770. JSONObject dataObject = jsonObject.getJSONObject("data");
  771. result = dataObject.getString("file_id");
  772. }
  773. } catch (IOException e) {
  774. e.printStackTrace();
  775. }
  776. return result;
  777. }
  778. @Override
  779. public String refund(String sn, BigDecimal price, String payDate, String remark, String acctSplitBunch, String companyType) throws Exception {
  780. String url = "https://api.huifu.com/v2/trade/payment/scanpay/refund";
  781. HuifuBaseCommon.doInit(OppsMerchantConfig.getMerchantConfig());
  782. JSONObject request = new JSONObject();
  783. request.put("req_seq_id", HuifuUtils.initReqSeqId());
  784. request.put("req_date", DateTools.getCurrentDateYYYYMMDD());
  785. if(StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
  786. request.put("huifu_id", HuifuConstant.SC_DIV_HUIFU_ID);
  787. } else {
  788. request.put("huifu_id", HuifuConstant.SZ_DIV_HUIFU_ID);
  789. }
  790. request.put("ord_amt", price);
  791. request.put("org_req_date", payDate);
  792. request.put("org_req_seq_id", sn);
  793. // 分账明细
  794. request.put("acct_split_bunch", acctSplitBunch);
  795. request.put("notify_url", HuifuConstant.Notify_Refund_Url);
  796. // 签名:sign
  797. String s = JSON.toJSONString(request);
  798. String s1 = JSON.toJSONString(JSONObject.parseObject(s, TreeMap.class));
  799. String sign = HuifuUtils.sign(s1, HuifuConstant.RSA_PRIVATE_KEY);
  800. // 公共参数
  801. System.out.println("请求参数:"+ request);
  802. JSONObject requestData = new JSONObject();
  803. requestData.put("sys_id", HuifuConstant.SYS_ID);
  804. requestData.put("product_id", HuifuConstant.PRODUCT_ID);
  805. requestData.put("sign", sign);
  806. requestData.put("data", request);
  807. log.info("退款请求参数:{}", requestData);
  808. String success = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
  809. System.out.println("返回的数据:"+ success);
  810. // 拿到返回参数
  811. JSONObject result = JSONObject.parseObject(success);
  812. log.info("汇付返回参数:{}", result);
  813. JSONObject data = result.getJSONObject("data");
  814. String transStat = data.getString("trans_stat");
  815. String respCode = data.getString("resp_code");
  816. String respDesc = data.getString("resp_desc");
  817. if(respCode.equals("00000000") || respCode.equals("00000100")) {
  818. return transStat;
  819. } else {
  820. return respDesc;
  821. }
  822. }
  823. /**
  824. * 汇付发送验证码
  825. * @param tHuifuMch
  826. * @return
  827. * @throws Exception
  828. */
  829. @Override
  830. public String sendSms(THuifuMch tHuifuMch) throws Exception {
  831. String url = "https://api.huifu.com/v2/merchant/basicdata/sms/send";
  832. HuifuBaseCommon.doInit(OppsMerchantConfig.getMerchantConfig());
  833. JSONObject request = new JSONObject();
  834. request.put("req_seq_id", HuifuUtils.initReqSeqId());
  835. request.put("req_date", DateTools.getCurrentDateYYYYMMDD());
  836. request.put("huifu_id", tHuifuMch.getHuifuId());
  837. request.put("phone", tHuifuMch.getPhone());
  838. request.put("verify_type", "settleBankChange");
  839. // 签名:sign
  840. String s = JSON.toJSONString(request);
  841. String s1 = JSON.toJSONString(JSONObject.parseObject(s, TreeMap.class));
  842. String sign = HuifuUtils.sign(s1, HuifuConstant.RSA_PRIVATE_KEY);
  843. // 公共参数
  844. System.out.println("请求参数:"+ request);
  845. JSONObject requestData = new JSONObject();
  846. requestData.put("sys_id", HuifuConstant.SYS_ID);
  847. requestData.put("product_id", HuifuConstant.PRODUCT_ID);
  848. requestData.put("sign", sign);
  849. requestData.put("data", request);
  850. System.out.println("请求体:"+ requestData);
  851. String success = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
  852. System.out.println("返回的数据:"+ success);
  853. // 拿到返回参数
  854. JSONObject result = JSONObject.parseObject(success);
  855. log.info("汇付返回参数:{}", result);
  856. JSONObject data = result.getJSONObject("data");
  857. String respCode = data.getString("resp_code");
  858. return respCode;
  859. }
  860. /**
  861. * 汇付上传图片
  862. * @param base64Str
  863. * @return
  864. */
  865. @Override
  866. public String newUploadPic(String base64Str, HuifuConstant.fileType fileType, String huifuId) {
  867. String url = "https://api.huifu.com/v2/supplementary/picture";
  868. // 请求参数
  869. Map<String, Object> params = new HashMap<String, Object>();
  870. // 请求流水号,需保证当天商户下唯一,推荐采用日期时间+几位流水号的形式
  871. params.put("req_seq_id", SequenceTools.getReqSeqId32());
  872. params.put("req_date", DateTools.getCurrentDateYYYYMMDD());
  873. params.put("file_type", fileType);
  874. if(StringUtils.isNotEmpty(huifuId)) {
  875. params.put("huifu_id", huifuId);
  876. }
  877. String data = JSON.toJSONString(params);
  878. CloseableHttpClient httpclient1 = HttpClients.createDefault();
  879. CloseableHttpResponse response = null;
  880. String result = null;
  881. File tempFile = new File("");
  882. try {
  883. tempFile = base64ToTempImage(base64Str);
  884. HttpPost httpPost = new HttpPost(url);
  885. ContentType contentType = ContentType.create("text/plain", Charset.forName("UTF-8"));
  886. MultipartEntityBuilder mEntityBuilder = MultipartEntityBuilder.create();
  887. mEntityBuilder.addTextBody("sys_id", HuifuConstant.SYS_ID, contentType);
  888. mEntityBuilder.addTextBody("product_id", HuifuConstant.PRODUCT_ID, contentType);
  889. mEntityBuilder.addTextBody("data", data, contentType);
  890. mEntityBuilder.addBinaryBody("file", tempFile);
  891. httpPost.setEntity(mEntityBuilder.build());
  892. response = httpclient1.execute(httpPost);
  893. int statusCode = response.getStatusLine().getStatusCode();
  894. if (statusCode == HttpStatus.SC_OK) {
  895. HttpEntity resEntity = response.getEntity();
  896. result = EntityUtils.toString(resEntity);
  897. System.out.print(result);
  898. JSONObject jsonObject = JSONObject.parseObject(result);
  899. JSONObject dataObject = jsonObject.getJSONObject("data");
  900. result = dataObject.getString("file_id");
  901. }
  902. } catch (IOException e) {
  903. e.printStackTrace();
  904. } finally{
  905. tempFile.delete();
  906. }
  907. return result;
  908. }
  909. @Override
  910. public String updateConStat(THuifuMchCheck tHuifuMchCheck) throws BasePayException {
  911. // 请求接口
  912. String url = "https://api.huifu.com/v2/merchant/basicdata/query";
  913. // 请求参数:Data
  914. JSONObject request = new JSONObject();
  915. request.put("req_seq_id", SequenceTools.getReqSeqId32());
  916. request.put("req_date", DateTools.getCurrentDateYYYYMMDD());
  917. request.put("huifu_id", tHuifuMchCheck.getHuifuId());
  918. // 签名:sign
  919. String s = JSON.toJSONString(request);
  920. String s1 = JSON.toJSONString(JSONObject.parseObject(s, TreeMap.class));
  921. String sign = HuifuUtils.sign(s1, HuifuConstant.RSA_PRIVATE_KEY);
  922. // 公共参数
  923. System.out.println("请求参数:"+ request);
  924. JSONObject requestData = new JSONObject();
  925. requestData.put("sys_id", HuifuConstant.SYS_ID);
  926. requestData.put("product_id", HuifuConstant.PRODUCT_ID);
  927. requestData.put("sign", sign);
  928. requestData.put("data", request);
  929. System.out.println("请求体:"+ requestData);
  930. String success = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
  931. JSONObject result = JSONObject.parseObject(success);
  932. log.info("汇付返回参数:{}", result);
  933. JSONObject data = result.getJSONObject("data");
  934. String respCode = data.getString("resp_code");
  935. if(respCode.equals("00000000") || respCode.equals("00000100")) {
  936. try {
  937. ObjectMapper objectMapper = new ObjectMapper();
  938. JsonNode rootNode = objectMapper.readTree(success);
  939. JsonNode agreementInfoList = rootNode.path("data").path("agreement_info_list");
  940. JsonNode agreementNode = objectMapper.readTree(agreementInfoList.asText()).get(0);
  941. String conStatValue = agreementNode.path("con_stat").asText();
  942. System.out.println("con_stat value: " + conStatValue);
  943. tHuifuMchCheck.setConStat(conStatValue);
  944. tHuifuMchCheckService.updateById(tHuifuMchCheck);
  945. return conStatValue;
  946. } catch (Exception e) {
  947. e.printStackTrace();
  948. }
  949. }
  950. return null;
  951. }
  952. @Override
  953. public String checkBalance(THuifuMch tHuifuMch) throws Exception {
  954. // 请求接口
  955. String url = "https://api.huifu.com/v2/trade/acctpayment/balance/query";
  956. HuifuBaseCommon.doInit(OppsMerchantConfig.getMerchantConfig());
  957. // 请求参数:Data
  958. JSONObject request = new JSONObject();
  959. // 请求流水号
  960. request.put("req_seq_id", SequenceTools.getReqSeqId32());
  961. // 请求日期
  962. request.put("req_date", DateTools.getCurrentDateYYYYMMDD());
  963. // 汇付ID
  964. request.put("huifu_id", tHuifuMch.getHuifuId());
  965. // 签名:sign
  966. String s = JSON.toJSONString(request);
  967. String s1 = JSON.toJSONString(JSONObject.parseObject(s, TreeMap.class));
  968. String sign = HuifuUtils.sign(s1, HuifuConstant.RSA_PRIVATE_KEY);
  969. // 公共参数
  970. System.out.println("请求参数:"+ request);
  971. JSONObject requestData = new JSONObject();
  972. requestData.put("sys_id", HuifuConstant.SYS_ID);
  973. requestData.put("product_id", HuifuConstant.PRODUCT_ID);
  974. requestData.put("sign", sign);
  975. requestData.put("data", request);
  976. String result = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
  977. System.out.println("返回的数据:"+ result);
  978. JSONObject jsonObject = JSONObject.parseObject(result);
  979. JSONObject dataObject = jsonObject.getJSONObject("data");
  980. String acctInfoList = dataObject.getString("acctInfo_list");
  981. JSONArray acctInfoArray = JSONArray.parseArray(acctInfoList);
  982. // 如果 "acctInfo_list" 是数组,遍历数组并获取 "balance_amt" 字段的值
  983. String balanceAmt = "0";
  984. for (int i = 0; i < acctInfoArray.size(); i++) {
  985. JSONObject acctInfoObject = acctInfoArray.getJSONObject(i);
  986. balanceAmt = acctInfoObject.getString("balance_amt");
  987. }
  988. return balanceAmt;
  989. }
  990. }