THuifuMchServiceImpl.java 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758
  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.THuifuMch;
  19. import com.szwl.mapper.THuifuMchMapper;
  20. import com.szwl.model.entity.THuifuMchCheck;
  21. import com.szwl.service.THuifuMchCheckService;
  22. import com.szwl.service.THuifuMchService;
  23. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  24. import com.szwl.util.HuifuUtils;
  25. import lombok.extern.slf4j.Slf4j;
  26. import org.apache.commons.lang.StringUtils;
  27. import org.apache.http.HttpEntity;
  28. import org.apache.http.HttpStatus;
  29. import org.apache.http.client.methods.CloseableHttpResponse;
  30. import org.apache.http.client.methods.HttpPost;
  31. import org.apache.http.entity.ContentType;
  32. import org.apache.http.entity.mime.MultipartEntityBuilder;
  33. import org.apache.http.impl.client.CloseableHttpClient;
  34. import org.apache.http.impl.client.HttpClients;
  35. import org.apache.http.util.EntityUtils;
  36. import org.springframework.beans.factory.annotation.Autowired;
  37. import org.springframework.stereotype.Service;
  38. import org.springframework.web.multipart.MultipartFile;
  39. import java.io.File;
  40. import java.io.IOException;
  41. import java.math.BigDecimal;
  42. import java.nio.charset.Charset;
  43. import java.time.LocalDate;
  44. import java.time.format.DateTimeFormatter;
  45. import java.util.*;
  46. import static com.szwl.util.HuifuUtils.base64ToTempImage;
  47. /**
  48. * <p>
  49. * 服务实现类
  50. * </p>
  51. *
  52. * @author wuhs
  53. * @since 2023-07-12
  54. */
  55. @Slf4j
  56. @Service
  57. public class THuifuMchServiceImpl extends ServiceImpl<THuifuMchMapper, THuifuMch> implements THuifuMchService {
  58. @Autowired
  59. private THuifuMchCheckService tHuifuMchCheckService;
  60. @Autowired
  61. private THuifuMchService tHuifuMchService;
  62. /**
  63. * 汇付个人商户入驻
  64. * @param tHuifuMchCheck
  65. * @return
  66. * @throws Exception
  67. */
  68. @Override
  69. public String addPersonage(THuifuMchCheck tHuifuMchCheck) throws Exception {
  70. // 请求接口
  71. String url = "https://api.huifu.com/v2/merchant/basicdata/indv";
  72. HuifuBaseCommon.doInit(OppsMerchantConfig.getMerchantConfig());
  73. // 请求参数:Data
  74. JSONObject request = new JSONObject();
  75. // 请求流水号
  76. request.put("req_seq_id", HuifuUtils.initReqSeqId());
  77. // 请求日期
  78. request.put("req_date", DateTools.getCurrentDateYYYYMMDD());
  79. // 上级主体ID
  80. request.put("upper_huifu_id", HuifuConstant.HUIFU_ID);
  81. // 商户名称
  82. request.put("reg_name", tHuifuMchCheck.getRegName());
  83. // 商户简称
  84. if(StrUtil.isNotEmpty(tHuifuMchCheck.getShortName())) {
  85. request.put("short_name", tHuifuMchCheck.getShortName());
  86. }
  87. // 经营省
  88. request.put("prov_id", tHuifuMchCheck.getProvId());
  89. // 经营市
  90. request.put("area_id", tHuifuMchCheck.getAreaId());
  91. // 经营区
  92. request.put("district_id", tHuifuMchCheck.getDistrictId());
  93. // 经营详细地址
  94. request.put("detail_addr", tHuifuMchCheck.getDetailAddr());
  95. // 联系人姓名
  96. request.put("contact_name", tHuifuMchCheck.getRegName());
  97. // 联系人手机号
  98. request.put("contact_mobile_no", tHuifuMchCheck.getPhone());
  99. // 联系人电子邮箱
  100. request.put("contact_email", tHuifuMchCheck.getEmail());
  101. // 商户名
  102. request.put("sms_send_flag", "M");
  103. // 异步通知地址:审核结果消息接收地址
  104. // request.put("async_return_url", "异步通知地址");
  105. // 法人证件号码
  106. request.put("legal_cert_no", tHuifuMchCheck.getCertNo());
  107. // 结算卡正面
  108. request.put("settle_card_front_pic", tHuifuMchCheck.getCardFrontPic());
  109. // 法人身份证国徽面
  110. request.put("legal_cert_back_pic", tHuifuMchCheck.getLegalCertBackPic());
  111. // 法人身份证人像面
  112. request.put("legal_cert_front_pic", tHuifuMchCheck.getLegalCertFrontPic());
  113. // 结算卡信息配置
  114. JSONObject cardInfo = new JSONObject();
  115. // 卡户名
  116. cardInfo.put("card_name", tHuifuMchCheck.getCardName());
  117. // 结算账号
  118. cardInfo.put("card_no", tHuifuMchCheck.getCardNo());
  119. // 银行所在省
  120. cardInfo.put("prov_id", tHuifuMchCheck.getCardProvId());
  121. // 银行所在市
  122. cardInfo.put("area_id", tHuifuMchCheck.getCardAreaId());
  123. // 持卡人证件类型
  124. cardInfo.put("cert_type", "00");
  125. // 持卡人证件号码
  126. cardInfo.put("cert_no", tHuifuMchCheck.getCertNo());
  127. // 持卡人证件有效期类型,1:长期有效,0:非长期有效;
  128. cardInfo.put("cert_validity_type", tHuifuMchCheck.getCertValidityType());
  129. // 持卡人证件有效期开始
  130. cardInfo.put("cert_begin_date", tHuifuMchCheck.getCertBeginDate());
  131. // 持卡人证件有效期截止日期
  132. if (StrUtil.isNotEmpty(tHuifuMchCheck.getCertEndDate())) {
  133. cardInfo.put("cert_end_date", tHuifuMchCheck.getCertEndDate());
  134. }
  135. // 结算人手机号
  136. cardInfo.put("mp", tHuifuMchCheck.getMp());
  137. request.put("card_info", cardInfo);
  138. // 结算规则配置
  139. JSONObject settleConfig = new JSONObject();
  140. // 结算周期
  141. settleConfig.put("settle_cycle", "T1");
  142. request.put("settle_config", settleConfig);
  143. // 签名:sign
  144. String s = JSON.toJSONString(request);
  145. String s1 = JSON.toJSONString(JSONObject.parseObject(s, TreeMap.class));
  146. String sign = HuifuUtils.sign(s1, HuifuConstant.RSA_PRIVATE_KEY);
  147. // 公共参数
  148. System.out.println("请求参数:"+ request);
  149. JSONObject requestData = new JSONObject();
  150. requestData.put("sys_id", HuifuConstant.SYS_ID);
  151. requestData.put("product_id", HuifuConstant.PRODUCT_ID);
  152. requestData.put("sign", sign);
  153. requestData.put("data", request);
  154. String result = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
  155. System.out.println("返回的数据:"+ result);
  156. JSONObject jsonObject = JSONObject.parseObject(result);
  157. JSONObject dataObject = jsonObject.getJSONObject("data");
  158. String code = dataObject.getString("resp_code");
  159. if(code.equals("90000000")) {
  160. THuifuMch tHuifuMch = new THuifuMch();
  161. BeanUtil.copyProperties(tHuifuMchCheck, tHuifuMch);
  162. String huifuId = dataObject.getString("huifu_id");
  163. // 判断持卡人证件有效期类型,1:长期有效,0:非长期有效
  164. if(tHuifuMchCheck.getCertValidityType().equals("0")) {
  165. LocalDate date = LocalDate.parse(tHuifuMchCheck.getCertEndDate(), DateTimeFormatter.ofPattern("yyyyMMdd"));
  166. String certEndDate = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
  167. tHuifuMch.setCertDate(certEndDate);
  168. } else {
  169. tHuifuMch.setCertDate("长期");
  170. }
  171. tHuifuMch.setCreateDate(new Date());
  172. tHuifuMch.setModifyDate(new Date());
  173. tHuifuMch.setHuifuId(huifuId);
  174. tHuifuMchCheck.setModifyDate(new Date());
  175. tHuifuMchCheck.setStatus("2");
  176. tHuifuMchCheck.setHuifuId(huifuId);
  177. tHuifuMchService.save(tHuifuMch);
  178. tHuifuMchCheckService.updateById(tHuifuMchCheck);
  179. return "success";
  180. }else {
  181. String respDesc = dataObject.getString("resp_desc");
  182. tHuifuMchCheck.setModifyDate(new Date());
  183. tHuifuMchCheck.setStatus("3");
  184. tHuifuMchCheck.setAuditDesc(respDesc);
  185. tHuifuMchCheckService.updateById(tHuifuMchCheck);
  186. return respDesc;
  187. }
  188. }
  189. /**
  190. * 汇付企业商户入驻
  191. * @param tHuifuMchCheck
  192. * @return
  193. * @throws Exception
  194. */
  195. @Override
  196. public String addEnterprise(THuifuMchCheck tHuifuMchCheck) throws Exception {
  197. // 请求接口
  198. String url = "https://api.huifu.com/v2/merchant/basicdata/ent";
  199. HuifuBaseCommon.doInit(OppsMerchantConfig.getMerchantConfig());
  200. // 请求参数:Data
  201. JSONObject request = new JSONObject();
  202. // 请求流水号
  203. request.put("req_seq_id", HuifuUtils.initReqSeqId());
  204. // 请求日期
  205. request.put("req_date", DateTools.getCurrentDateYYYYMMDD());
  206. // 上级主体ID
  207. request.put("upper_huifu_id", HuifuConstant.HUIFU_ID);
  208. // 商户名称
  209. request.put("reg_name", tHuifuMchCheck.getRegName());
  210. // 商户简称
  211. if(StrUtil.isNotEmpty(tHuifuMchCheck.getShortName())) {
  212. request.put("short_name", tHuifuMchCheck.getShortName());
  213. }
  214. // 公司类型
  215. request.put("ent_type", "3");
  216. // 营业执照编号
  217. request.put("license_code", tHuifuMchCheck.getLicenseCode());
  218. // 营业执照有效期类型,0:非长期有效 ,1:长期有效
  219. request.put("license_validity_type", tHuifuMchCheck.getLicenseValidityType());
  220. // 营业执照有效期开始日期
  221. request.put("license_begin_date", "20151208");
  222. // 营业执照有效期截止日期
  223. if (StrUtil.isNotEmpty(tHuifuMchCheck.getLicenseEndDate())) {
  224. request.put("license_end_date", tHuifuMchCheck.getLicenseEndDate());
  225. }
  226. // 注册省
  227. request.put("reg_prov_id", tHuifuMchCheck.getRegProvId());
  228. // 注册市
  229. request.put("reg_area_id", tHuifuMchCheck.getRegAreaId());
  230. // 注册区
  231. request.put("reg_district_id", tHuifuMchCheck.getRegDistrictId());
  232. // 注册详细地址
  233. request.put("reg_detail", tHuifuMchCheck.getRegDetail());
  234. // 法人姓名
  235. request.put("legal_name", tHuifuMchCheck.getName());
  236. // 法人证件类型
  237. request.put("legal_cert_type", "00");
  238. // 法人证件号码
  239. request.put("legal_cert_no", tHuifuMchCheck.getCertNo());
  240. // 法人证件有效期类型,1:长期有效;0:非长期有效 ;
  241. request.put("legal_cert_validity_type", tHuifuMchCheck.getCertValidityType());
  242. // 法人证件有效期开始日期
  243. request.put("legal_cert_begin_date", tHuifuMchCheck.getCertBeginDate());
  244. // 法人证件有效期截止日期
  245. if (StrUtil.isNotEmpty(tHuifuMchCheck.getCertEndDate())) {
  246. request.put("legal_cert_end_date", tHuifuMchCheck.getCertEndDate());
  247. }
  248. // 经营省
  249. request.put("prov_id", tHuifuMchCheck.getProvId());
  250. // 经营市
  251. request.put("area_id", tHuifuMchCheck.getAreaId());
  252. // 经营区
  253. request.put("district_id", tHuifuMchCheck.getDistrictId());
  254. // 经营详细地址
  255. request.put("detail_addr", tHuifuMchCheck.getDetailAddr());
  256. // 联系人姓名
  257. request.put("contact_name", tHuifuMchCheck.getRegName());
  258. // 联系人手机号
  259. request.put("contact_mobile_no", tHuifuMchCheck.getPhone());
  260. // 联系人电子邮箱
  261. request.put("contact_email", tHuifuMchCheck.getEmail());
  262. // 客服电话
  263. request.put("service_phone", tHuifuMchCheck.getServicePhone());
  264. // 经营类型,1:实体,2:虚拟 ;
  265. request.put("busi_type", "1");
  266. // 小票名称
  267. request.put("receipt_name", tHuifuMchCheck.getRegName());
  268. // 所属行业
  269. request.put("mcc", "6071");
  270. // 基本存款账户编号或核准号
  271. if(StrUtil.isNotEmpty(tHuifuMchCheck.getOpenLicenceNo())){
  272. request.put("open_licence_no", tHuifuMchCheck.getOpenLicenceNo());
  273. }
  274. // 开户许可证
  275. if(StrUtil.isNotEmpty(tHuifuMchCheck.getRegAcctPic())){
  276. request.put("reg_acct_pic", tHuifuMchCheck.getRegAcctPic());
  277. }
  278. if(tHuifuMchCheck.getCardType().equals("1")) {
  279. // 结算卡正面
  280. request.put("settle_card_front_pic", tHuifuMchCheck.getCardFrontPic());
  281. // 法人身份证人像面
  282. request.put("settle_cert_back_pic", tHuifuMchCheck.getCertBackPic());
  283. // 法人身份证国徽面
  284. request.put("settle_cert_front_pic", tHuifuMchCheck.getCertFrontPic());
  285. } else {
  286. // 法人身份证人像面
  287. request.put("legal_cert_back_pic", tHuifuMchCheck.getLegalCertBackPic());
  288. // 法人身份证国徽面
  289. request.put("legal_cert_front_pic", tHuifuMchCheck.getLegalCertFrontPic());
  290. }
  291. // 营业执照图片
  292. request.put("license_pic", tHuifuMchCheck.getLicensePic());
  293. // 成立时间
  294. request.put("found_date", tHuifuMchCheck.getFoundDate());
  295. // 法人手机号
  296. request.put("legal_mobile_no", tHuifuMchCheck.getPhone());
  297. // 法人身份证地址
  298. request.put("legal_addr", tHuifuMchCheck.getCertAddress());
  299. // 结算卡信息配置
  300. JSONObject cardInfo = new JSONObject();
  301. // 结算账户类型
  302. cardInfo.put("card_type", tHuifuMchCheck.getCardType());
  303. // 卡户名
  304. cardInfo.put("card_name", tHuifuMchCheck.getCardName());
  305. // 结算账号
  306. cardInfo.put("card_no", tHuifuMchCheck.getCardNo());
  307. // 银行所在省
  308. if (StrUtil.isNotEmpty(tHuifuMchCheck.getCardProvId())) {
  309. cardInfo.put("prov_id", tHuifuMchCheck.getCardProvId());
  310. }
  311. // 银行所在市
  312. if (StrUtil.isNotEmpty(tHuifuMchCheck.getCardAreaId())) {
  313. cardInfo.put("area_id", tHuifuMchCheck.getCardAreaId());
  314. }
  315. // 联行号
  316. if(StrUtil.isNotEmpty(tHuifuMchCheck.getBranchCode())){
  317. cardInfo.put("branch_code", tHuifuMchCheck.getBranchCode());
  318. }
  319. if(StrUtil.isNotEmpty(tHuifuMchCheck.getMp())){
  320. cardInfo.put("mp", tHuifuMchCheck.getMp());
  321. }
  322. request.put("card_info", cardInfo);
  323. // 结算规则配置
  324. JSONObject settleConfig = new JSONObject();
  325. // 结算周期
  326. settleConfig.put("settle_cycle", "T1");
  327. request.put("settle_config", settleConfig);
  328. // 签名:sign
  329. String s = JSON.toJSONString(request);
  330. String s1 = JSON.toJSONString(JSONObject.parseObject(s, TreeMap.class));
  331. String sign = HuifuUtils.sign(s1, HuifuConstant.RSA_PRIVATE_KEY);
  332. // 公共参数
  333. System.out.println("请求参数:"+ request);
  334. JSONObject requestData = new JSONObject();
  335. requestData.put("sys_id", HuifuConstant.SYS_ID);
  336. requestData.put("product_id", HuifuConstant.PRODUCT_ID);
  337. requestData.put("sign", sign);
  338. requestData.put("data", request);
  339. System.out.println("请求体:"+ requestData);
  340. String result = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
  341. System.out.println("返回的数据:"+ result);
  342. JSONObject jsonObject = JSONObject.parseObject(result);
  343. JSONObject dataObject = jsonObject.getJSONObject("data");
  344. String code = dataObject.getString("resp_code");
  345. if(code.equals("90000000")) {
  346. THuifuMch tHuifuMch = new THuifuMch();
  347. BeanUtil.copyProperties(tHuifuMchCheck, tHuifuMch);
  348. String huifuId = dataObject.getString("huifu_id");
  349. // 判断持卡人证件有效期类型,1:长期有效,0:非长期有效
  350. if(tHuifuMchCheck.getCertValidityType().equals("0")) {
  351. LocalDate date = LocalDate.parse(tHuifuMchCheck.getCertEndDate(), DateTimeFormatter.ofPattern("yyyyMMdd"));
  352. String certEndDate = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
  353. tHuifuMch.setCertDate(certEndDate);
  354. } else {
  355. tHuifuMch.setCertDate("长期");
  356. }
  357. tHuifuMch.setCreateDate(new Date());
  358. tHuifuMch.setModifyDate(new Date());
  359. tHuifuMch.setHuifuId(huifuId);
  360. tHuifuMchCheck.setModifyDate(new Date());
  361. tHuifuMchCheck.setStatus("2");
  362. tHuifuMchCheck.setHuifuId(huifuId);
  363. tHuifuMchService.save(tHuifuMch);
  364. tHuifuMchCheckService.updateById(tHuifuMchCheck);
  365. return "success";
  366. }else {
  367. String respDesc = dataObject.getString("resp_desc");
  368. tHuifuMchCheck.setModifyDate(new Date());
  369. tHuifuMchCheck.setStatus("3");
  370. tHuifuMchCheck.setAuditDesc(respDesc);
  371. tHuifuMchCheckService.updateById(tHuifuMchCheck);
  372. return respDesc;
  373. }
  374. }
  375. /**
  376. * 汇付商户基本信息修改
  377. * @param huifuMchCheck
  378. * @return
  379. */
  380. @Override
  381. public String updateMerchant(THuifuMchCheck huifuMchCheck) throws Exception {
  382. // 请求接口
  383. String url = "https://api.huifu.com/v2/merchant/basicdata/modify";
  384. // 请求参数:Data
  385. JSONObject request = new JSONObject();
  386. // 请求流水号
  387. request.put("req_seq_id", HuifuUtils.initReqSeqId());
  388. // 请求日期
  389. request.put("req_date", DateTools.getCurrentDateYYYYMMDD());
  390. // 上级主体ID
  391. request.put("upper_huifu_id", HuifuConstant.HUIFU_ID);
  392. // 汇付客户Id
  393. request.put("huifu_id", huifuMchCheck.getHuifuId());
  394. // 商户名称
  395. request.put("reg_name", huifuMchCheck.getRegName());
  396. // 商户简称
  397. if(StrUtil.isNotEmpty(huifuMchCheck.getShortName())) {
  398. request.put("short_name", huifuMchCheck.getShortName());
  399. }
  400. // 经营省
  401. request.put("prov_id", huifuMchCheck.getProvId());
  402. // 经营市
  403. request.put("area_id", huifuMchCheck.getAreaId());
  404. // 经营区
  405. request.put("district_id", huifuMchCheck.getDistrictId());
  406. // 经营详细地址
  407. request.put("detail_addr", huifuMchCheck.getDetailAddr());
  408. // 联系人姓名
  409. request.put("contact_name", huifuMchCheck.getRegName());
  410. // 联系人手机号
  411. request.put("contact_mobile_no", huifuMchCheck.getPhone());
  412. // 联系人电子邮箱
  413. request.put("contact_email", huifuMchCheck.getEmail());
  414. // // 联系人电子邮箱
  415. // request.put("async_return_url", "http://598ef306.r10.cpolar.top/tHuifuMch/auditNotify");
  416. // 取现信息配置
  417. JSONObject cardInfo = new JSONObject();
  418. cardInfo.put("card_type", huifuMchCheck.getCardType());
  419. cardInfo.put("card_name", huifuMchCheck.getCardName());
  420. cardInfo.put("card_no", huifuMchCheck.getCardNo());
  421. if(StrUtil.isNotEmpty(huifuMchCheck.getCardProvId())) {
  422. cardInfo.put("prov_id", huifuMchCheck.getCardProvId());
  423. }
  424. if(StrUtil.isNotEmpty(huifuMchCheck.getCardAreaId())) {
  425. cardInfo.put("area_id", huifuMchCheck.getCardAreaId());
  426. }
  427. cardInfo.put("cert_type", "00");
  428. cardInfo.put("cert_no", huifuMchCheck.getCertNo());
  429. cardInfo.put("cert_validity_type", huifuMchCheck.getCertValidityType());
  430. cardInfo.put("cert_begin_date", huifuMchCheck.getCertBeginDate());
  431. cardInfo.put("cert_end_date", huifuMchCheck.getCertEndDate());
  432. if(StrUtil.isNotEmpty(huifuMchCheck.getMp())) {
  433. cardInfo.put("mp", huifuMchCheck.getMp());
  434. }
  435. cardInfo.put("settle_card_front_pic", huifuMchCheck.getCardFrontPic());
  436. cardInfo.put("settle_cert_front_pic", huifuMchCheck.getCertFrontPic());
  437. cardInfo.put("settle_cert_back_pic", huifuMchCheck.getCertBackPic());
  438. cardInfo.put("legal_cert_front_pic", huifuMchCheck.getLegalCertFrontPic());
  439. cardInfo.put("legal_cert_back_pic", huifuMchCheck.getLegalCertBackPic());
  440. if(StrUtil.isNotEmpty(huifuMchCheck.getSms())) {
  441. cardInfo.put("verify_code", huifuMchCheck.getSms());
  442. }
  443. request.put("card_info", cardInfo);
  444. // 签名:sign
  445. String s = JSON.toJSONString(request);
  446. String s1 = JSON.toJSONString(JSONObject.parseObject(s, TreeMap.class));
  447. String sign = HuifuUtils.sign(s1, HuifuConstant.RSA_PRIVATE_KEY);
  448. JSONObject requestData = new JSONObject();
  449. requestData.put("sys_id", HuifuConstant.SYS_ID);
  450. requestData.put("product_id", HuifuConstant.PRODUCT_ID);
  451. requestData.put("sign", sign);
  452. requestData.put("data", request);
  453. System.out.println("请求体:"+ requestData);
  454. String result = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
  455. System.out.println("返回的数据:"+ result);
  456. JSONObject jsonObject = JSONObject.parseObject(result);
  457. JSONObject dataObject = jsonObject.getJSONObject("data");
  458. String code = dataObject.getString("resp_code");
  459. if(code.equals("90000000")) {
  460. LambdaQueryWrapper<THuifuMch> queryWrapper = new LambdaQueryWrapper<>();
  461. queryWrapper.eq(THuifuMch::getAdminId,huifuMchCheck.getAdminId());
  462. THuifuMch tHuifuMch = tHuifuMchService.getOne(queryWrapper);
  463. // 排除掉不复制的属性
  464. String[] ignoreProperties = {"id", "createDate","adminId","huifuId"};
  465. BeanUtil.copyProperties(huifuMchCheck, tHuifuMch, ignoreProperties);
  466. // 判断持卡人证件有效期类型,1:长期有效,0:非长期有效
  467. if(huifuMchCheck.getCertValidityType().equals("0")) {
  468. LocalDate date = LocalDate.parse(huifuMchCheck.getCertEndDate(), DateTimeFormatter.ofPattern("yyyyMMdd"));
  469. String certEndDate = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
  470. tHuifuMch.setCertDate(certEndDate);
  471. } else {
  472. tHuifuMch.setCertDate("长期");
  473. }
  474. tHuifuMch.setModifyDate(new Date());
  475. huifuMchCheck.setStatus("2");
  476. huifuMchCheck.setSms(null);
  477. huifuMchCheck.setModifyDate(new Date());
  478. tHuifuMchService.updateById(tHuifuMch);
  479. tHuifuMchCheckService.updateById(huifuMchCheck);
  480. return "success";
  481. }else {
  482. String respDesc = dataObject.getString("resp_desc");
  483. huifuMchCheck.setStatus("3");
  484. huifuMchCheck.setSms(null);
  485. huifuMchCheck.setAuditDesc(respDesc);
  486. huifuMchCheck.setModifyDate(new Date());
  487. tHuifuMchCheckService.updateById(huifuMchCheck);
  488. return respDesc;
  489. }
  490. }
  491. /**
  492. * 汇付上传图片
  493. * @param file
  494. * @return
  495. */
  496. @Override
  497. public String uploadPic(MultipartFile file, HuifuConstant.fileType fileType) {
  498. String url = "https://api.huifu.com/v2/supplementary/picture";
  499. // 请求参数
  500. Map<String, Object> params = new HashMap<String, Object>();
  501. // 请求流水号,需保证当天商户下唯一,推荐采用日期时间+几位流水号的形式
  502. params.put("req_seq_id", SequenceTools.getReqSeqId32());
  503. params.put("req_date", DateTools.getCurrentDateYYYYMMDD());
  504. params.put("file_type", fileType);
  505. params.put("picture", fileType.toValue());
  506. String data = JSON.toJSONString(params);
  507. CloseableHttpClient httpclient1 = HttpClients.createDefault();
  508. CloseableHttpResponse response = null;
  509. String result = null;
  510. try {
  511. // 获取原始文件名
  512. String fileName = file.getOriginalFilename();
  513. // 取得文件扩展名
  514. String extension = fileName.substring(fileName.lastIndexOf("."));
  515. // 创建临时文件
  516. File tempFile = File.createTempFile("temp", extension);
  517. file.transferTo(tempFile);
  518. HttpPost httpPost = new HttpPost(url);
  519. ContentType contentType = ContentType.create("text/plain", Charset.forName("UTF-8"));
  520. MultipartEntityBuilder mEntityBuilder = MultipartEntityBuilder.create();
  521. mEntityBuilder.addTextBody("sys_id", HuifuConstant.SYS_ID, contentType);
  522. mEntityBuilder.addTextBody("product_id", HuifuConstant.PRODUCT_ID, contentType);
  523. mEntityBuilder.addTextBody("data", data, contentType);
  524. mEntityBuilder.addBinaryBody("file", tempFile);
  525. httpPost.setEntity(mEntityBuilder.build());
  526. response = httpclient1.execute(httpPost);
  527. int statusCode = response.getStatusLine().getStatusCode();
  528. if (statusCode == HttpStatus.SC_OK) {
  529. HttpEntity resEntity = response.getEntity();
  530. result = EntityUtils.toString(resEntity);
  531. System.out.print(result);
  532. JSONObject jsonObject = JSONObject.parseObject(result);
  533. JSONObject dataObject = jsonObject.getJSONObject("data");
  534. result = dataObject.getString("file_id");
  535. }
  536. } catch (IOException e) {
  537. e.printStackTrace();
  538. }
  539. return result;
  540. }
  541. @Override
  542. public String refund(String sn, BigDecimal price, String payDate, String remark, String acctSplitBunch, String companyType) throws Exception {
  543. String url = "https://api.huifu.com/v2/trade/payment/scanpay/refund";
  544. HuifuBaseCommon.doInit(OppsMerchantConfig.getMerchantConfig());
  545. JSONObject request = new JSONObject();
  546. request.put("req_seq_id", HuifuUtils.initReqSeqId());
  547. request.put("req_date", DateTools.getCurrentDateYYYYMMDD());
  548. if(StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
  549. request.put("huifu_id", HuifuConstant.SC_DIV_HUIFU_ID);
  550. } else {
  551. request.put("huifu_id", HuifuConstant.SZ_DIV_HUIFU_ID);
  552. }
  553. request.put("ord_amt", price);
  554. request.put("org_req_date", payDate);
  555. request.put("org_req_seq_id", sn);
  556. // 分账明细
  557. request.put("acct_split_bunch", acctSplitBunch);
  558. request.put("notify_url", HuifuConstant.Notify_Refund_Url);
  559. // 签名:sign
  560. String s = JSON.toJSONString(request);
  561. String s1 = JSON.toJSONString(JSONObject.parseObject(s, TreeMap.class));
  562. String sign = HuifuUtils.sign(s1, HuifuConstant.RSA_PRIVATE_KEY);
  563. // 公共参数
  564. System.out.println("请求参数:"+ request);
  565. JSONObject requestData = new JSONObject();
  566. requestData.put("sys_id", HuifuConstant.SYS_ID);
  567. requestData.put("product_id", HuifuConstant.PRODUCT_ID);
  568. requestData.put("sign", sign);
  569. requestData.put("data", request);
  570. log.info("退款请求参数:{}", requestData);
  571. String success = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
  572. System.out.println("返回的数据:"+ success);
  573. // 拿到返回参数
  574. JSONObject result = JSONObject.parseObject(success);
  575. log.info("汇付返回参数:{}", result);
  576. JSONObject data = result.getJSONObject("data");
  577. String transStat = data.getString("trans_stat");
  578. String respCode = data.getString("resp_code");
  579. String respDesc = data.getString("resp_desc");
  580. if(respCode.equals("00000000") || respCode.equals("00000100")) {
  581. return transStat;
  582. } else {
  583. return respDesc;
  584. }
  585. }
  586. /**
  587. * 汇付发送验证码
  588. * @param tHuifuMch
  589. * @return
  590. * @throws Exception
  591. */
  592. @Override
  593. public String sendSms(THuifuMch tHuifuMch) throws Exception {
  594. String url = "https://api.huifu.com/v2/merchant/basicdata/sms/send";
  595. HuifuBaseCommon.doInit(OppsMerchantConfig.getMerchantConfig());
  596. JSONObject request = new JSONObject();
  597. request.put("req_seq_id", HuifuUtils.initReqSeqId());
  598. request.put("req_date", DateTools.getCurrentDateYYYYMMDD());
  599. request.put("huifu_id", tHuifuMch.getHuifuId());
  600. request.put("phone", tHuifuMch.getPhone());
  601. request.put("verify_type", "settleBankChange");
  602. // 签名:sign
  603. String s = JSON.toJSONString(request);
  604. String s1 = JSON.toJSONString(JSONObject.parseObject(s, TreeMap.class));
  605. String sign = HuifuUtils.sign(s1, HuifuConstant.RSA_PRIVATE_KEY);
  606. // 公共参数
  607. System.out.println("请求参数:"+ request);
  608. JSONObject requestData = new JSONObject();
  609. requestData.put("sys_id", HuifuConstant.SYS_ID);
  610. requestData.put("product_id", HuifuConstant.PRODUCT_ID);
  611. requestData.put("sign", sign);
  612. requestData.put("data", request);
  613. System.out.println("请求体:"+ requestData);
  614. String success = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
  615. System.out.println("返回的数据:"+ success);
  616. // 拿到返回参数
  617. JSONObject result = JSONObject.parseObject(success);
  618. log.info("汇付返回参数:{}", result);
  619. JSONObject data = result.getJSONObject("data");
  620. String respCode = data.getString("resp_code");
  621. return respCode;
  622. }
  623. /**
  624. * 汇付上传图片
  625. * @param base64Str
  626. * @return
  627. */
  628. @Override
  629. public String newUploadPic(String base64Str, HuifuConstant.fileType fileType, String huifuId) {
  630. String url = "https://api.huifu.com/v2/supplementary/picture";
  631. // 请求参数
  632. Map<String, Object> params = new HashMap<String, Object>();
  633. // 请求流水号,需保证当天商户下唯一,推荐采用日期时间+几位流水号的形式
  634. params.put("req_seq_id", SequenceTools.getReqSeqId32());
  635. params.put("req_date", DateTools.getCurrentDateYYYYMMDD());
  636. params.put("file_type", fileType);
  637. if(StringUtils.isNotEmpty(huifuId)) {
  638. params.put("huifu_id", huifuId);
  639. }
  640. String data = JSON.toJSONString(params);
  641. CloseableHttpClient httpclient1 = HttpClients.createDefault();
  642. CloseableHttpResponse response = null;
  643. String result = null;
  644. File tempFile = new File("");
  645. try {
  646. tempFile = base64ToTempImage(base64Str);
  647. HttpPost httpPost = new HttpPost(url);
  648. ContentType contentType = ContentType.create("text/plain", Charset.forName("UTF-8"));
  649. MultipartEntityBuilder mEntityBuilder = MultipartEntityBuilder.create();
  650. mEntityBuilder.addTextBody("sys_id", HuifuConstant.SYS_ID, contentType);
  651. mEntityBuilder.addTextBody("product_id", HuifuConstant.PRODUCT_ID, contentType);
  652. mEntityBuilder.addTextBody("data", data, contentType);
  653. mEntityBuilder.addBinaryBody("file", tempFile);
  654. httpPost.setEntity(mEntityBuilder.build());
  655. response = httpclient1.execute(httpPost);
  656. int statusCode = response.getStatusLine().getStatusCode();
  657. if (statusCode == HttpStatus.SC_OK) {
  658. HttpEntity resEntity = response.getEntity();
  659. result = EntityUtils.toString(resEntity);
  660. System.out.print(result);
  661. JSONObject jsonObject = JSONObject.parseObject(result);
  662. JSONObject dataObject = jsonObject.getJSONObject("data");
  663. result = dataObject.getString("file_id");
  664. }
  665. } catch (IOException e) {
  666. e.printStackTrace();
  667. } finally{
  668. tempFile.delete();
  669. }
  670. return result;
  671. }
  672. @Override
  673. public String updateConStat(THuifuMchCheck tHuifuMchCheck) throws BasePayException {
  674. // 请求接口
  675. String url = "https://api.huifu.com/v2/merchant/basicdata/query";
  676. // 请求参数:Data
  677. JSONObject request = new JSONObject();
  678. request.put("req_seq_id", SequenceTools.getReqSeqId32());
  679. request.put("req_date", DateTools.getCurrentDateYYYYMMDD());
  680. request.put("huifu_id", tHuifuMchCheck.getHuifuId());
  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. // 公共参数
  686. System.out.println("请求参数:"+ request);
  687. JSONObject requestData = new JSONObject();
  688. requestData.put("sys_id", HuifuConstant.SYS_ID);
  689. requestData.put("product_id", HuifuConstant.PRODUCT_ID);
  690. requestData.put("sign", sign);
  691. requestData.put("data", request);
  692. System.out.println("请求体:"+ requestData);
  693. String success = OkHttpClientTools.httpPost(url, requestData.toString(), HuifuConstant.PRODUCT_ID);
  694. JSONObject result = JSONObject.parseObject(success);
  695. log.info("汇付返回参数:{}", result);
  696. JSONObject data = result.getJSONObject("data");
  697. String respCode = data.getString("resp_code");
  698. if(respCode.equals("00000000") || respCode.equals("00000100")) {
  699. try {
  700. ObjectMapper objectMapper = new ObjectMapper();
  701. JsonNode rootNode = objectMapper.readTree(success);
  702. JsonNode agreementInfoList = rootNode.path("data").path("agreement_info_list");
  703. JsonNode agreementNode = objectMapper.readTree(agreementInfoList.asText()).get(0);
  704. String conStatValue = agreementNode.path("con_stat").asText();
  705. System.out.println("con_stat value: " + conStatValue);
  706. tHuifuMchCheck.setConStat(conStatValue);
  707. tHuifuMchCheckService.updateById(tHuifuMchCheck);
  708. return conStatValue;
  709. } catch (Exception e) {
  710. e.printStackTrace();
  711. }
  712. }
  713. return null;
  714. }
  715. }