From d2e830252cb8b1fb16d8922007785ec0834043a9 Mon Sep 17 00:00:00 2001 From: xiaohanzi Date: Tue, 28 Jul 2020 20:38:13 +0800 Subject: [PATCH] update --- .../service/impl/WxPayOrderServiceImpl.java | 16 +- .../service/pay/PayAdapterService.java | 4 +- .../service/pay/impl/WxPayAdapterService.java | 164 ++++++++---------- 3 files changed, 94 insertions(+), 90 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java index 7df6c0a52..961cd7c79 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java @@ -18,6 +18,7 @@ import com.iformall.mapper.*; import com.iformall.pay.*; import com.iformall.service.*; import com.iformall.service.helper.WxPayOrderServiceHelper; +import com.iformall.service.pay.PayAdapterResult; import com.iformall.service.pay.PayServiceFactory; import com.iformall.utils.*; import org.apache.commons.lang3.StringUtils; @@ -391,7 +392,20 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { } } - PayServiceFactory.getPayAdapterService(payWay.getCode()).pay(payAccount, order, oldRecord, params); + PayAdapterResult payResult = PayServiceFactory.getPayAdapterService(payWay.getCode()).pay(payAccount, order, record, params); + //成功或者失败都需要更新record + try { + wxPayOrderMapper.updateById(record); + } catch (Exception e) { + logger.error("pay order update error: " + record.toString()); + throw new MallinkException(ErrorCode.DB_FAIL); + } + + if (payResult.isSuccess()) { + new ResultData(Result.SUCCESS, "创建支付订单成功", payResult.getData()); + }else { + new ResultData(ErrorCode.PAY_ORDER_ERROR.getCode(), payResult.getMsg(), payResult.getData()); + } } catch (RuntimeException e) { logger.error("createwxpayorder error:",e); throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage()); diff --git a/mallinkService/src/main/java/com/iformall/service/pay/PayAdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/PayAdapterService.java index c4c62d5db..10402c8d8 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/PayAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/PayAdapterService.java @@ -1,10 +1,12 @@ package com.iformall.service.pay; +import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxOrder; import com.iformall.domain.po.WxPayAccount; import com.iformall.domain.po.WxPayOrder; +import com.iformall.enums.EnumPayShare; public interface PayAdapterService { - public PayAdapterResult pay(WxPayAccount payAccount,WxOrder order,WxPayOrder record , Object... params); + public PayAdapterResult pay(WxPayAccount payAccount,WxOrder order,WxPayOrder record ,EnumPayShare isShare,WxAppinfo appInfo, Object... params) throws Exception; } diff --git a/mallinkService/src/main/java/com/iformall/service/pay/impl/WxPayAdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/impl/WxPayAdapterService.java index 473974539..21560dee6 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/impl/WxPayAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/impl/WxPayAdapterService.java @@ -74,20 +74,18 @@ public class WxPayAdapterService implements PayAdapterService{ return wxPayOrderP; } - private PayAdapterResult getOrderPResult(Map returnMap,WxPayOrder record,String noncestr) { + private PayAdapterResult getOrderPResult(Map returnMap,WxPayOrder record,WxPayAccount payAccount,String noncestr) { + PayAdapterResult par = new PayAdapterResult(); returnMap.put("payOrderId", String.valueOf(record.getId())); String result_code = returnMap.get("result_code"); if ("SUCCESS".equals(result_code)) { + par.setSuccess(true); + par.setMsg("success."); + par.setData(returnMap); String prepay_id = returnMap.get("prepay_id"); // update payOrder with prepay_id record.setPrepayId(prepay_id); record.setUpdateTime(new Date()); - try { - wxPayOrderMapper.updateById(record); - } catch (Exception e) { - log.error("pay order update error: " + record.toString()); - throw new MallinkException(ErrorCode.DB_FAIL); - } String timestamp = String.valueOf(Utility.getCurrentTimeStamp()); Map sighMap = MapUtil.getOrderMap(); @@ -102,7 +100,6 @@ public class WxPayAdapterService implements PayAdapterService{ returnMap.put("package", "prepay_id=" + prepay_id); returnMap.put("paySign", signAgent); log.info("back to UI: " + returnMap.toString()); - return new ResultData(Result.SUCCESS, "创建支付订单成功", returnMap); } else { String errMsg = ""; JSONObject errObj = errorMap.getJSONObject(result_code); @@ -114,19 +111,18 @@ public class WxPayAdapterService implements PayAdapterService{ record.setFailReason(errMsg); } record.setUpdateTime(new Date()); - try { - wxPayOrderMapper.updateById(record); - } catch (Exception e) { - logger.error("pay order update error: " + record.toString()); - throw new MallinkException(ErrorCode.DB_FAIL); - } - return new ResultData(ErrorCode.PAY_ORDER_ERROR.getCode(), errMsg, returnMap); + + par.setSuccess(false); + par.setMsg(errMsg); + par.setData(returnMap); } + + return par; } - private WxPayOrderSP generateWxPayOrderSP(WxPayAccount payAccount, WxOrder order, WxPayOrder record,WxAppinfo appInfo,String openId,String parentAppId,String appId,Date currentDate,EnumPayShare isShare) throws Exception { + private WxPayOrderSP generateWxPayOrderSP(WxPayAccount payAccount, WxOrder order, WxPayOrder record,WxAppinfo appInfo,String openId,String appId,Date currentDate,EnumPayShare isShare) throws Exception { String noncestr = Utility.generate32UUID(); WxPayOrderSP wxPayOrderSP = new WxPayOrderSP(); wxPayOrderSP.setSub_openid(openId); @@ -157,83 +153,75 @@ public class WxPayAdapterService implements PayAdapterService{ return wxPayOrderSP; } + private PayAdapterResult getOrderSPResult(Map returnMap,WxPayOrder record,WxPayAccount payAccount,WxAppinfo appInfo,String noncestr) { + PayAdapterResult par = new PayAdapterResult(); + returnMap.put("payOrderId", String.valueOf(record.getId())); + String result_code = returnMap.get("result_code"); + if ("SUCCESS".equals(result_code)) { + par.setSuccess(true); + par.setMsg("success."); + par.setData(returnMap); + + String prepay_id = returnMap.get("prepay_id"); + // update payOrder with prepay_id + record.setPrepayId(prepay_id); + record.setUpdateTime(new Date()); + String timestamp = String.valueOf(Utility.getCurrentTimeStamp()); + Map sighMap = MapUtil.getOrderMap(); + sighMap.put("appId", appInfo.getAppId()); + sighMap.put("timeStamp", timestamp); + sighMap.put("nonceStr", noncestr); + sighMap.put("package", "prepay_id=" + prepay_id); + sighMap.put("signType", "HMAC-SHA256"); + String signAgent = WxPayment.createSignHMAC(sighMap, payAccount.getApiKey()); + returnMap.put("timeStamp", timestamp); + returnMap.put("nonceStr", noncestr); + returnMap.put("package", "prepay_id=" + prepay_id); + returnMap.put("paySign", signAgent); + returnMap.put("signType", "HMAC-SHA256"); + log.info("back to UI: " + returnMap.toString()); + } else { + String errMsg = ""; + JSONObject errObj = errorMap.getJSONObject(result_code); + if (errObj != null) { + errMsg = errObj.toJSONString(); + record.setFailReason(errMsg); + } else { + errMsg = returnMap.get("return_msg"); + record.setFailReason(errMsg); + } + record.setUpdateTime(new Date()); + par.setSuccess(false); + par.setMsg(errMsg); + par.setData(returnMap); + } + return par; + } @Override - public PayAdapterResult pay(WxPayAccount payAccount, WxOrder order, WxPayOrder record, Object... params) { - WxAppinfo appInfo = (WxAppinfo) params[01]; - String openId = (String) params[1]; - String appId = (String) params[2]; - Date currentDate = (Date) params[3]; - EnumPayShare isShare = (EnumPayShare) params[4]; - + public PayAdapterResult pay(WxPayAccount payAccount, WxOrder order, WxPayOrder record,EnumPayShare isShare,WxAppinfo appInfo, Object... params) throws Exception { + String openId = (String) params[0]; + String appId = (String) params[1]; + Date currentDate = (Date) params[2]; - - if (payAccount.getType() == EnumPayMode.MCH.getCode()) { - WxPayOrderP wxPayOrderP = generateWxPayOrderP(payAccount,order,record,openId,appId,currentDate); - String response = WxPay.pushOrder(BeanUtils.toStringMap(wxPayOrderP)); - log.info("pay order, wechat pushOrder, " + wxPayOrderP.toString() + ", response: " + response.toString()); - - Map returnMap = WxPayment.xmlToMap(response); - - - } else { - // 统一下单 // 服务商模式 - WxPayOrderSP wxPayOrderSP = generateWxPayOrderSP(payAccount,order,record,openId,parentAppId,appId,currentDate,isShare); - String response = WxPay.pushOrder(BeanUtils.toStringMap(wxPayOrderSP)); - log.info("pay order, wechat pushOrder, " + wxPayOrderSP.toString() + ", response: " + response.toString()); - - Map returnMap = WxPayment.xmlToMap(response); - returnMap.put("payOrderId", String.valueOf(record.getId())); - String result_code = returnMap.get("result_code"); - if ("SUCCESS".equals(result_code)) { - String prepay_id = returnMap.get("prepay_id"); - // update payOrder with prepay_id - record.setPrepayId(prepay_id); - record.setUpdateTime(new Date()); - try { - wxPayOrderMapper.updateById(record); - } catch (Exception e) { - logger.error("pay order update error: " + record.toString()); - throw new MallinkException(ErrorCode.DB_FAIL); - } - - String timestamp = String.valueOf(Utility.getCurrentTimeStamp()); - Map sighMap = MapUtil.getOrderMap(); - sighMap.put("appId", appInfo.getAppId()); - sighMap.put("timeStamp", timestamp); - sighMap.put("nonceStr", noncestr); - sighMap.put("package", "prepay_id=" + prepay_id); - sighMap.put("signType", "HMAC-SHA256"); - String signAgent = WxPayment.createSignHMAC(sighMap, payAccount.getApiKey()); - returnMap.put("timeStamp", timestamp); - returnMap.put("nonceStr", noncestr); - returnMap.put("package", "prepay_id=" + prepay_id); - returnMap.put("paySign", signAgent); - returnMap.put("signType", "HMAC-SHA256"); - logger.info("back to UI: " + returnMap.toString()); - return new ResultData(Result.SUCCESS, "创建支付订单成功", returnMap); - } else { - String errMsg = ""; - JSONObject errObj = errorMap.getJSONObject(result_code); - if (errObj != null) { - errMsg = errObj.toJSONString(); - record.setFailReason(errMsg); - } else { - errMsg = returnMap.get("return_msg"); - record.setFailReason(errMsg); - } - record.setUpdateTime(new Date()); - try { - wxPayOrderMapper.updateById(record); - } catch (Exception e) { - logger.error("pay order update error: " + record.toString()); - throw new MallinkException(ErrorCode.DB_FAIL); - } - return new ResultData(ErrorCode.PAY_ORDER_ERROR.getCode(), errMsg, returnMap); - } - } + //普通商户模式 + if (payAccount.getType() == EnumPayMode.MCH.getCode()) { + WxPayOrderP wxPayOrderP = generateWxPayOrderP(payAccount,order,record,openId,appId,currentDate); + String response = WxPay.pushOrder(BeanUtils.toStringMap(wxPayOrderP)); + log.info("pay order, wechat pushOrder, " + wxPayOrderP.toString() + ", response: " + response.toString()); + Map returnMap = WxPayment.xmlToMap(response); + return getOrderPResult(returnMap,record,payAccount,wxPayOrderP.getNonce_str()); + + } else { + // 统一下单 // 服务商模式 + WxPayOrderSP wxPayOrderSP = generateWxPayOrderSP(payAccount,order,record,appInfo,openId,appId,currentDate,isShare); + String response = WxPay.pushOrder(BeanUtils.toStringMap(wxPayOrderSP)); + log.info("pay order, wechat pushOrder, " + wxPayOrderSP.toString() + ", response: " + response.toString()); + Map returnMap = WxPayment.xmlToMap(response); + return getOrderSPResult(returnMap,record,payAccount,appInfo,wxPayOrderSP.getNonce_str()); + } } }