HeliPayServiceImpl.java 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529
  1. package com.caimei.service.impl;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.caimei.components.HeliPayUtil;
  4. import com.caimei.components.WeChatService;
  5. import com.caimei.constant.Constant;
  6. import com.caimei.mapper.CollageMapper;
  7. import com.caimei.mapper.CouponMapper;
  8. import com.caimei.mapper.OrderMapper;
  9. import com.caimei.mapper.PayOrderMapper;
  10. import com.caimei.model.ResponseJson;
  11. import com.caimei.model.dto.HeliDto;
  12. import com.caimei.model.po.*;
  13. import com.caimei.model.vo.*;
  14. import com.caimei.service.HeliPayService;
  15. import com.caimei.util.HttpRequest;
  16. import com.caimei.util.MathUtil;
  17. import com.caimei.util.helipay.Disguiser;
  18. import com.caimei.util.helipay.HttpClientService;
  19. import com.caimei.util.helipay.MyBeanUtils;
  20. import lombok.extern.slf4j.Slf4j;
  21. import okhttp3.OkHttpClient;
  22. import org.apache.commons.lang3.StringUtils;
  23. import org.apache.http.HttpStatus;
  24. import org.springframework.beans.BeanUtils;
  25. import org.springframework.beans.factory.annotation.Value;
  26. import org.springframework.http.HttpHeaders;
  27. import org.springframework.stereotype.Service;
  28. import javax.annotation.Resource;
  29. import java.beans.IntrospectionException;
  30. import java.lang.reflect.InvocationTargetException;
  31. import java.math.BigDecimal;
  32. import java.text.SimpleDateFormat;
  33. import java.util.*;
  34. import java.util.concurrent.TimeUnit;
  35. /**
  36. * Description
  37. *
  38. * @author : zzj
  39. * @date : 2021/11/11
  40. */
  41. @Slf4j
  42. @Service
  43. public class HeliPayServiceImpl implements HeliPayService {
  44. public static OkHttpClient client = new OkHttpClient.Builder()
  45. .connectTimeout(3, TimeUnit.SECONDS)
  46. .readTimeout(20, TimeUnit.SECONDS)
  47. .build();
  48. @Resource
  49. private OrderMapper orderMapper;
  50. @Resource
  51. private HeliPayUtil heliPayUtil;
  52. @Resource
  53. private PayOrderMapper payOrderMapper;
  54. @Resource
  55. private CouponMapper couponMapper;
  56. @Resource
  57. private CollageMapper collageMapper;
  58. @Resource
  59. private WeChatService weChatService;
  60. @Value("${caimei.cloudApi}")
  61. private String cloudApi;
  62. @Override
  63. public ResponseJson<JSONObject> payOnline(HeliDto heliDto, HttpHeaders headers) {
  64. log.info("--------进入公众号/小程序预创建订单接口----------");
  65. try {
  66. AppPayPublicCreateOrderVo pay = new AppPayPublicCreateOrderVo();
  67. String splitCode = payOrderMapper.findShopOrderSplitCode(heliDto.getShopOrderId());
  68. pay.setP3_customerNumber(splitCode);
  69. //合利宝主扫接口参数赋值
  70. heliPayUtil.setOnlineValue(pay, heliDto, "order", headers);
  71. if ("GZH".equals(heliDto.getPayType()) || "XCX".equals(heliDto.getPayType())) {
  72. //公众号/小程序
  73. String openId = getOpenId(heliDto, headers);
  74. if (StringUtils.isEmpty(openId)) {
  75. return ResponseJson.error("微信openId获取失败", null);
  76. }
  77. pay.setP8_openid(openId);
  78. }
  79. Map<String, String> map = MyBeanUtils.convertBean(pay, new LinkedHashMap());
  80. String oriMessage = MyBeanUtils.getSignedByPresetParameter(map, AppPayPublicCreateOrderVo.NEED_SIGN_PARAMS);
  81. oriMessage += Constant.SPLIT + Constant.SAOMA;
  82. log.info("签名原文串:" + oriMessage);
  83. String sign = Disguiser.disguiseMD5(oriMessage.trim());
  84. log.info("签名串:" + sign);
  85. map.put("sign", sign);
  86. log.info("发送参数:" + map);
  87. Map<String, Object> resultMap = HttpClientService.getHttpResp(map, Constant.REQUEST_URL);
  88. log.info("响应结果:" + resultMap);
  89. if ((Integer) resultMap.get("statusCode") == HttpStatus.SC_OK) {
  90. String resultMsg = (String) resultMap.get("response");
  91. AppPayPublicOrderResponseVo orderResponseVo = JSONObject.parseObject(resultMsg, AppPayPublicOrderResponseVo.class);
  92. String assemblyRespOriSign = MyBeanUtils.getSignedByPresetParameter(orderResponseVo, AppPayPublicOrderResponseVo.NEED_SIGN_PARAMS);
  93. assemblyRespOriSign += Constant.SPLIT + Constant.SAOMA;
  94. log.info("组装返回结果签名串:" + assemblyRespOriSign);
  95. String responseSign = orderResponseVo.getSign();
  96. log.info("响应签名:" + responseSign);
  97. String checkSign = Disguiser.disguiseMD5(assemblyRespOriSign.trim());
  98. if (checkSign.equals(responseSign) && "0000".equals(orderResponseVo.getRt2_retCode())) {
  99. JSONObject jsonObject = JSONObject.parseObject(resultMsg);
  100. return ResponseJson.success("请求成功", jsonObject);
  101. } else {
  102. return ResponseJson.error("请求参数有误", JSONObject.parseObject(resultMsg));
  103. }
  104. } else {
  105. return ResponseJson.error("请求失败", null);
  106. }
  107. } catch (Exception e) {
  108. log.error("交易失败" + e);
  109. return ResponseJson.error("交易失败", null);
  110. }
  111. }
  112. @Override
  113. public String paymentCallback(NotifyResponseVo res) throws IntrospectionException, InvocationTargetException, IllegalAccessException {
  114. log.info("******************** 支付异步回调 start *******************");
  115. // 签名验证
  116. String sign = res.getSign();
  117. log.info("回调签名" + sign);
  118. String oriMessage = MyBeanUtils.getSigned(res, null);
  119. String oriMessage1 = oriMessage +Constant.SPLIT + Constant.SAOMA;
  120. String oriMessage2 = oriMessage +Constant.SPLIT + Constant.FENZHANG;
  121. String oriMessage3 = oriMessage +Constant.SPLIT + Constant.XUNI;
  122. String oriMessage4 = oriMessage +Constant.SPLIT + Constant.WANGYIN;
  123. String checkSign1 = Disguiser.disguiseMD5(oriMessage1.trim());
  124. String checkSign2 = Disguiser.disguiseMD5(oriMessage2.trim());
  125. String checkSign3 = Disguiser.disguiseMD5(oriMessage3.trim());
  126. String checkSign4 = Disguiser.disguiseMD5(oriMessage4.trim());
  127. boolean b = sign.equals(checkSign1) || sign.equals(checkSign2) || sign.equals(checkSign3) || sign.equals(checkSign4);
  128. if (!b) {
  129. return "验签名失败!";
  130. }
  131. // 订单状态 INIT:已接收 DOING:处理中 SUCCESS:成功 FAIL:失败 CLOSE:关闭 CANCEL:撤销
  132. String orderStatus = res.getRt4_status();
  133. // 平台唯一流水号
  134. String mbOrderId = res.getRt3_systemSerial();
  135. // 商户唯一订单号
  136. String orderRequestNo = res.getRt2_orderId();
  137. // 本次支付金额,以元为单位
  138. BigDecimal amount = new BigDecimal(res.getRt5_orderAmount());
  139. log.info("【支付异步回调】>>>>>>>>>>>>>>支付订单状态:" + orderStatus);
  140. if (!"SUCCESS".equals(orderStatus)) {
  141. return "支付失败";
  142. }
  143. String[] split = res.getRt8_desc().split(",");
  144. //0位置订单id
  145. Integer orderId = Integer.valueOf(split[0]);
  146. //1位置支付类型
  147. String payType = split[1];
  148. //2位置子订单id
  149. Integer shopOrderId = Integer.valueOf(split[2]);
  150. // 订单信息
  151. OrderVo order = orderMapper.findOrder(orderId);
  152. ShopOrderVo shopOrder = orderMapper.getShopOrderByOrderId(shopOrderId);
  153. if (null == order) {
  154. return "订单不存在";
  155. }
  156. if(null == shopOrder){
  157. return "子订单不存在";
  158. }
  159. // 支付记录
  160. List<DiscernReceiptVo> discernReceiptList = payOrderMapper.getDiscernReceipt(order);
  161. double receiptAmount = 0d;
  162. if (null != discernReceiptList && discernReceiptList.size() > 0) {
  163. for (DiscernReceiptVo discernReceipt : discernReceiptList) {
  164. receiptAmount = MathUtil.add(receiptAmount, discernReceipt.getAssociateAmount()).doubleValue();
  165. }
  166. }
  167. order.setReceiptAmount(MathUtil.add(receiptAmount, amount));
  168. Date date = new Date();
  169. String curDateStr = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(date);
  170. if (MathUtil.compare(order.getPayableAmount(), order.getReceiptAmount()) == 0) {
  171. /*
  172. * 订单全部支付
  173. * 0待确认,11待收待发,12待收部发,13待收全发,21部收待发,22部收部发,23部收全发,
  174. * 31已收待发,32已收部发,33已收全发,4交易完成,5订单完成,6已关闭,7交易全退
  175. */
  176. if ("11".equals(order.getStatus()) || "21".equals(order.getStatus())) {
  177. order.setStatus("31");
  178. } else if ("12".equals(order.getStatus()) || "22".equals(order.getStatus())) {
  179. order.setStatus("32");
  180. } else {
  181. order.setStatus("33");
  182. }
  183. order.setPayFlag(1);
  184. order.setOnlinePayFlag(0);
  185. //(收款买家)收款状态:1待收款、2部分收款、3已收款
  186. order.setReceiptStatus(3);
  187. log.info("【支付异步回调】>>>>>>>>>>>>>>订单(全部支付),修改订单状态:" + order.getStatus() + ",orderId:" + orderId);
  188. /*
  189. * 保存好友消费券赠送记录
  190. */
  191. CouponSharePo couponShare = couponMapper.getCouponShareId(order.getUserId());
  192. if (null != couponShare) {
  193. List<Integer> couponIds = couponMapper.getCurrentCouponIds(5);
  194. couponIds.forEach(couponId->{
  195. couponShare.setShareCouponId(couponId);
  196. couponMapper.insertCouponShare(couponShare);
  197. BigDecimal couponAmount = couponMapper.getCouponAmount(couponId);
  198. HashMap<String, Object> map = new HashMap<>();
  199. String mobile = couponMapper.getUserMobile(couponShare.getShareUserId());
  200. String content = "恭喜您邀请的好友已成功消费一笔订单,现赠送" + couponAmount + "元优惠券到您的领券中心,请赶紧登录呵呵商城小程序领取下单吧。退订回T";
  201. map.put("type", 3);
  202. map.put("mobile", mobile);
  203. map.put("content", content);
  204. String url = cloudApi + "/tools/sms/send";
  205. try {
  206. String result = HttpRequest.sendPost(url, map);
  207. log.info("【呵呵好友消费券派送】mobile:" + mobile + ",result:" + result);
  208. // 保存短信发送条数+count
  209. couponMapper.updateSmsSendCount(19, 1);
  210. } catch (Exception e) {
  211. e.printStackTrace();
  212. }
  213. });
  214. }
  215. // 拼团数据更新
  216. CmHeheCollagePo collage = collageMapper.getCollageByOrderId(orderId);
  217. if (null != collage) {
  218. if (1 == collage.getLaunchFlag()) {
  219. // 拼团发起人支付订单,正式建立拼团
  220. collage.setStatus(1);
  221. Date startTime = new Date();
  222. collage.setStartTime(startTime);
  223. Calendar calendar = Calendar.getInstance();
  224. calendar.setTime(startTime);
  225. calendar.add(Calendar.DAY_OF_MONTH, 1);
  226. collage.setEndTime(calendar.getTime());
  227. collageMapper.createCollage(collage);
  228. } else {
  229. // 已拼且已支付人数
  230. Integer memberNum = collageMapper.findCollageMemberNum(collage.getId());
  231. if (memberNum + 1 == collage.getMemberNum()) {
  232. // 拼团成功
  233. collage.setStatus(2);
  234. collage.setCompleteTime(new Date());
  235. collageMapper.completeCollage(collage);
  236. // 关闭其它未支付拼团订单
  237. List<Integer> orderIdList = collageMapper.findNoPayCollageOrderIds(collage.getId());
  238. orderIdList.forEach(noPayOrderId->{
  239. orderMapper.cancelOrder(noPayOrderId, "拼团完成关闭其它未支付拼团订单");
  240. });
  241. HashMap<String, Object> map = new HashMap<>();
  242. String mobile = collageMapper.getUserMobileByOrderId(orderId);
  243. List<String> mobileList = collageMapper.getMobilesByCollageId(collage.getId());
  244. mobileList.add(mobile);
  245. String content = "您的商品已拼团成功,请赶紧登录呵呵商城小程序查看订单吧。";
  246. map.put("type", 1);
  247. map.put("content", content);
  248. String url = cloudApi + "/tools/sms/send";
  249. try {
  250. for (String userMobile : mobileList) {
  251. map.put("mobile", userMobile);
  252. String result = HttpRequest.sendPost(url, map);
  253. log.info("【呵呵拼团成功短信派送】mobile:" + mobile + ",result:" + result);
  254. }
  255. } catch (Exception e) {
  256. e.printStackTrace();
  257. }
  258. }
  259. }
  260. }
  261. } else {
  262. //部分支付
  263. if ("11".equals(order.getStatus()) || "21".equals(order.getStatus())) {
  264. order.setStatus("21");
  265. } else if ("12".equals(order.getStatus()) || "22".equals(order.getStatus())) {
  266. order.setStatus("22");
  267. } else {
  268. order.setStatus("23");
  269. }
  270. order.setOnlinePayFlag(0);
  271. //(收款买家)收款状态:1待收款、2部分收款、3已收款
  272. order.setReceiptStatus(2);
  273. log.info("【支付异步回调】>>>>>>>>>>>>>>订单(部分支付),修改订单状态:" + order.getStatus() + ",orderId:" + orderId);
  274. }
  275. // 更新付款次数
  276. order.setPaySuccessCounter(order.getPaySuccessCounter() + 1);
  277. order.setUpdateDate(curDateStr);
  278. payOrderMapper.updateSelective(order);
  279. // 支付记录
  280. // todo 子订单返佣????
  281. List<DiscernReceiptVo> shopOrderDiscernReceiptList = orderMapper.getShopOrderDiscernReceipt(shopOrderId);
  282. double shopOrderReceiptAmount = 0d;
  283. if (null != shopOrderDiscernReceiptList && shopOrderDiscernReceiptList.size() > 0) {
  284. for (DiscernReceiptVo discernReceipt : shopOrderDiscernReceiptList) {
  285. shopOrderReceiptAmount = MathUtil.add(shopOrderReceiptAmount, discernReceipt.getAssociateAmount()).doubleValue();
  286. }
  287. }
  288. shopOrder.setReceiptAmount(MathUtil.add(shopOrderReceiptAmount,amount).doubleValue());
  289. //均摊后needpay:已支付
  290. if (MathUtil.compare(shopOrder.getRealPay(), shopOrder.getReceiptAmount()) == 0) {
  291. shopOrder.setReceiptStatus(3);
  292. }else{
  293. shopOrder.setReceiptStatus(2);
  294. }
  295. // 更新子订单收款金额和收款状态
  296. payOrderMapper.updateShopOrderByReceiptStatus(shopOrder);
  297. //保存收款记录
  298. CmDiscernReceiptPo discernReceipt = new CmDiscernReceiptPo();
  299. discernReceipt.setPayWay("1");
  300. discernReceipt.setPayType(payType);
  301. discernReceipt.setReceiptType("1");
  302. discernReceipt.setReceiptStatus("3");
  303. discernReceipt.setReceiptAmount(amount);
  304. discernReceipt.setConfirmType("4");
  305. discernReceipt.setRePayFlag("1");
  306. discernReceipt.setFormData(JSONObject.toJSONString(res));
  307. discernReceipt.setReceiptDate(curDateStr);
  308. discernReceipt.setConfirmDate(curDateStr);
  309. discernReceipt.setReviewDate(curDateStr);
  310. discernReceipt.setUpdateDate(curDateStr);
  311. discernReceipt.setDelFlag("0");
  312. payOrderMapper.insertDiscernReceipt(discernReceipt);
  313. CmReceiptOrderRelationPo relation = new CmReceiptOrderRelationPo();
  314. relation.setReceiptID(discernReceipt.getId().intValue());
  315. relation.setOrderID(order.getOrderId());
  316. relation.setAssociateAmount(amount);
  317. relation.setRelationType("2");
  318. relation.setMbOrderId(mbOrderId);
  319. relation.setOrderRequestNo(orderRequestNo);
  320. relation.setDelFlag("0");
  321. relation.setSplitStatus("0");
  322. relation.setShopOrderId(shopOrderId);
  323. payOrderMapper.insertOrderRelation(relation);
  324. log.info(">>>>>>>>>>>>>>>>>>>>>>>保存付款金额到收款记录," + amount);
  325. return "SUCCESS";
  326. }
  327. private String getOpenId(HeliDto heliDto, HttpHeaders headers) {
  328. PayParamBo payParam = new PayParamBo();
  329. // payDto -> payParam
  330. BeanUtils.copyProperties(heliDto, payParam);
  331. // 微信线上支付
  332. String openId = null;
  333. if (null == payParam.getState()) {
  334. // 小程序微信授权获取登录信息
  335. ResponseJson<Map<String, Object>> appletsInfo = weChatService.getInfoMapByApplets(payParam.getCode(), headers, 1);
  336. if (appletsInfo.getCode() == -1) {
  337. return null;
  338. }
  339. Map<String, Object> infoData = appletsInfo.getData();
  340. openId = (String) infoData.get(WeChatService.Keys.OPEN_ID);
  341. if (StringUtils.isEmpty(openId)) {
  342. return null;
  343. }
  344. } else {
  345. try {
  346. // 微信公众号,通过code获取微信用户信息
  347. Map<String, Object> map = weChatService.getInfoMapByWeb(payParam.getCode(), "crm");
  348. openId = (String) map.get(WeChatService.Keys.OPEN_ID);
  349. } catch (Exception e) {
  350. log.error("openId获取失败", e);
  351. }
  352. if (StringUtils.isEmpty(openId)) {
  353. return null;
  354. }
  355. }
  356. return openId;
  357. }
  358. @Override
  359. public String delayedSplittingCallback(AccountResVo data) {
  360. log.info("延时分账异步回调参数-------------------》 " + data.toString());
  361. try {
  362. String oriMessage = MyBeanUtils.getSigned(data, null);
  363. oriMessage = oriMessage +Constant.SPLIT + Constant.XUNI;
  364. String checkSign = Disguiser.disguiseMD5(oriMessage.trim());
  365. log.info("回调签名 :" + data.getSign());
  366. log.info("checkSign : " + checkSign);
  367. if (!checkSign.equals(data.getSign())) {
  368. log.info("延时分账异步回调验签失败------------------");
  369. return "验签失败";
  370. }
  371. //分账的时候防止相同订单号,前面加了FZ,切割掉2位还原
  372. String orderRequestNo = data.getRt7_orderId().substring(5);
  373. //切2位是splict account表orderRequestNo
  374. String substring = data.getRt7_orderId().substring(2);
  375. String status = data.getRt10_orderStatus();
  376. log.info("【延时分账回调】>>>>>>>>>>分账状态:" + status);
  377. if (!"SUCCESS".equals(status)) {
  378. return "分账失败";
  379. }
  380. // 修改收款分账状态为1
  381. payOrderMapper.updateBySplitStatus(orderRequestNo);
  382. List<SplitAccountVo> splitAccountList = payOrderMapper.findByMbOrderId(substring);
  383. if (splitAccountList != null && splitAccountList.size() > 0) {
  384. Integer orderId = splitAccountList.get(0).getOrderId();
  385. List<ShopOrderVo> shopOrderList = orderMapper.findAllShopOrder(orderId);
  386. Integer shopOrderId = null;
  387. String shopOrderNo = "";
  388. for (SplitAccountVo account : splitAccountList) {
  389. log.info("【延时分账回调】>>>>>>>>>>保存应付付供应商:" + account.getShopId());
  390. // 本次付供应商金额(分账金额)
  391. BigDecimal splitAmount = account.getSplitAccount();
  392. orderId = account.getOrderId();
  393. Integer shopId = account.getShopId();
  394. for (ShopOrderVo shopOrder : shopOrderList) {
  395. if (shopId.equals(shopOrder.getShopId())) {
  396. shopOrderId = shopOrder.getShopOrderId();
  397. shopOrderNo = shopOrder.getShopOrderNo();
  398. // 已付供应商金额
  399. Double paidAmount = payOrderMapper.findPaidShop(shopOrderId);
  400. Double paidShop = MathUtil.add(paidAmount, splitAmount).doubleValue();
  401. shopOrder.setPayedShopAmount(paidShop);
  402. if (MathUtil.compare(shopOrder.getShouldPayShopAmount(), paidShop) == 0) {
  403. shopOrder.setPayStatus(3);
  404. } else {
  405. shopOrder.setPayStatus(2);
  406. }
  407. // 修改子订单付款状态及付款金额
  408. payOrderMapper.updateShopOrderByPayStatus(shopOrderId, paidShop, shopOrder.getPayStatus());
  409. }
  410. }
  411. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  412. String currentTime = format.format(new Date());
  413. // 保存付款单表
  414. PayShopPo payShop = new PayShopPo();
  415. payShop.setShopId(shopId);
  416. payShop.setName("线上支付分账");
  417. payShop.setTotalAmount(splitAmount.doubleValue());
  418. payShop.setWipePayment(0d);
  419. payShop.setPayType(6);
  420. payShop.setStatus(1);
  421. payShop.setDelFlag(0);
  422. payShop.setApplyTime(currentTime);
  423. payShop.setReviewTime(currentTime);
  424. payShop.setPayTime(currentTime);
  425. payOrderMapper.insertPayShop(payShop);
  426. // 保存 付供应商记录
  427. PayShopRecordPo shopRecord = new PayShopRecordPo();
  428. shopRecord.setShopId(shopId);
  429. shopRecord.setShopOrderId(shopOrderId);
  430. shopRecord.setShopOrderNo(shopOrderNo);
  431. shopRecord.setPayAmount(splitAmount.doubleValue());
  432. shopRecord.setWipePayment(0d);
  433. shopRecord.setPayType(6);
  434. shopRecord.setPayTime(currentTime);
  435. shopRecord.setPayShopId(payShop.getId());
  436. shopRecord.setStatus(1);
  437. shopRecord.setDelFlag(0);
  438. payOrderMapper.insertPayShopRecord(shopRecord);
  439. }
  440. // 子订单是否全部付款
  441. boolean isPay = true;
  442. for (ShopOrderVo shopOrder : shopOrderList) {
  443. if (3 != shopOrder.getPayStatus()) {
  444. isPay = false;
  445. break;
  446. }
  447. }
  448. // 修改主订单付款状态
  449. if (isPay) {
  450. payOrderMapper.updateOrderByPayStatus(orderId, 3);
  451. } else {
  452. payOrderMapper.updateOrderByPayStatus(orderId, 2);
  453. }
  454. }
  455. } catch (Exception e) {
  456. log.error("【延时分账回调】>>>>>>>>>>分账异步通知异常", e);
  457. return "分账失败";
  458. }
  459. return "SUCCESS";
  460. }
  461. @Override
  462. public ResponseJson<JSONObject> getPayOrderResult(String mbOrderId) {
  463. log.info("--------进入交易订单查询接口----------");
  464. QueryOrderVo queryOrderVo = new QueryOrderVo();
  465. queryOrderVo.setP1_bizType("AppPayQuery");
  466. queryOrderVo.setP2_orderId(mbOrderId);
  467. //todo 换收款账户
  468. queryOrderVo.setP3_customerNumber(Constant.CUSTOMERNUM2);
  469. try {
  470. Map<String, String> map = MyBeanUtils.convertBean(queryOrderVo, new LinkedHashMap());
  471. String oriMessage = MyBeanUtils.getSignedByPresetParameter(map, QueryOrderVo.NEED_SIGN_PARAMS);
  472. //区分网银和其他产品
  473. String payType = payOrderMapper.findPayType(mbOrderId);
  474. if ("12".equals(payType) || "17".equals(payType)) {
  475. oriMessage += Constant.SPLIT + Constant.WANGYIN;
  476. } else {
  477. oriMessage += Constant.SPLIT + Constant.SAOMA;
  478. }
  479. log.info("签名原文串:" + oriMessage);
  480. String sign = Disguiser.disguiseMD5(oriMessage.trim());
  481. log.info("签名串:" + sign);
  482. map.put("sign", sign);
  483. log.info("发送参数:" + map);
  484. Map<String, Object> resultMap = HttpClientService.getHttpResp(map, Constant.REQUEST_URL);
  485. log.info("响应结果:" + resultMap);
  486. if ((Integer) resultMap.get("statusCode") == HttpStatus.SC_OK) {
  487. String resultMsg = (String) resultMap.get("response");
  488. QueryOrderResponseVo queryOrderResponseVo = JSONObject.parseObject(resultMsg, QueryOrderResponseVo.class);
  489. String assemblyRespOriSign = MyBeanUtils.getSignedByPresetParameter(queryOrderResponseVo, QueryOrderResponseVo.NEED_SIGN_PARAMS);
  490. log.info("组装返回结果签名串:" + assemblyRespOriSign);
  491. if ("12".equals(payType) || "17".equals(payType)) {
  492. assemblyRespOriSign += Constant.SPLIT + Constant.WANGYIN;
  493. } else {
  494. assemblyRespOriSign += Constant.SPLIT + Constant.SAOMA;
  495. }
  496. String responseSign = queryOrderResponseVo.getSign();
  497. log.info("响应签名:" + responseSign);
  498. String checkSign = Disguiser.disguiseMD5(assemblyRespOriSign.trim());
  499. if (checkSign.equals(responseSign)) {
  500. if ("0000".equals(queryOrderResponseVo.getRt2_retCode())) {
  501. JSONObject jsonObject = JSONObject.parseObject(resultMsg, JSONObject.class);
  502. return ResponseJson.success("查询成功", jsonObject);
  503. } else {
  504. return ResponseJson.error("验签失败", null);
  505. }
  506. } else {
  507. return ResponseJson.error("验签失败", null);
  508. }
  509. } else {
  510. return ResponseJson.error("请求失败", null);
  511. }
  512. } catch (Exception e) {
  513. return ResponseJson.error("查询失败", null);
  514. }
  515. }
  516. }