diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java index 93d4273b0..965b3a6bc 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java @@ -280,7 +280,7 @@ public class WxMerchantController extends BaseController { @ApiOperation("(微信)商户手填收款账号") @PostMapping("setMerchantAccount") public ResultData setMerchantAccount(@RequestBody WxMerchant wxMerchant) { - if (null == wxMerchant.getId() || StringUtils.isBlank(wxMerchant.getAccount()) || StringUtils.isBlank(wxMerchant.getApiKey())) { + if (null == wxMerchant.getId() || StringUtils.isBlank(wxMerchant.getAccount()) || null == wxMerchant.getIsIsv()) { return new ResultData(ResultData.ERROR,"参数缺失"); } wxMerchant.updateTenantInfo(getTenantInfo()); diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index 23c94c7db..cda51b92b 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -492,17 +492,15 @@ public class WxCarController extends BaseController { .append(",\"mid\":").append(parkMerchant.getId()) .append(",\"mn\":").append(parkMerchant.getName()) .append("}"); - WxAppinfo cAppInfo = wxAppinfoService.getCAppInfoFromRedis(park.getTenantId(), EnumPayWay.PAY_WAY_WECHAT.getPlat()); - if(cAppInfo == null){ - new ResultData(Result.ERROR,ErrorCode.APP_ID_NOT_FOUND.name()); - } - WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(cAppInfo.getPayId()); - if(payAccount == null){ - new ResultData(Result.ERROR,ErrorCode.API_KEY_NOT_FOUND.name()); - } //创建微信支付订单 - PayAdapterResult wxResult = wxParkPayService.createWxPayOrder(user.getOpenId(), user.getAppId(), receiver.getReceiverAccount(), "停车费支付", attachSb.toString(), uniquePayOrderNo, payOrder.getFee(), - "127.0.0.1", park.getPaidCallBack(), (String)receiver.getReceiverParamValue(Constant.paymentReceicerParamApiKey), new Date()); + boolean isIsv = false; + Integer isvModel = (Integer)receiver.getReceiverParamValue(Constant.paymentReceiverParamIsv); + if (EnumYesOrNo.YES.getCode() == isvModel) { + isIsv = true; + } + String apiKey = (String)receiver.getReceiverParamValue(Constant.paymentReceicerParamApiKey); + PayAdapterResult wxResult = wxParkPayService.createWxPayOrder(park,isIsv,false,user.getOpenId(), user.getAppId(), receiver.getReceiverAccount(), "停车费支付", attachSb.toString(), uniquePayOrderNo, payOrder.getFee(), + "127.0.0.1", park.getPaidCallBack(), apiKey, new Date()); return new ResultData(wxResult); } catch (Exception e) { logger.error("park createPayOrder error",e); diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java b/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java index 796ee3210..d01e154c7 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java @@ -398,7 +398,9 @@ public class WxMerchant extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value="首款账号",name="account") @TableField(exist = false) private String account; - + @io.swagger.annotations.ApiModelProperty(value="首款账号",name="account") + @TableField(exist = false) + private Integer isIsv; @io.swagger.annotations.ApiModelProperty(value="收款账号",name="apiKey") @TableField(exist = false) private String apiKey; diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java index 80cfb3b90..21fa23be4 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java @@ -945,8 +945,14 @@ public class WxMerchantServiceImpl implements WxMerchantService { receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); receiver.setPlat(EnumAppPlat.WX.getCode()); } + StringBuffer psb = new StringBuffer("{\"").append(Constant.paymentReceiverParamIsv).append("\":").append(wxMerchant.getIsIsv()).append(""); + if (EnumYesOrNo.YES.getCode() == wxMerchant.getIsIsv()) { + psb.append(",\"").append(Constant.paymentReceicerParamApiKey).append("\":\"").append(wxMerchant.getApiKey()).append("\"}"); + }else { + psb.append("}"); + } receiver.setReceiverAccount(wxMerchant.getAccount()); - receiver.setReceiverParams(new StringBuffer("{\"").append(Constant.paymentReceicerParamApiKey).append("\":\"").append(wxMerchant.getApiKey()).append("\"}").toString()); + receiver.setReceiverParams(psb.toString()); wxProfitPaymentReceiverService.saveOrUpdate(receiver); } catch (Exception e) { logger.error("db failed: 账号操作失败, e:" + e.getMessage()); diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java index 51176c688..8e8697c07 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java @@ -14,7 +14,8 @@ public interface WxParkPayService { public PageInfo listPayOrderAsPage(WxCarPayOrder record, Integer pageIndex, Integer pageSize); - public PayAdapterResult createWxPayOrder(String openId,String appId,String mchId,String productName,String attach,String payOrderNo, + //share:是否分账,服务商模式下生效 + public PayAdapterResult createWxPayOrder(TenantEntity tenantEntity,boolean isIsvModel,boolean share,String openId,String appId,String mchId,String productName,String attach,String payOrderNo, Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate) throws Exception; public String handlePaidCallBack(Map paramMap); diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java index fe9970ffa..f4dbc8b3d 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java @@ -6,6 +6,8 @@ import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; +import com.iformall.common.Result; +import com.iformall.common.ResultData; import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxCarPayOrder; import com.iformall.domain.po.WxCoupon; @@ -24,7 +26,9 @@ import com.iformall.mapper.WxCarPayOrderMapper; import com.iformall.mapper.WxPayAccountMapper; import com.iformall.pay.WxPayment; import com.iformall.service.ExcelService; +import com.iformall.service.WxAppinfoService; import com.iformall.service.WxParkService; +import com.iformall.service.WxPayAccountService; import com.iformall.service.park.ParkFactory; import com.iformall.service.park.entity.ParkCreatePayOrder; import com.iformall.service.park.entity.ParkNotifyPaid; @@ -80,15 +84,35 @@ public class WxParkPayServiceImpl implements WxParkPayService { @Autowired WxParkService wxParkService; + @Lazy + @Autowired + WxAppinfoService wxAppinfoService; + + @Lazy + @Autowired + WxPayAccountService wxPayAccountService; + @Override public PageInfo listPayOrderAsPage(WxCarPayOrder record, Integer pageIndex, Integer pageSize) { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCarPayOrderMapper.findList(record)); } @Override - public PayAdapterResult createWxPayOrder(String openId,String appId,String mchId,String productName,String attach,String payOrderNo, + public PayAdapterResult createWxPayOrder(TenantEntity tenantEntity,boolean isIsvModel,boolean share,String openId,String appId,String mchId,String productName,String attach,String payOrderNo, Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate) throws Exception { - return wxMiniAppPayAdapterService.pay(openId, appId, mchId, productName, attach, payOrderNo, fee, ip, notifyUrl, apiKey, currentDate); + if (!isIsvModel) { + return wxMiniAppPayAdapterService.pay(openId, appId, mchId, productName, attach, payOrderNo, fee, ip, notifyUrl, apiKey, currentDate); + }else { + WxAppinfo cAppInfo = wxAppinfoService.getCAppInfoFromRedis(tenantEntity.getTenantId(), EnumPayWay.PAY_WAY_WECHAT.getPlat()); + if(cAppInfo == null){ + throw new MallinkException(ErrorCode.APP_ID_NOT_FOUND.getCode(),"未查询到C端小程序"); + } + WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(cAppInfo.getPayId()); + if(payAccount == null){ + throw new MallinkException(ErrorCode.API_KEY_NOT_FOUND.getCode(),"未查询到payAccount."); + } + return wxMiniAppPayAdapterService.payIsv(payAccount, cAppInfo, mchId, openId, productName, attach, payOrderNo, fee, ip, notifyUrl, currentDate, share); + } } private String notifyErrorResult(String msg) { diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java index a2c8331cc..e91d9096f 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java @@ -59,7 +59,7 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem "\"POST_DATA_EMPTY\":{\"detail\":\"post数据为空\",\"reason\":\"post数据不能为空\",\"resolution\":\"请检查post数据是否为空\"}," + "\"NOT_UTF8\":{\"detail\":\"编码格式错误\",\"reason\":\"未使用指定编码格式\",\"resolution\":\"请使用UTF-8编码格式\"}}"); - private WxPayOrderP generateWxPayOrderP(String openId,String appId,String mchId,String productName,String attach,String payOrderNo,Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate)throws Exception { + private WxPayOrderP generateWxPayOrderP(String openId,String appId,String mchId,String productName,String attach,String payOrderNo,Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate,String productId)throws Exception { // 统一下单 普通商户模式 String noncestr = Utility.generate32UUID(); WxPayOrderP wxPayOrderP = new WxPayOrderP(); @@ -75,6 +75,7 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem wxPayOrderP.setGoods_tag(productName); wxPayOrderP.setNotify_url(notifyUrl); wxPayOrderP.setTrade_type(WxPay.TradeType.JSAPI.name()); // 终端类型 + wxPayOrderP.setProduct_id(productId); wxPayOrderP.setTime_start(Utility.getDataFormatStringYYYYMMDDHHmmss(currentDate)); Date futureDate = new Date(); futureDate.setTime(currentDate.getTime() + 15 * 60 * 1000); @@ -86,85 +87,32 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem private WxPayOrderP generateWxPayOrderP(WxPayAccount payAccount,WxComposeOrder composeOrder,String productName, WxPayOrder record,String openId,String appId,Date currentDate) throws Exception { // 统一下单 普通商户模式 - String noncestr = Utility.generate32UUID(); - WxPayOrderP wxPayOrderP = new WxPayOrderP(); - wxPayOrderP.setOpenid(openId); - wxPayOrderP.setAppid(appId); - wxPayOrderP.setMch_id(payAccount.getMchId()); - wxPayOrderP.setNonce_str(noncestr); - wxPayOrderP.setBody(productName); - wxPayOrderP.setAttach(getAttach(record)); - wxPayOrderP.setOut_trade_no(record.getPayOrderNo()); - wxPayOrderP.setTotal_fee(composeOrder.getPayment()); - wxPayOrderP.setSpbill_create_ip(record.getIp()); // 终端IP - wxPayOrderP.setGoods_tag(productName); - wxPayOrderP.setNotify_url(payAccount.getPayNotifyUrl()); - wxPayOrderP.setTrade_type(WxPay.TradeType.JSAPI.name()); // 终端类型 - wxPayOrderP.setProduct_id(String.valueOf(composeOrder.getMainOrderId())); // 订单ID - wxPayOrderP.setTime_start(Utility.getDataFormatStringYYYYMMDDHHmmss(currentDate)); - Date futureDate = new Date(); - futureDate.setTime(currentDate.getTime() + 15 * 60 * 1000); - wxPayOrderP.setTime_expire(Utility.getDataFormatStringYYYYMMDDHHmmss(futureDate)); // 15分钟后结束 - Map payOrderMap = BeanUtils.toStringMap(wxPayOrderP); - wxPayOrderP.setSign(WxPayment.createSign(payOrderMap, payAccount.getApiKey())); - return wxPayOrderP; + return generateWxPayOrderP(openId,appId,payAccount.getMchId(),productName,getAttach(record),record.getPayOrderNo(),composeOrder.getPayment(),record.getIp(),payAccount.getPayNotifyUrl(),payAccount.getApiKey(),currentDate,String.valueOf(composeOrder.getMainOrderId())); } 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()); - record.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); - - String timestamp = String.valueOf(Utility.getCurrentTimeStamp()); - Map sighMap = MapUtil.getOrderMap(); - sighMap.put("appId", returnMap.get("appid")); - sighMap.put("timeStamp", timestamp); - sighMap.put("nonceStr", noncestr); - sighMap.put("package", "prepay_id=" + prepay_id); - sighMap.put("signType", "MD5"); - String signAgent = WxPayment.createSign(sighMap, payAccount.getApiKey()); - returnMap.put("timeStamp", timestamp); - returnMap.put("nonceStr", noncestr); - returnMap.put("package", "prepay_id=" + prepay_id); - returnMap.put("paySign", signAgent); - 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; + return getOrderPResult(returnMap,noncestr,payAccount.getApiKey(),record); } - private PayAdapterResult getOrderPResult(Map returnMap,String noncestr,String apiKey) { + private PayAdapterResult getOrderPResult(Map returnMap,String noncestr,String apiKey,WxPayOrder record) { PayAdapterResult par = new PayAdapterResult(); + if (null != record ) { + 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"); + + if (null != record) { + // update payOrder with prepay_id + record.setPrepayId(prepay_id); + record.setUpdateTime(new Date()); + record.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); + } + String timestamp = String.valueOf(Utility.getCurrentTimeStamp()); Map sighMap = MapUtil.getOrderMap(); sighMap.put("appId", returnMap.get("appid")); @@ -185,6 +133,10 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem errMsg = errObj.toJSONString(); } else { errMsg = returnMap.get("return_msg"); + } + if (null != record) { + record.setFailReason(errMsg); + record.setUpdateTime(new Date()); } par.setSuccess(false); par.setMsg(errMsg); @@ -193,44 +145,52 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem return par; } + ///////ISV模式 - - private WxPayOrderSP generateWxPayOrderSP(WxPayAccount payAccount, WxComposeOrder composeOrder,String productName,WxPayOrder record,WxAppinfo appInfo,String openId,String appId,Date currentDate,EnumPayShare isShare) throws Exception { + private WxPayOrderSP generateWxPayOrderSP(String openId,String parentAppId,String mchId,String appId,String subMchId,String productName, + String attach,String payOrderNo,Integer fee,String ip,String notifyUrl,String productId,Date currentDate,boolean share,String apiKey) throws Exception{ String noncestr = Utility.generate32UUID(); WxPayOrderSP wxPayOrderSP = new WxPayOrderSP(); wxPayOrderSP.setSub_openid(openId); - wxPayOrderSP.setAppid(appInfo.getParentAppId()); - wxPayOrderSP.setMch_id(payAccount.getMchId()); + wxPayOrderSP.setAppid(parentAppId); + wxPayOrderSP.setMch_id(mchId); wxPayOrderSP.setSub_appid(appId); - wxPayOrderSP.setSub_mch_id(payAccount.getSubMchId()); + wxPayOrderSP.setSub_mch_id(subMchId); wxPayOrderSP.setNonce_str(noncestr); wxPayOrderSP.setBody(productName); - wxPayOrderSP.setAttach(getAttach(record)); - wxPayOrderSP.setOut_trade_no(record.getPayOrderNo()); - wxPayOrderSP.setTotal_fee(composeOrder.getPayment().toString()); - wxPayOrderSP.setSpbill_create_ip(record.getIp()); // 终端IP + wxPayOrderSP.setAttach(attach); + wxPayOrderSP.setOut_trade_no(payOrderNo); + wxPayOrderSP.setTotal_fee(fee.toString()); + wxPayOrderSP.setSpbill_create_ip(ip); // 终端IP wxPayOrderSP.setGoods_tag(productName); // 券ID - wxPayOrderSP.setNotify_url(payAccount.getPayNotifyUrl()); + wxPayOrderSP.setNotify_url(notifyUrl); wxPayOrderSP.setTrade_type(WxPay.TradeType.JSAPI.name()); // 终端类型 - wxPayOrderSP.setProduct_id(String.valueOf(composeOrder.getMainOrderId())); // + wxPayOrderSP.setProduct_id(productId); // wxPayOrderSP.setTime_start(Utility.getDataFormatStringYYYYMMDDHHmmss(currentDate)); Date futureDate = new Date(); futureDate.setTime(currentDate.getTime() + 15 * 60 * 1000); wxPayOrderSP.setTime_expire(Utility.getDataFormatStringYYYYMMDDHHmmss(futureDate)); // 15分钟后结束 wxPayOrderSP.setSign_type("HMAC-SHA256"); - wxPayOrderSP.setProfit_sharing("Y"); -// wxPayOrderSP.setProfit_sharing(null); -// if (isShare == EnumPayShare.YES) { -// wxPayOrderSP.setProfit_sharing("Y"); -// } + if (share) { + wxPayOrderSP.setProfit_sharing("Y"); + }else { + wxPayOrderSP.setProfit_sharing("N"); + } Map payOrderMap = BeanUtils.toStringMap(wxPayOrderSP); - wxPayOrderSP.setSign(WxPayment.createSignHMAC(payOrderMap, payAccount.getApiKey())); + wxPayOrderSP.setSign(WxPayment.createSignHMAC(payOrderMap, apiKey)); return wxPayOrderSP; } - private PayAdapterResult getOrderSPResult(Map returnMap,WxPayOrder record,WxPayAccount payAccount,WxAppinfo appInfo,String noncestr) { + private WxPayOrderSP generateWxPayOrderSP(WxPayAccount payAccount, WxComposeOrder composeOrder,String productName,WxPayOrder record,WxAppinfo appInfo,String openId,String appId,Date currentDate,EnumPayShare isShare) throws Exception { + return generateWxPayOrderSP(openId,appInfo.getParentAppId(),payAccount.getMchId(),appId,payAccount.getSubMchId(),productName,getAttach(record),record.getPayOrderNo(),composeOrder.getPayment(), + record.getIp(),payAccount.getPayNotifyUrl(),String.valueOf(composeOrder.getMainOrderId()),currentDate,true,payAccount.getApiKey()); + } + + private PayAdapterResult getOrderSPResult(Map returnMap,WxPayOrder record,String appId,String noncestr,String apiKey) { PayAdapterResult par = new PayAdapterResult(); - returnMap.put("payOrderId", String.valueOf(record.getId())); + if (null != record) { + returnMap.put("payOrderId", String.valueOf(record.getId())); + } String result_code = returnMap.get("result_code"); if ("SUCCESS".equals(result_code)) { par.setSuccess(true); @@ -239,17 +199,19 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem String prepay_id = returnMap.get("prepay_id"); // update payOrder with prepay_id - record.setPrepayId(prepay_id); - record.setUpdateTime(new Date()); + if (null != record) { + 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("appId", appId); 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()); + String signAgent = WxPayment.createSignHMAC(sighMap, apiKey); returnMap.put("timeStamp", timestamp); returnMap.put("nonceStr", noncestr); returnMap.put("package", "prepay_id=" + prepay_id); @@ -261,12 +223,14 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem JSONObject errObj = errorMap.getJSONObject(result_code); if (errObj != null) { errMsg = errObj.toJSONString(); - record.setFailReason(errMsg); } else { errMsg = returnMap.get("return_msg"); - record.setFailReason(errMsg); + + } + if (null != record) { + record.setFailReason(errMsg); + record.setUpdateTime(new Date()); } - record.setUpdateTime(new Date()); par.setSuccess(false); par.setMsg(errMsg); par.setData(returnMap); @@ -274,6 +238,10 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem return par; } + private PayAdapterResult getOrderSPResult(Map returnMap,WxPayOrder record,WxPayAccount payAccount,WxAppinfo appInfo,String noncestr) { + return getOrderSPResult(returnMap,record,appInfo.getAppId(),noncestr,payAccount.getApiKey()); + } + @Override public PayAdapterResult pay(WxPayAccount payAccount,WxPayOrder record,WxComposeOrder composeOrder,List childOrders, @@ -310,11 +278,20 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem } public PayAdapterResult pay(String openId,String appId,String mchId,String productName,String attach,String payOrderNo,Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate) throws Exception { - WxPayOrderP wxPayOrderP = generateWxPayOrderP(openId, appId, mchId, productName, attach, payOrderNo, fee, ip, notifyUrl, apiKey, currentDate); + WxPayOrderP wxPayOrderP = generateWxPayOrderP(openId, appId, mchId, productName, attach, payOrderNo, fee, ip, notifyUrl, apiKey, currentDate,null); + 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,wxPayOrderP.getNonce_str(),apiKey,null); + } + + public PayAdapterResult payIsv(WxPayAccount payAccount,WxAppinfo appInfo,String subMchId,String openId,String productName,String attach,String payOrderNo,Integer fee,String ip,String notifyUrl,Date currentDate,boolean share) throws Exception { + String apiKey = payAccount.getApiKey(); + WxPayOrderSP wxPayOrderP = generateWxPayOrderSP(openId,appInfo.getParentAppId(),payAccount.getMchId(),appInfo.getAppId(),subMchId,productName,attach,payOrderNo,fee,ip,notifyUrl,null,currentDate,share,apiKey); 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,wxPayOrderP.getNonce_str(),apiKey); + return getOrderSPResult(returnMap,null,appInfo.getAppId(),wxPayOrderP.getNonce_str(),apiKey); } @Override diff --git a/mallinkService/src/main/java/com/iformall/utils/Constant.java b/mallinkService/src/main/java/com/iformall/utils/Constant.java index 0d24ee98b..bec407ae7 100644 --- a/mallinkService/src/main/java/com/iformall/utils/Constant.java +++ b/mallinkService/src/main/java/com/iformall/utils/Constant.java @@ -117,5 +117,6 @@ public class Constant { public static final Integer wiwideNewPlat = 1;//新平台 public static final String paymentReceicerParamApiKey = "apiKey"; + public static final String paymentReceiverParamIsv = "isvModel"; }