From c299567aa23d96a1c4085f79d0c0f3310b563ba0 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Sun, 14 Aug 2022 16:49:24 +0800 Subject: [PATCH] fix pay v3 --- .../com/iformall/enums/EnumPayVersion.java | 3 +- .../main/java/com/iformall/pay/WxPayV3.java | 20 +- .../service/impl/WxPayOrderServiceImpl.java | 2 +- .../service/pay/PayServiceFactory.java | 53 ++-- .../wx/{v2 => }/BaseWxPayAdapterService.java | 175 +++-------- .../wx/sft/BaseWxPaySFTAdapterService.java | 56 ++++ .../entity/SFTCombineCloseItemOrder.java} | 4 +- .../entity/SFTCombineCloseReq.java} | 10 +- .../entity/SFTCombineItemOrder.java} | 12 +- .../entity/SFTCombinePayAmountReq.java} | 4 +- .../SFTCombinePayCommonMiniAppReq.java} | 8 +- .../entity/SFTCombinePayerReq.java} | 4 +- .../entity/SFTPayAmountReq.java} | 4 +- .../entity/SFTPayCommonMiniAppReq.java} | 10 +- .../entity/SFTPayQueryReq.java} | 4 +- .../entity/SFTPaySettleReq.java} | 4 +- .../entity/SFTPayerReq.java} | 4 +- .../h5/WxH5PaySFTService.java} | 7 +- .../WxMiniAppPaySFTAdapterService.java} | 60 ++-- .../pay/wx/v2/BaseWxPayV2AdapterService.java | 159 ++++++++++ .../service/pay/wx/v2/h5/WxH5PayService.java | 4 +- .../appPay/WxMiniAppPayAdapterService.java | 6 +- .../maPay/WxMiniMaPayAdapterService.java | 6 +- .../pay/wx/v3/BaseWxPayV3AdapterService.java | 56 ++++ .../maPay/WxMiniMaPayV3AdapterService.java | 275 ------------------ 25 files changed, 429 insertions(+), 521 deletions(-) rename mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/{v2 => }/BaseWxPayAdapterService.java (61%) create mode 100644 mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/BaseWxPaySFTAdapterService.java rename mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/{v3/entity/CombineCloseItemOrder.java => sft/entity/SFTCombineCloseItemOrder.java} (75%) rename mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/{v3/entity/CombineCloseReq.java => sft/entity/SFTCombineCloseReq.java} (75%) rename mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/{v3/entity/CombineItemOrder.java => sft/entity/SFTCombineItemOrder.java} (78%) rename mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/{v3/entity/CombinePayAmountReq.java => sft/entity/SFTCombinePayAmountReq.java} (57%) rename mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/{v3/entity/CombinePayCommonMiniAppReq.java => sft/entity/SFTCombinePayCommonMiniAppReq.java} (60%) rename mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/{v3/entity/CombinePayerReq.java => sft/entity/SFTCombinePayerReq.java} (52%) rename mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/{v3/entity/PayAmountReq.java => sft/entity/SFTPayAmountReq.java} (58%) rename mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/{v3/entity/PayCommonMiniAppReq.java => sft/entity/SFTPayCommonMiniAppReq.java} (57%) rename mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/{v3/entity/PayQueryReq.java => sft/entity/SFTPayQueryReq.java} (73%) rename mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/{v3/entity/PaySettleReq.java => sft/entity/SFTPaySettleReq.java} (71%) rename mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/{v3/entity/PayerReq.java => sft/entity/SFTPayerReq.java} (54%) rename mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/{v3/h5/WxH5PayV3Service.java => sft/h5/WxH5PaySFTService.java} (88%) rename mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/{v3/miniApp/appPay/WxMiniAppPayV3AdapterService.java => sft/miniApp/appPay/WxMiniAppPaySFTAdapterService.java} (82%) create mode 100644 mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/BaseWxPayV2AdapterService.java create mode 100644 mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/BaseWxPayV3AdapterService.java delete mode 100644 mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/miniApp/maPay/WxMiniMaPayV3AdapterService.java diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumPayVersion.java b/mallinkService/src/main/java/com/iformall/enums/EnumPayVersion.java index c01fb2f22..f3b46ac3a 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumPayVersion.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumPayVersion.java @@ -6,7 +6,8 @@ package com.iformall.enums; public enum EnumPayVersion { WX_PAY_V2(1, "微信支付2.0,老版本"), - WX_PAY_V3(2, "微信支付3.0,对接电商收付通"), + WX_PAY_V3(2, "微信支付3.0,暂时还未接"), + WX_PAY_V3_SFT(7,"对接电商收付通版本"), DY_PAY_V2(3,"抖音支付2.0,对接商品库"), NEU_POS_V1(4,"东软POS支付1.0版本"), NO_VERSION(5,"无需支付,无版本"), diff --git a/mallinkService/src/main/java/com/iformall/pay/WxPayV3.java b/mallinkService/src/main/java/com/iformall/pay/WxPayV3.java index 0e8f3e634..f1a060b27 100644 --- a/mallinkService/src/main/java/com/iformall/pay/WxPayV3.java +++ b/mallinkService/src/main/java/com/iformall/pay/WxPayV3.java @@ -10,10 +10,10 @@ import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; import com.github.binarywang.wxpay.exception.WxPayException; import com.github.binarywang.wxpay.service.WxPayService; import com.github.binarywang.wxpay.v3.util.RsaCryptoUtil; -import com.iformall.service.pay.service.pay.wx.v3.entity.CombineCloseReq; -import com.iformall.service.pay.service.pay.wx.v3.entity.CombinePayCommonMiniAppReq; -import com.iformall.service.pay.service.pay.wx.v3.entity.PayCommonMiniAppReq; -import com.iformall.service.pay.service.pay.wx.v3.entity.PayQueryReq; +import com.iformall.service.pay.service.pay.wx.sft.entity.SFTCombineCloseReq; +import com.iformall.service.pay.service.pay.wx.sft.entity.SFTCombinePayCommonMiniAppReq; +import com.iformall.service.pay.service.pay.wx.sft.entity.SFTPayCommonMiniAppReq; +import com.iformall.service.pay.service.pay.wx.sft.entity.SFTPayQueryReq; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -89,7 +89,7 @@ public class WxPayV3 { * 电商收付通-普通支付-小程序下单 https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_2_3.shtml * @throws WxPayException */ - public static String payCommonWithMiniApp(WxPayService payService,PayCommonMiniAppReq payReq) throws WxPayException { + public static String payCommonWithMiniApp(WxPayService payService,SFTPayCommonMiniAppReq payReq) throws WxPayException { return payService.postV3WithWechatpaySerial(PAY_COMMON_MINIAPP_URL, JSON.toJSONString(payReq)); } @@ -97,7 +97,7 @@ public class WxPayV3 { * 电商收付通-普通支付-查询 https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_2_5.shtml * @throws WxPayException */ - public static String payCommonQuery(WxPayService payService,PayQueryReq payQuery) throws WxPayException { + public static String payCommonQuery(WxPayService payService,SFTPayQueryReq payQuery) throws WxPayException { return payService.postV3WithWechatpaySerial(String.format(PAY_COMMON_QUERY_URL, payQuery.getOut_trade_no()), JSON.toJSONString(payQuery)); } @@ -105,7 +105,7 @@ public class WxPayV3 { * 电商收付通-合单支付-小程序下单https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_3_4.shtml * @throws WxPayException */ - public static String payCombineCommonWithMiniApp(WxPayService payService,CombinePayCommonMiniAppReq payReq) throws WxPayException { + public static String payCombineCommonWithMiniApp(WxPayService payService,SFTCombinePayCommonMiniAppReq payReq) throws WxPayException { return payService.postV3WithWechatpaySerial(PAY_COMBINE_MINIAPP_URL, JSON.toJSONString(payReq)); } @@ -113,7 +113,7 @@ public class WxPayV3 { * 电商收付通-合单支付-查询 https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_3_11.shtml * @throws WxPayException */ - public static String payCombineQuery(WxPayService payService,PayQueryReq payQuery) throws WxPayException { + public static String payCombineQuery(WxPayService payService,SFTPayQueryReq payQuery) throws WxPayException { return payService.postV3WithWechatpaySerial(String.format(PAY_COMBINE_QUERY_URL, payQuery.getOut_trade_no()), null); } @@ -122,7 +122,7 @@ public class WxPayV3 { * 电商收付通-普通支付-关闭 https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_3_11.shtml * @throws WxPayException */ - public static String payCommonClose(WxPayService payService,PayQueryReq payQuery) throws WxPayException { + public static String payCommonClose(WxPayService payService,SFTPayQueryReq payQuery) throws WxPayException { return payService.postV3WithWechatpaySerial(String.format(PAY_COMMON_CLOSE_ORDER_URL, payQuery.getOut_trade_no()), JSON.toJSONString(payQuery)); } @@ -131,7 +131,7 @@ public class WxPayV3 { * 电商收付通-合单支付-关闭 https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_3_12.shtml * @throws WxPayException */ - public static String payCombineClose(WxPayService payService,CombineCloseReq closeOrder) throws WxPayException { + public static String payCombineClose(WxPayService payService,SFTCombineCloseReq closeOrder) throws WxPayException { return payService.postV3WithWechatpaySerial(String.format(PAY_COMBINE_CLOSE_ORDER_URL, closeOrder.getCombine_out_trade_no()), JSON.toJSONString(closeOrder)); } 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 fc2798c59..cd25d8321 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java @@ -448,7 +448,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { } int share_amount = 0; int rate_amount = 0; - 11111111111111111111 + //TODO 11111111111111111111 //todo 注意购物车模式(需测试)每笔子订单算法可能与总订单算法有差 for (WxOrder o : orderList) { Long merchant_id = null; diff --git a/mallinkService/src/main/java/com/iformall/service/pay/PayServiceFactory.java b/mallinkService/src/main/java/com/iformall/service/pay/PayServiceFactory.java index 3c189406e..d71126560 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/PayServiceFactory.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/PayServiceFactory.java @@ -22,12 +22,11 @@ import com.iformall.service.pay.service.pay.CDrivingPayService; import com.iformall.service.pay.service.pay.CPassivePayService; import com.iformall.service.pay.service.pay.PayAdapterService; import com.iformall.service.pay.service.pay.douyin.v1.miniApp.TtMiniAppPayAdapterService; +import com.iformall.service.pay.service.pay.wx.sft.h5.WxH5PaySFTService; +import com.iformall.service.pay.service.pay.wx.sft.miniApp.appPay.WxMiniAppPaySFTAdapterService; import com.iformall.service.pay.service.pay.wx.v2.h5.WxH5PayService; import com.iformall.service.pay.service.pay.wx.v2.miniApp.appPay.WxMiniAppPayAdapterService; import com.iformall.service.pay.service.pay.wx.v2.miniApp.maPay.WxMiniMaPayAdapterService; -import com.iformall.service.pay.service.pay.wx.v3.h5.WxH5PayV3Service; -import com.iformall.service.pay.service.pay.wx.v3.miniApp.appPay.WxMiniAppPayV3AdapterService; -import com.iformall.service.pay.service.pay.wx.v3.miniApp.maPay.WxMiniMaPayV3AdapterService; import com.iformall.service.pay.service.refund.RefundPayAdapterService; import com.iformall.service.pay.service.share.PayShareAdapterService; @@ -47,17 +46,15 @@ public class PayServiceFactory { @Autowired WxMiniAppPayAdapterService wxMiniAppPayService; @Autowired - WxMiniAppPayV3AdapterService wxMiniAppPayV3AdapterService; + WxMiniAppPaySFTAdapterService wxMiniAppPayV3AdapterService; @Autowired WxMiniMaPayAdapterService wxMiniAppMaPayService; - @Autowired - WxMiniMaPayV3AdapterService wxMiniMaPayV3AdapterService; @Autowired WxH5PayService wxH5PayService; @Autowired - WxH5PayV3Service wxH5PayV3Service; + WxH5PaySFTService wxH5PayV3Service; @Autowired TtMiniAppPayAdapterService ttMiniAppPayService; @@ -89,11 +86,11 @@ public class PayServiceFactory { if (null == serviceMap) { serviceMap = new ConcurrentHashMap(); serviceMap.put(EnumPayWay.PAY_WAY_WECHAT.getCode()+"_"+EnumPayVersion.WX_PAY_V2.getCode(), wxMiniAppPayService); - serviceMap.put(EnumPayWay.PAY_WAY_WECHAT.getCode()+"_"+EnumPayVersion.WX_PAY_V3.getCode(), wxMiniAppPayV3AdapterService); + serviceMap.put(EnumPayWay.PAY_WAY_WECHAT.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxMiniAppPayV3AdapterService); serviceMap.put(EnumPayWay.PAY_WAY_WECHAT_MA.getCode()+"_"+EnumPayVersion.WX_PAY_V2.getCode(), wxMiniAppMaPayService); - serviceMap.put(EnumPayWay.PAY_WAY_WECHAT_MA.getCode()+"_"+EnumPayVersion.WX_PAY_V3.getCode(), wxMiniMaPayV3AdapterService); + serviceMap.put(EnumPayWay.PAY_WAY_WECHAT_MA.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxMiniAppMaPayService); serviceMap.put(EnumPayWay.PAY_WAY_WECHAT_WAP.getCode()+"_"+EnumPayVersion.WX_PAY_V2.getCode(), wxH5PayService); - serviceMap.put(EnumPayWay.PAY_WAY_WECHAT_WAP.getCode()+"_"+EnumPayVersion.WX_PAY_V3.getCode(), wxH5PayV3Service); + serviceMap.put(EnumPayWay.PAY_WAY_WECHAT_WAP.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxH5PayV3Service); serviceMap.put(EnumPayWay.PAY_WAY_TT.getCode()+"_"+EnumPayVersion.DY_PAY_V2.getCode(),ttMiniAppPayService); } return serviceMap; @@ -103,7 +100,7 @@ public class PayServiceFactory { if (null == qrcodeMap) { qrcodeMap = new ConcurrentHashMap(); qrcodeMap.put(EnumAppPlat.WX.getCode()+"_"+EnumPayVersion.WX_PAY_V2.getCode(), wxMiniAppPayService); - qrcodeMap.put(EnumAppPlat.WX.getCode()+"_"+EnumPayVersion.WX_PAY_V3.getCode(), wxMiniAppPayService); + qrcodeMap.put(EnumAppPlat.WX.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxMiniAppPayService); qrcodeMap.put(EnumAppPlat.TOUTIAO.getCode()+"_"+EnumPayVersion.DY_PAY_V2.getCode(),ttMiniAppPayService); } return qrcodeMap; @@ -128,19 +125,19 @@ public class PayServiceFactory { shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_CREDIT.getCode()+"_"+EnumPayVersion.WX_PAY_V2.getCode(), wxShareService); shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_GIFTLIST.getCode()+"_"+EnumPayVersion.WX_PAY_V2.getCode(), wxShareService); - shareMap.put(EnumPayWay.PAY_WAY_WECHAT.getCode()+"_"+EnumPayVersion.WX_PAY_V3.getCode(), wxPayShareV3Service); - shareMap.put(EnumPayWay.PAY_WAY_WECHAT_MA.getCode()+"_"+EnumPayVersion.WX_PAY_V3.getCode(), wxPayShareV3Service); - shareMap.put(EnumPayWay.PAY_WAY_POS_NEU.getCode()+"_"+EnumPayVersion.WX_PAY_V3.getCode(), wxPayShareV3Service); - shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_MERCHANT.getCode()+"_"+EnumPayVersion.WX_PAY_V3.getCode(), wxPayShareV3Service); - shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_VERRIFY.getCode()+"_"+EnumPayVersion.WX_PAY_V3.getCode(), wxPayShareV3Service); - shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_B_MA.getCode()+"_"+EnumPayVersion.WX_PAY_V3.getCode(), wxPayShareV3Service); - shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_CAR_STOP.getCode()+"_"+EnumPayVersion.WX_PAY_V3.getCode(), wxPayShareV3Service); - shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_SYSTEM_SEND.getCode()+"_"+EnumPayVersion.WX_PAY_V3.getCode(), wxPayShareV3Service); - shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_BATCH_SEND.getCode()+"_"+EnumPayVersion.WX_PAY_V3.getCode(), wxPayShareV3Service); - shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_TRADE.getCode()+"_"+EnumPayVersion.WX_PAY_V3.getCode(), wxPayShareV3Service); - shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_PASSWD.getCode()+"_"+EnumPayVersion.WX_PAY_V3.getCode(), wxPayShareV3Service); - shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_CREDIT.getCode()+"_"+EnumPayVersion.WX_PAY_V3.getCode(), wxPayShareV3Service); - shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_GIFTLIST.getCode()+"_"+EnumPayVersion.WX_PAY_V3.getCode(), wxPayShareV3Service); + shareMap.put(EnumPayWay.PAY_WAY_WECHAT.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxPayShareV3Service); + shareMap.put(EnumPayWay.PAY_WAY_WECHAT_MA.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxPayShareV3Service); + shareMap.put(EnumPayWay.PAY_WAY_POS_NEU.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxPayShareV3Service); + shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_MERCHANT.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxPayShareV3Service); + shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_VERRIFY.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxPayShareV3Service); + shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_B_MA.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxPayShareV3Service); + shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_CAR_STOP.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxPayShareV3Service); + shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_SYSTEM_SEND.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxPayShareV3Service); + shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_BATCH_SEND.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxPayShareV3Service); + shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_TRADE.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxPayShareV3Service); + shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_PASSWD.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxPayShareV3Service); + shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_CREDIT.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxPayShareV3Service); + shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_GIFTLIST.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxPayShareV3Service); } return shareMap; } @@ -150,8 +147,8 @@ public class PayServiceFactory { refundMap = new ConcurrentHashMap(); refundMap.put(EnumPayWay.PAY_WAY_WECHAT.getCode()+"_"+EnumPayVersion.WX_PAY_V2.getCode(), wxRefundService); refundMap.put(EnumPayWay.PAY_WAY_WECHAT_MA.getCode()+"_"+EnumPayVersion.WX_PAY_V2.getCode(), wxRefundService); - refundMap.put(EnumPayWay.PAY_WAY_WECHAT.getCode()+"_"+EnumPayVersion.WX_PAY_V3.getCode(), wxRefundV3AdapterService); - refundMap.put(EnumPayWay.PAY_WAY_WECHAT_MA.getCode()+"_"+EnumPayVersion.WX_PAY_V3.getCode(), wxRefundV3AdapterService); + refundMap.put(EnumPayWay.PAY_WAY_WECHAT.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxRefundV3AdapterService); + refundMap.put(EnumPayWay.PAY_WAY_WECHAT_MA.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxRefundV3AdapterService); refundMap.put(EnumPayWay.PAY_WAY_TT.getCode()+"_"+EnumPayVersion.DY_PAY_V2.getCode(), ttRefundService); } return refundMap; @@ -162,8 +159,8 @@ public class PayServiceFactory { cashoutMap = new ConcurrentHashMap(); cashoutMap.put(EnumPayWay.PAY_WAY_WECHAT.getCode()+"_"+EnumPayVersion.WX_PAY_V2.getCode(), wxCashOutService); cashoutMap.put(EnumPayWay.PAY_WAY_WECHAT_MA.getCode()+"_"+EnumPayVersion.WX_PAY_V2.getCode(), wxCashOutService); - cashoutMap.put(EnumPayWay.PAY_WAY_WECHAT.getCode()+"_"+EnumPayVersion.WX_PAY_V3.getCode(), wxCashOutV3AdapterService); - cashoutMap.put(EnumPayWay.PAY_WAY_WECHAT_MA.getCode()+"_"+EnumPayVersion.WX_PAY_V3.getCode(), wxCashOutV3AdapterService); + cashoutMap.put(EnumPayWay.PAY_WAY_WECHAT.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxCashOutV3AdapterService); + cashoutMap.put(EnumPayWay.PAY_WAY_WECHAT_MA.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxCashOutV3AdapterService); } return cashoutMap; } diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/BaseWxPayAdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/BaseWxPayAdapterService.java similarity index 61% rename from mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/BaseWxPayAdapterService.java rename to mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/BaseWxPayAdapterService.java index 6d8534399..dcb5f2458 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/BaseWxPayAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/BaseWxPayAdapterService.java @@ -1,4 +1,4 @@ -package com.iformall.service.pay.service.pay.wx.v2; +package com.iformall.service.pay.service.pay.wx; import java.io.File; import java.util.Date; @@ -51,22 +51,38 @@ import me.chanjar.weixin.open.api.WxOpenService; @Slf4j public class BaseWxPayAdapterService { - protected PayQueryAdapterResult queryPayStatus(WxPayOrder oldRecord, WxAppinfo appInfo, WxPayAccount payAccount) - throws Exception { - Map retMap = WxPayOrderServiceHelper.wxOrderPayStatusMap(oldRecord, appInfo, payAccount); - int code = WxPayOrderServiceHelper.getPayStatusFromMap(retMap,oldRecord.getPayOrderNo()); - String msg = WxPayOrderServiceHelper.getPayStatusMsg(retMap, oldRecord.getPayOrderNo()); - PayQueryAdapterResult result = new PayQueryAdapterResult(code, msg,null, retMap,retMap.get("transaction_id"),retMap.get("time_end")); - return result; - } - - protected int queryPayStatus(PayQueryAdapterResult statusObject, String orderOutNo) throws Exception { - return WxPayOrderServiceHelper.getPayStatusFromMap((Map) statusObject.getData(),orderOutNo); - } + @Autowired + WxOpenService openService; + + @Autowired + MaUtil maUtil; + + protected File getQrCode(WxAppinfo appinfo,String pageUrl,int type,String sceneParam) throws WxErrorException { + boolean isFmOpen = false; + WxMaService wxMaService; + if(isFmOpen) { + wxMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appinfo.getAppId()); + } else { + wxMaService = maUtil.getWeappService(appinfo); + } - protected int queryPayStatusCode(WxPayOrder oldRecord, WxAppinfo appInfo, WxPayAccount payAccount) - throws Exception { - return WxPayOrderServiceHelper.wxOrderPayStatus(oldRecord, appInfo, payAccount); + boolean autoColor = false; + boolean isHyaline = true; + WxMaCodeLineColor color = new WxMaCodeLineColor("0", "0", "0"); + + String pathStr = ""; + if (StringUtils.isNotBlank(sceneParam)) { + pathStr = pageUrl + "?scene="+sceneParam; + } else { + pathStr = pageUrl; + } + if(type == 0) { + final File codeFile = wxMaService.getQrcodeService().createQrcode(pathStr, QRCodeUtils.QR_WIDTH); + return codeFile; + }else { + final File codeFile = wxMaService.getQrcodeService().createWxaCodeUnlimit(sceneParam, pageUrl, QRCodeUtils.QR_WIDTH, autoColor, color, isHyaline); + return codeFile; + } } JSONObject errorMapClose = JSON.parseObject("{" + @@ -77,85 +93,17 @@ public class BaseWxPayAdapterService { "\"REQUIRE_POST_METHOD\":{\"detail\":\"请使用post方法\",\"reason\":\"未使用post传递参数\",\"resolution\":\"请检查请求参数是否通过post方法提交\"}," + "\"XML_FORMAT_ERROR\":{\"detail\":\"XML格式错误\t\",\"reason\":\"XML格式错误\",\"reason\":\"请检查XML参数格式是否正确\"}}"); - protected PayAdapterResult closeOrder(WxAppinfo appInfo, WxPayOrder record,WxPayAccount payAccount) { - String response = closeOrderWx(appInfo, record,payAccount); - log.info("pay order close, " + record.toString() + ", response: " + response); - Map returnMap = WxPayment.xmlToMap(response); - String return_code = returnMap.get("return_code"); - String result_code = returnMap.get("result_code"); - if ("SUCCESS".equalsIgnoreCase(return_code)) { - if ("SUCCESS".equals(result_code)) { - return new PayAdapterResult(true, "success", returnMap, null); - } else { - String errMsg = ""; - JSONObject errObj = errorMapClose.getJSONObject(result_code); - if (errObj != null) { - errMsg = errObj.toJSONString(); - } else { - errMsg = returnMap.get("return_msg"); - } - return new PayAdapterResult(false, errMsg, returnMap, null); - } - } else { - String errMsg = returnMap.get("return_msg"); - return new PayAdapterResult(false, errMsg, returnMap, null); - } - - } - - private String closeOrderWx(WxAppinfo appInfo, WxPayOrder record,WxPayAccount payAccount) { - // get payAccount - if (payAccount.getType() == EnumPayMode.MCH.getCode()) { - // 普通商户号模式 - WxPayOrderQ payOrderC = new WxPayOrderQ(); - String noncestr = Utility.generate32UUID(); - payOrderC.setAppid(appInfo.getAppId()); - payOrderC.setMch_id(payAccount.getMchId()); - payOrderC.setNonce_str(noncestr); - payOrderC.setOut_trade_no(record.getPayOrderNo()); - - try { - Map map = BeanUtils.toStringMap(payOrderC); - payOrderC.setSign(WxPayment.createSign(map, payAccount.getApiKey())); - map = BeanUtils.toStringMap(payOrderC); - String response = WxPay.closeOrder(map); - log.info("request:" + map.toString() + "\nresponse:" + response); - return response; - } catch (RuntimeException e) { - throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage()); - } catch (Exception e) { - throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage()); - } - } else { - // 服务商模式 - WxPayOrderSQ payOrderSC = new WxPayOrderSQ(); - String noncestr = Utility.generate32UUID(); - payOrderSC.setAppid(appInfo.getParentAppId()); - payOrderSC.setSub_appid(appInfo.getAppId()); - payOrderSC.setMch_id(payAccount.getMchId()); - payOrderSC.setSub_mch_id(payAccount.getSubMchId()); - payOrderSC.setNonce_str(noncestr); - payOrderSC.setOut_trade_no(record.getPayOrderNo()); - payOrderSC.setSign_type("HMAC-SHA256"); - - try { - Map map = BeanUtils.toStringMap(payOrderSC); - payOrderSC.setSign(WxPayment.createSignHMAC(map, payAccount.getApiKey())); - map = BeanUtils.toStringMap(payOrderSC); - String response = WxPay.closeOrder(map); - log.info("request:" + map.toString() + "\nresponse:" + response); - return response; - } catch (RuntimeException e) { - throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage()); - } catch (Exception e) { - throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage()); - } - } - } - + /** + * 收款码支付回撤,都是2.0版本 + * @param appInfo + * @param record + * @param payAccount + * @return + * @throws Exception + */ - protected PayAdapterResult payOrderReverse(WxAppinfo appInfo, WxPayOrder record,WxPayAccount payAccount) throws Exception { - String response = payOrderReverseWx(appInfo, record,payAccount); + protected PayAdapterResult payOrderReverse(WxAppinfo appInfo, WxPayOrder record,WxPayAccount payAccount,String subMchId) throws Exception { + String response = payOrderReverseWx(appInfo, record,payAccount,subMchId); log.info("pay order reverse, " + record.toString() + ", response: " + response); Map returnMap = WxPayment.xmlToMap(response); String return_code = returnMap.get("return_code"); @@ -179,7 +127,7 @@ public class BaseWxPayAdapterService { } } - private String payOrderReverseWx(WxAppinfo appInfo, WxPayOrder record,WxPayAccount payAccount) { + private String payOrderReverseWx(WxAppinfo appInfo, WxPayOrder record,WxPayAccount payAccount,String subMchId) { // get payAccount if (payAccount.getType() == EnumPayMode.MCH.getCode()) { // 普通商户号模式 @@ -209,7 +157,7 @@ public class BaseWxPayAdapterService { payOrderSC.setAppid(appInfo.getParentAppId()); payOrderSC.setSub_appid(appInfo.getAppId()); payOrderSC.setMch_id(payAccount.getMchId()); - payOrderSC.setSub_mch_id(payAccount.getSubMchId()); + payOrderSC.setSub_mch_id(subMchId); payOrderSC.setNonce_str(noncestr); payOrderSC.setOut_trade_no(record.getPayOrderNo()); payOrderSC.setSign_type("HMAC-SHA256"); @@ -228,39 +176,4 @@ public class BaseWxPayAdapterService { } } } - - - @Autowired - WxOpenService openService; - - @Autowired - MaUtil maUtil; - - protected File getQrCode(WxAppinfo appinfo,String pageUrl,int type,String sceneParam) throws WxErrorException { - boolean isFmOpen = false; - WxMaService wxMaService; - if(isFmOpen) { - wxMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appinfo.getAppId()); - } else { - wxMaService = maUtil.getWeappService(appinfo); - } - - boolean autoColor = false; - boolean isHyaline = true; - WxMaCodeLineColor color = new WxMaCodeLineColor("0", "0", "0"); - - String pathStr = ""; - if (StringUtils.isNotBlank(sceneParam)) { - pathStr = pageUrl + "?scene="+sceneParam; - } else { - pathStr = pageUrl; - } - if(type == 0) { - final File codeFile = wxMaService.getQrcodeService().createQrcode(pathStr, QRCodeUtils.QR_WIDTH); - return codeFile; - }else { - final File codeFile = wxMaService.getQrcodeService().createWxaCodeUnlimit(sceneParam, pageUrl, QRCodeUtils.QR_WIDTH, autoColor, color, isHyaline); - return codeFile; - } - } } diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/BaseWxPaySFTAdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/BaseWxPaySFTAdapterService.java new file mode 100644 index 000000000..32d5c7af9 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/BaseWxPaySFTAdapterService.java @@ -0,0 +1,56 @@ +package com.iformall.service.pay.service.pay.wx.sft; + +import java.io.File; +import java.util.Date; +import java.util.Map; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.iformall.common.ErrorCode; +import com.iformall.common.Result; +import com.iformall.common.ResultData; +import com.iformall.domain.po.PosCouponOrderVerify; +import com.iformall.domain.po.WxAppinfo; +import com.iformall.domain.po.WxBatchOrder; +import com.iformall.domain.po.WxCouponOrder; +import com.iformall.domain.po.WxOrder; +import com.iformall.domain.po.WxPayAccount; +import com.iformall.domain.po.WxPayOrder; +import com.iformall.enums.EnumCouponOrderStatus; +import com.iformall.enums.EnumOrderFrom; +import com.iformall.enums.EnumOrderStatus; +import com.iformall.enums.EnumOrderType; +import com.iformall.enums.EnumPayMode; +import com.iformall.enums.EnumPayStatus; +import com.iformall.exception.MallinkException; +import com.iformall.pay.WxPay; +import com.iformall.pay.WxPayOrderQ; +import com.iformall.pay.WxPayOrderSQ; +import com.iformall.pay.WxPayment; +import com.iformall.service.QrCodeService; +import com.iformall.service.helper.WxPayOrderServiceHelper; +import com.iformall.service.pay.service.pay.PayAdapterService; +import com.iformall.service.pay.service.pay.entity.PayAdapterResult; +import com.iformall.service.pay.service.pay.entity.PayQueryAdapterResult; +import com.iformall.service.pay.service.pay.wx.BaseWxPayAdapterService; +import com.iformall.utils.BeanUtils; +import com.iformall.utils.MaUtil; +import com.iformall.utils.QRCodeUtils; +import com.iformall.utils.Utility; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.WxMaCodeLineColor; +import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.open.api.WxOpenService; + +@Slf4j +public class BaseWxPaySFTAdapterService extends BaseWxPayAdapterService{ + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/CombineCloseItemOrder.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTCombineCloseItemOrder.java similarity index 75% rename from mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/CombineCloseItemOrder.java rename to mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTCombineCloseItemOrder.java index 34fc646df..fdb64b086 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/CombineCloseItemOrder.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTCombineCloseItemOrder.java @@ -1,9 +1,9 @@ -package com.iformall.service.pay.service.pay.wx.v3.entity; +package com.iformall.service.pay.service.pay.wx.sft.entity; import lombok.Data; @Data -public class CombineCloseItemOrder { +public class SFTCombineCloseItemOrder { private String mchid;//子单发起方商户号,必须与发起方appid有绑定关系 private String out_trade_no;//子单商户订单号 diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/CombineCloseReq.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTCombineCloseReq.java similarity index 75% rename from mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/CombineCloseReq.java rename to mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTCombineCloseReq.java index 9791e293e..db2305a7f 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/CombineCloseReq.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTCombineCloseReq.java @@ -1,4 +1,4 @@ -package com.iformall.service.pay.service.pay.wx.v3.entity; +package com.iformall.service.pay.service.pay.wx.sft.entity; import java.util.ArrayList; import java.util.List; @@ -9,21 +9,21 @@ import com.iformall.service.order.entity.WxComposeChildOrderShare; import lombok.Data; @Data -public class CombineCloseReq { +public class SFTCombineCloseReq { private String combine_appid;//合单发起方的appid @JSONField(serialize = false) private String combine_out_trade_no;//不放到body - private List sub_orders; + private List sub_orders; public void initSubOrders(WxPayAccount payAccount,WxPayOrder payOrder) { List childs = payOrder.getAllChilds(); if (null != childs) { - List suborders = new ArrayList(); + List suborders = new ArrayList(); for (WxComposeChildOrderShare child : childs) { - CombineCloseItemOrder ccio = new CombineCloseItemOrder(); + SFTCombineCloseItemOrder ccio = new SFTCombineCloseItemOrder(); ccio.setMchid(payAccount.getMchId()); ccio.setSub_mchid(child.getMerchantUid()); ccio.setOut_trade_no(String.valueOf(child.getOrderId())); diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/CombineItemOrder.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTCombineItemOrder.java similarity index 78% rename from mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/CombineItemOrder.java rename to mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTCombineItemOrder.java index 8e6a24b1c..5a54494db 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/CombineItemOrder.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTCombineItemOrder.java @@ -1,4 +1,4 @@ -package com.iformall.service.pay.service.pay.wx.v3.entity; +package com.iformall.service.pay.service.pay.wx.sft.entity; import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxOrder; @@ -7,26 +7,26 @@ import com.iformall.domain.po.WxPayAccount; import lombok.Data; @Data -public class CombineItemOrder { +public class SFTCombineItemOrder { private String mchid;//子单发起方商户号,必须与发起方appid有绑定关系 private String attach;//附加数据,在查询API和支付通知中原样返回,可作为自定义参数使用 - private CombinePayAmountReq amount;//订单金额 + private SFTCombinePayAmountReq amount;//订单金额 private String out_trade_no;//子单商户订单号 private String sub_mchid;//二级商户号,服务商子商户的商户号,被合单方。直连商户不用传二级商户号 private String description;//商品描述,需传入应用市场上的APP名字-实际商品名称 - private PaySettleReq settle_info;//结算信息 + private SFTPaySettleReq settle_info;//结算信息 public void initByWxOrder(WxPayAccount payAccount,WxOrder order,String subMchId,WxAppinfo appInfo,String productName,String extParam) { this.mchid = payAccount.getMchId(); this.attach = extParam; - CombinePayAmountReq amount = new CombinePayAmountReq(); + SFTCombinePayAmountReq amount = new SFTCombinePayAmountReq(); amount.setTotal_amount(order.getPayment()); this.setAmount(amount); this.out_trade_no = String.valueOf(order.getId()); this.sub_mchid = subMchId; this.description = appInfo.getName()+"-"+productName; - PaySettleReq settle = new PaySettleReq(); + SFTPaySettleReq settle = new SFTPaySettleReq(); settle.setProfit_sharing(true); this.setSettle_info(settle); } diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/CombinePayAmountReq.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTCombinePayAmountReq.java similarity index 57% rename from mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/CombinePayAmountReq.java rename to mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTCombinePayAmountReq.java index d82f24c8d..a2829646b 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/CombinePayAmountReq.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTCombinePayAmountReq.java @@ -1,9 +1,9 @@ -package com.iformall.service.pay.service.pay.wx.v3.entity; +package com.iformall.service.pay.service.pay.wx.sft.entity; import lombok.Data; @Data -public class CombinePayAmountReq { +public class SFTCombinePayAmountReq { private int total_amount;//总金额,单位为分。 private String currency="CNY";//货币类型 diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/CombinePayCommonMiniAppReq.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTCombinePayCommonMiniAppReq.java similarity index 60% rename from mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/CombinePayCommonMiniAppReq.java rename to mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTCombinePayCommonMiniAppReq.java index 344768314..57bc2f301 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/CombinePayCommonMiniAppReq.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTCombinePayCommonMiniAppReq.java @@ -1,16 +1,16 @@ -package com.iformall.service.pay.service.pay.wx.v3.entity; +package com.iformall.service.pay.service.pay.wx.sft.entity; import java.util.List; import lombok.Data; @Data -public class CombinePayCommonMiniAppReq { +public class SFTCombinePayCommonMiniAppReq { private String combine_appid;//合单发起方的appid private String combine_mchid;//合单发起方商户号,服务商和电商模式下,传服务商商户号 private String combine_out_trade_no;//合单支付总订单号 - private List sub_orders;//商品描述 - private CombinePayerReq combine_payer_info;// 支付者信息 + private List sub_orders;//商品描述 + private SFTCombinePayerReq combine_payer_info;// 支付者信息 private String notify_url;//接收微信支付异步通知回调地址 } diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/CombinePayerReq.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTCombinePayerReq.java similarity index 52% rename from mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/CombinePayerReq.java rename to mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTCombinePayerReq.java index a94fb15cd..e4001fbcf 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/CombinePayerReq.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTCombinePayerReq.java @@ -1,9 +1,9 @@ -package com.iformall.service.pay.service.pay.wx.v3.entity; +package com.iformall.service.pay.service.pay.wx.sft.entity; import lombok.Data; @Data -public class CombinePayerReq { +public class SFTCombinePayerReq { private String openid;//使用合单appid获取的对应用户openid diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/PayAmountReq.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTPayAmountReq.java similarity index 58% rename from mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/PayAmountReq.java rename to mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTPayAmountReq.java index 7282676a3..f3113962f 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/PayAmountReq.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTPayAmountReq.java @@ -1,9 +1,9 @@ -package com.iformall.service.pay.service.pay.wx.v3.entity; +package com.iformall.service.pay.service.pay.wx.sft.entity; import lombok.Data; @Data -public class PayAmountReq { +public class SFTPayAmountReq { private int total;//总金额,单位为分。 private String currency="CNY";//货币类型 diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/PayCommonMiniAppReq.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTPayCommonMiniAppReq.java similarity index 57% rename from mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/PayCommonMiniAppReq.java rename to mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTPayCommonMiniAppReq.java index 3948429e7..9d547cd58 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/PayCommonMiniAppReq.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTPayCommonMiniAppReq.java @@ -1,9 +1,9 @@ -package com.iformall.service.pay.service.pay.wx.v3.entity; +package com.iformall.service.pay.service.pay.wx.sft.entity; import lombok.Data; @Data -public class PayCommonMiniAppReq { +public class SFTPayCommonMiniAppReq { private String sp_appid;//服务商应用ID private String sp_mchid;//服务商户号 @@ -11,7 +11,7 @@ public class PayCommonMiniAppReq { private String description;//商品描述 private String out_trade_no;//商户订单号 private String notify_url;//通知地址,不允许携带查询串 - private PaySettleReq settle_info;//结算信息 - private PayAmountReq amount;//订单金额 - private PayerReq payer;//支付者 + private SFTPaySettleReq settle_info;//结算信息 + private SFTPayAmountReq amount;//订单金额 + private SFTPayerReq payer;//支付者 } diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/PayQueryReq.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTPayQueryReq.java similarity index 73% rename from mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/PayQueryReq.java rename to mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTPayQueryReq.java index 628250d5d..06a781ba9 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/PayQueryReq.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTPayQueryReq.java @@ -1,11 +1,11 @@ -package com.iformall.service.pay.service.pay.wx.v3.entity; +package com.iformall.service.pay.service.pay.wx.sft.entity; import com.alibaba.fastjson.annotation.JSONField; import lombok.Data; @Data -public class PayQueryReq { +public class SFTPayQueryReq { private String sp_mchid;//服务商户号。 private String sub_mchid;//二级商户号 diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/PaySettleReq.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTPaySettleReq.java similarity index 71% rename from mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/PaySettleReq.java rename to mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTPaySettleReq.java index e4253c574..3e56a5f61 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/PaySettleReq.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTPaySettleReq.java @@ -1,9 +1,9 @@ -package com.iformall.service.pay.service.pay.wx.v3.entity; +package com.iformall.service.pay.service.pay.wx.sft.entity; import lombok.Data; @Data -public class PaySettleReq { +public class SFTPaySettleReq { private boolean profit_sharing;//是否指定分账 private int subsidy_amount = 0;//补差金额,单笔订单最高补差金额为5000元.SettleInfo.profit_sharing为true时,该金额才生效 diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/PayerReq.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTPayerReq.java similarity index 54% rename from mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/PayerReq.java rename to mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTPayerReq.java index 65b9a86b4..448bc19d6 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/entity/PayerReq.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/entity/SFTPayerReq.java @@ -1,9 +1,9 @@ -package com.iformall.service.pay.service.pay.wx.v3.entity; +package com.iformall.service.pay.service.pay.wx.sft.entity; import lombok.Data; @Data -public class PayerReq { +public class SFTPayerReq { private String sp_openid;//用户在服务商appid下的唯一标识 diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/h5/WxH5PayV3Service.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/h5/WxH5PaySFTService.java similarity index 88% rename from mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/h5/WxH5PayV3Service.java rename to mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/h5/WxH5PaySFTService.java index 63ce89568..b611256a6 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/h5/WxH5PayV3Service.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/h5/WxH5PaySFTService.java @@ -1,4 +1,4 @@ -package com.iformall.service.pay.service.pay.wx.v3.h5; +package com.iformall.service.pay.service.pay.wx.sft.h5; import java.io.File; import java.util.Date; @@ -16,10 +16,11 @@ import com.iformall.service.pay.entity.PayExtraParam; import com.iformall.service.pay.service.pay.CDrivingPayService; import com.iformall.service.pay.service.pay.entity.PayAdapterResult; import com.iformall.service.pay.service.pay.entity.PayQueryAdapterResult; -import com.iformall.service.pay.service.pay.wx.v2.BaseWxPayAdapterService; +import com.iformall.service.pay.service.pay.wx.sft.BaseWxPaySFTAdapterService; +import com.iformall.service.pay.service.pay.wx.v2.BaseWxPayV2AdapterService; @Service -public class WxH5PayV3Service implements CDrivingPayService{ +public class WxH5PaySFTService extends BaseWxPaySFTAdapterService implements CDrivingPayService{ @Override public PayAdapterResult pay(WxPayAccount payAccount,WxPayOrder record,WxComposeOrder composeOrder,List childOrders, diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/miniApp/appPay/WxMiniAppPayV3AdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/miniApp/appPay/WxMiniAppPaySFTAdapterService.java similarity index 82% rename from mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/miniApp/appPay/WxMiniAppPayV3AdapterService.java rename to mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/miniApp/appPay/WxMiniAppPaySFTAdapterService.java index c7d9f1bfe..df4ebcd50 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/miniApp/appPay/WxMiniAppPayV3AdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/miniApp/appPay/WxMiniAppPaySFTAdapterService.java @@ -1,4 +1,4 @@ -package com.iformall.service.pay.service.pay.wx.v3.miniApp.appPay; +package com.iformall.service.pay.service.pay.wx.sft.miniApp.appPay; import java.io.File; import java.util.ArrayList; @@ -37,16 +37,18 @@ import com.iformall.service.pay.entity.PayExtraParam; import com.iformall.service.pay.service.pay.CDrivingPayService; import com.iformall.service.pay.service.pay.entity.PayAdapterResult; import com.iformall.service.pay.service.pay.entity.PayQueryAdapterResult; -import com.iformall.service.pay.service.pay.wx.v2.BaseWxPayAdapterService; -import com.iformall.service.pay.service.pay.wx.v3.entity.CombineCloseReq; -import com.iformall.service.pay.service.pay.wx.v3.entity.CombineItemOrder; -import com.iformall.service.pay.service.pay.wx.v3.entity.CombinePayCommonMiniAppReq; -import com.iformall.service.pay.service.pay.wx.v3.entity.CombinePayerReq; -import com.iformall.service.pay.service.pay.wx.v3.entity.PayAmountReq; -import com.iformall.service.pay.service.pay.wx.v3.entity.PayCommonMiniAppReq; -import com.iformall.service.pay.service.pay.wx.v3.entity.PayQueryReq; -import com.iformall.service.pay.service.pay.wx.v3.entity.PaySettleReq; -import com.iformall.service.pay.service.pay.wx.v3.entity.PayerReq; +import com.iformall.service.pay.service.pay.wx.BaseWxPayAdapterService; +import com.iformall.service.pay.service.pay.wx.sft.BaseWxPaySFTAdapterService; +import com.iformall.service.pay.service.pay.wx.sft.entity.SFTCombineCloseReq; +import com.iformall.service.pay.service.pay.wx.sft.entity.SFTCombineItemOrder; +import com.iformall.service.pay.service.pay.wx.sft.entity.SFTCombinePayCommonMiniAppReq; +import com.iformall.service.pay.service.pay.wx.sft.entity.SFTCombinePayerReq; +import com.iformall.service.pay.service.pay.wx.sft.entity.SFTPayAmountReq; +import com.iformall.service.pay.service.pay.wx.sft.entity.SFTPayCommonMiniAppReq; +import com.iformall.service.pay.service.pay.wx.sft.entity.SFTPayQueryReq; +import com.iformall.service.pay.service.pay.wx.sft.entity.SFTPaySettleReq; +import com.iformall.service.pay.service.pay.wx.sft.entity.SFTPayerReq; +import com.iformall.service.pay.service.pay.wx.v2.BaseWxPayV2AdapterService; import com.iformall.utils.BeanUtils; import com.iformall.utils.MaUtil; import com.iformall.utils.MapUtil; @@ -56,13 +58,13 @@ import lombok.extern.slf4j.Slf4j; @Slf4j @Service -public class WxMiniAppPayV3AdapterService implements CDrivingPayService{ +public class WxMiniAppPaySFTAdapterService extends BaseWxPaySFTAdapterService implements CDrivingPayService{ @Autowired MaUtil maUtil; - private PayCommonMiniAppReq generatePayCommonRequest(WxPayAccount payAccount,WxComposeOrder composeOrder,String productName, WxPayOrder record,String openId,WxAppinfo appInfo,Date currentDate) throws Exception { - PayCommonMiniAppReq req = new PayCommonMiniAppReq(); + private SFTPayCommonMiniAppReq generatePayCommonRequest(WxPayAccount payAccount,WxComposeOrder composeOrder,String productName, WxPayOrder record,String openId,WxAppinfo appInfo,Date currentDate) throws Exception { + SFTPayCommonMiniAppReq req = new SFTPayCommonMiniAppReq(); req.setSp_appid(String.valueOf(appInfo.getId())); req.setSp_mchid(payAccount.getMchId()); req.setSub_mchid(getMerchantUid(record,composeOrder.getSingleOrder())); @@ -70,15 +72,15 @@ public class WxMiniAppPayV3AdapterService implements CDrivingPayService{ req.setOut_trade_no(String.valueOf(composeOrder.getMainOrderId())); req.setNotify_url(payAccount.getPayNotifyV3Url()); - PaySettleReq settle = new PaySettleReq(); + SFTPaySettleReq settle = new SFTPaySettleReq(); settle.setProfit_sharing(true); req.setSettle_info(settle); - PayAmountReq amout = new PayAmountReq(); + SFTPayAmountReq amout = new SFTPayAmountReq(); amout.setTotal(record.getPayAmount()); req.setAmount(amout); - PayerReq payer = new PayerReq(); + SFTPayerReq payer = new SFTPayerReq(); payer.setSp_openid(openId); req.setPayer(payer); @@ -90,24 +92,24 @@ public class WxMiniAppPayV3AdapterService implements CDrivingPayService{ return share.getMerchantUid(); } - private CombinePayCommonMiniAppReq generateCombinePayReqeust(WxPayAccount payAccount,WxComposeOrder composeOrder,List childOrders,String productName, + private SFTCombinePayCommonMiniAppReq generateCombinePayReqeust(WxPayAccount payAccount,WxComposeOrder composeOrder,List childOrders,String productName, WxPayOrder record,WxAppinfo appInfo,String openId,String appId,Date currentDate,EnumPayShare isShare) throws Exception { - CombinePayCommonMiniAppReq req = new CombinePayCommonMiniAppReq(); + SFTCombinePayCommonMiniAppReq req = new SFTCombinePayCommonMiniAppReq(); req.setCombine_appid(appInfo.getAppId()); req.setCombine_mchid(payAccount.getMchId()); req.setCombine_out_trade_no(String.valueOf(composeOrder.getMainOrderId())); - List suborders = new ArrayList(); + List suborders = new ArrayList(); for (WxOrder order : childOrders) { - CombineItemOrder so = new CombineItemOrder(); + SFTCombineItemOrder so = new SFTCombineItemOrder(); String subMchId = getMerchantUid(record,order); so.initByWxOrder(payAccount, order, subMchId, appInfo, productName, String.valueOf(record.getId())); suborders.add(so); } req.setSub_orders(suborders); - CombinePayerReq payer = new CombinePayerReq(); + SFTCombinePayerReq payer = new SFTCombinePayerReq(); payer.setOpenid(openId); req.setCombine_payer_info(payer); @@ -168,7 +170,7 @@ public class WxMiniAppPayV3AdapterService implements CDrivingPayService{ * https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_2_3.shtml */ if (childOrders.size() == 1) { - PayCommonMiniAppReq payReq = generatePayCommonRequest(payAccount,composeOrder,productName,record,openId,appInfo,currentDate); + SFTPayCommonMiniAppReq payReq = generatePayCommonRequest(payAccount,composeOrder,productName,record,openId,appInfo,currentDate); String response = WxPayV3.payCommonWithMiniApp(payService, payReq); log.info("pay order v3, " + payReq.toString() + ", response: " + response.toString()); return getOrderPResult(response); @@ -221,7 +223,7 @@ public class WxMiniAppPayV3AdapterService implements CDrivingPayService{ public PayQueryAdapterResult queryPayStatus(WxPayOrder oldRecord, WxAppinfo appInfo, WxPayAccount payAccount) throws Exception { WxPayService payService = maUtil.getWxPayService(appInfo, payAccount); - PayQueryReq req = new PayQueryReq(); + SFTPayQueryReq req = new SFTPayQueryReq(); if (!oldRecord.isMulity()) { req.setSp_mchid(payAccount.getMchId()); req.setSub_mchid(oldRecord.getSingleChildOrderShare().getMerchantUid()); @@ -259,7 +261,7 @@ public class WxMiniAppPayV3AdapterService implements CDrivingPayService{ public PayAdapterResult payOrderClose(WxAppinfo appInfo, WxPayOrder record,WxPayAccount payAccount) throws Exception { WxPayService payService = maUtil.getWxPayService(appInfo, payAccount); if (!record.isMulity()) { - PayQueryReq req = new PayQueryReq(); + SFTPayQueryReq req = new SFTPayQueryReq(); req.setSp_mchid(payAccount.getMchId()); req.setSub_mchid(record.getSingleChildOrderShare().getMerchantUid()); req.setOut_trade_no(String.valueOf(record.getId())); @@ -281,19 +283,17 @@ public class WxMiniAppPayV3AdapterService implements CDrivingPayService{ @Override public PayAdapterResult payOrderReverse(WxAppinfo appInfo, WxPayOrder record, WxPayAccount payAccount) throws Exception { - //return super.payOrderReverse(appInfo, record, payAccount); - return null; + return super.payOrderReverse(appInfo, record, payAccount, payAccount.getSubMchId()); } @Override public PayAdapterResult payOrderPush(String openId,WxAppinfo appInfo, WxBatchOrder batchOrder,WxPayOrder payOrder) throws Exception { - return null; + throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR); } @Override public File getQrcode(WxAppinfo appinfo,String pageUrl,int type,String sceneParam) throws Exception{ - //return super.getQrCode(appinfo, pageUrl, type, sceneParam); - return null; + return super.getQrCode(appinfo, pageUrl, type, sceneParam); } @Override diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/BaseWxPayV2AdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/BaseWxPayV2AdapterService.java new file mode 100644 index 000000000..a0d66c116 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/BaseWxPayV2AdapterService.java @@ -0,0 +1,159 @@ +package com.iformall.service.pay.service.pay.wx.v2; + +import java.io.File; +import java.util.Date; +import java.util.Map; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.iformall.common.ErrorCode; +import com.iformall.common.Result; +import com.iformall.common.ResultData; +import com.iformall.domain.po.PosCouponOrderVerify; +import com.iformall.domain.po.WxAppinfo; +import com.iformall.domain.po.WxBatchOrder; +import com.iformall.domain.po.WxCouponOrder; +import com.iformall.domain.po.WxOrder; +import com.iformall.domain.po.WxPayAccount; +import com.iformall.domain.po.WxPayOrder; +import com.iformall.enums.EnumCouponOrderStatus; +import com.iformall.enums.EnumOrderFrom; +import com.iformall.enums.EnumOrderStatus; +import com.iformall.enums.EnumOrderType; +import com.iformall.enums.EnumPayMode; +import com.iformall.enums.EnumPayStatus; +import com.iformall.exception.MallinkException; +import com.iformall.pay.WxPay; +import com.iformall.pay.WxPayOrderQ; +import com.iformall.pay.WxPayOrderSQ; +import com.iformall.pay.WxPayment; +import com.iformall.service.QrCodeService; +import com.iformall.service.helper.WxPayOrderServiceHelper; +import com.iformall.service.pay.service.pay.PayAdapterService; +import com.iformall.service.pay.service.pay.entity.PayAdapterResult; +import com.iformall.service.pay.service.pay.entity.PayQueryAdapterResult; +import com.iformall.service.pay.service.pay.wx.BaseWxPayAdapterService; +import com.iformall.utils.BeanUtils; +import com.iformall.utils.MaUtil; +import com.iformall.utils.QRCodeUtils; +import com.iformall.utils.Utility; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.WxMaCodeLineColor; +import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.open.api.WxOpenService; + +@Slf4j +public class BaseWxPayV2AdapterService extends BaseWxPayAdapterService{ + + protected PayQueryAdapterResult queryPayStatus(WxPayOrder oldRecord, WxAppinfo appInfo, WxPayAccount payAccount) + throws Exception { + Map retMap = WxPayOrderServiceHelper.wxOrderPayStatusMap(oldRecord, appInfo, payAccount); + int code = WxPayOrderServiceHelper.getPayStatusFromMap(retMap,oldRecord.getPayOrderNo()); + String msg = WxPayOrderServiceHelper.getPayStatusMsg(retMap, oldRecord.getPayOrderNo()); + PayQueryAdapterResult result = new PayQueryAdapterResult(code, msg,null, retMap,retMap.get("transaction_id"),retMap.get("time_end")); + return result; + } + + protected int queryPayStatus(PayQueryAdapterResult statusObject, String orderOutNo) throws Exception { + return WxPayOrderServiceHelper.getPayStatusFromMap((Map) statusObject.getData(),orderOutNo); + } + + protected int queryPayStatusCode(WxPayOrder oldRecord, WxAppinfo appInfo, WxPayAccount payAccount) + throws Exception { + return WxPayOrderServiceHelper.wxOrderPayStatus(oldRecord, appInfo, payAccount); + } + + JSONObject errorMapClose = JSON.parseObject("{" + + "\"ORDERPAID\":{\"detail\":\"订单已支付\",\"reason\":\"订单已支付,不能发起关单\",\"resolution\":\"订单已支付,不能发起关单,请当作已支付的正常交易\"}," + + "\"SYSTEMERROR\":{\"detail\":\"系统错误\",\"reason\":\"系统错误\",\"resolution\":\"系统异常,请重新调用该API\"}," + + "\"ORDERCLOSED\":{\"detail\":\"订单已关闭\",\"reason\":\"订单已关闭,无法重复关闭\",\"resolution\":\"订单已关闭,无需继续调用\"}," + + "\"SIGNERROR\":{\"detail\":\"签名错误\",\"reason\":\"参数签名结果不正确\",\"resolution\":\"请检查签名参数和方法是否都符合签名算法要求\"}," + + "\"REQUIRE_POST_METHOD\":{\"detail\":\"请使用post方法\",\"reason\":\"未使用post传递参数\",\"resolution\":\"请检查请求参数是否通过post方法提交\"}," + + "\"XML_FORMAT_ERROR\":{\"detail\":\"XML格式错误\t\",\"reason\":\"XML格式错误\",\"reason\":\"请检查XML参数格式是否正确\"}}"); + + protected PayAdapterResult closeOrder(WxAppinfo appInfo, WxPayOrder record,WxPayAccount payAccount) { + String response = closeOrderWx(appInfo, record,payAccount); + log.info("pay order close, " + record.toString() + ", response: " + response); + Map returnMap = WxPayment.xmlToMap(response); + String return_code = returnMap.get("return_code"); + String result_code = returnMap.get("result_code"); + if ("SUCCESS".equalsIgnoreCase(return_code)) { + if ("SUCCESS".equals(result_code)) { + return new PayAdapterResult(true, "success", returnMap, null); + } else { + String errMsg = ""; + JSONObject errObj = errorMapClose.getJSONObject(result_code); + if (errObj != null) { + errMsg = errObj.toJSONString(); + } else { + errMsg = returnMap.get("return_msg"); + } + return new PayAdapterResult(false, errMsg, returnMap, null); + } + } else { + String errMsg = returnMap.get("return_msg"); + return new PayAdapterResult(false, errMsg, returnMap, null); + } + + } + + private String closeOrderWx(WxAppinfo appInfo, WxPayOrder record,WxPayAccount payAccount) { + // get payAccount + if (payAccount.getType() == EnumPayMode.MCH.getCode()) { + // 普通商户号模式 + WxPayOrderQ payOrderC = new WxPayOrderQ(); + String noncestr = Utility.generate32UUID(); + payOrderC.setAppid(appInfo.getAppId()); + payOrderC.setMch_id(payAccount.getMchId()); + payOrderC.setNonce_str(noncestr); + payOrderC.setOut_trade_no(record.getPayOrderNo()); + + try { + Map map = BeanUtils.toStringMap(payOrderC); + payOrderC.setSign(WxPayment.createSign(map, payAccount.getApiKey())); + map = BeanUtils.toStringMap(payOrderC); + String response = WxPay.closeOrder(map); + log.info("request:" + map.toString() + "\nresponse:" + response); + return response; + } catch (RuntimeException e) { + throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage()); + } catch (Exception e) { + throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage()); + } + } else { + // 服务商模式 + WxPayOrderSQ payOrderSC = new WxPayOrderSQ(); + String noncestr = Utility.generate32UUID(); + payOrderSC.setAppid(appInfo.getParentAppId()); + payOrderSC.setSub_appid(appInfo.getAppId()); + payOrderSC.setMch_id(payAccount.getMchId()); + payOrderSC.setSub_mch_id(payAccount.getSubMchId()); + payOrderSC.setNonce_str(noncestr); + payOrderSC.setOut_trade_no(record.getPayOrderNo()); + payOrderSC.setSign_type("HMAC-SHA256"); + + try { + Map map = BeanUtils.toStringMap(payOrderSC); + payOrderSC.setSign(WxPayment.createSignHMAC(map, payAccount.getApiKey())); + map = BeanUtils.toStringMap(payOrderSC); + String response = WxPay.closeOrder(map); + log.info("request:" + map.toString() + "\nresponse:" + response); + return response; + } catch (RuntimeException e) { + throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage()); + } catch (Exception e) { + throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage()); + } + } + } + + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/h5/WxH5PayService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/h5/WxH5PayService.java index 6430fa1e8..baeb39194 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/h5/WxH5PayService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/h5/WxH5PayService.java @@ -16,10 +16,10 @@ import com.iformall.service.pay.entity.PayExtraParam; import com.iformall.service.pay.service.pay.CDrivingPayService; import com.iformall.service.pay.service.pay.entity.PayAdapterResult; import com.iformall.service.pay.service.pay.entity.PayQueryAdapterResult; -import com.iformall.service.pay.service.pay.wx.v2.BaseWxPayAdapterService; +import com.iformall.service.pay.service.pay.wx.v2.BaseWxPayV2AdapterService; @Service -public class WxH5PayService extends BaseWxPayAdapterService implements CDrivingPayService{ +public class WxH5PayService extends BaseWxPayV2AdapterService implements CDrivingPayService{ @Override public PayAdapterResult pay(WxPayAccount payAccount,WxPayOrder record,WxComposeOrder composeOrder,List childOrders, 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 c0f6633c9..bb7578486 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 @@ -29,7 +29,7 @@ import com.iformall.service.pay.entity.PayExtraParam; import com.iformall.service.pay.service.pay.CDrivingPayService; import com.iformall.service.pay.service.pay.entity.PayAdapterResult; import com.iformall.service.pay.service.pay.entity.PayQueryAdapterResult; -import com.iformall.service.pay.service.pay.wx.v2.BaseWxPayAdapterService; +import com.iformall.service.pay.service.pay.wx.v2.BaseWxPayV2AdapterService; import com.iformall.utils.BeanUtils; import com.iformall.utils.MapUtil; import com.iformall.utils.Utility; @@ -38,7 +38,7 @@ import lombok.extern.slf4j.Slf4j; @Slf4j @Service -public class WxMiniAppPayAdapterService extends BaseWxPayAdapterService implements CDrivingPayService{ +public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implements CDrivingPayService{ JSONObject errorMap = JSON.parseObject("{" + @@ -270,7 +270,7 @@ public class WxMiniAppPayAdapterService extends BaseWxPayAdapterService implemen @Override public PayAdapterResult payOrderReverse(WxAppinfo appInfo, WxPayOrder record, WxPayAccount payAccount) throws Exception { - return super.payOrderReverse(appInfo, record, payAccount); + return super.payOrderReverse(appInfo, record, payAccount,payAccount.getSubMchId()); } @Override diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/maPay/WxMiniMaPayAdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/maPay/WxMiniMaPayAdapterService.java index fec889d5a..4dc98c0fa 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/maPay/WxMiniMaPayAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/maPay/WxMiniMaPayAdapterService.java @@ -32,7 +32,7 @@ import com.iformall.service.pay.service.pay.CPassivePayService; import com.iformall.service.pay.service.pay.entity.CreateUser; import com.iformall.service.pay.service.pay.entity.PayAdapterResult; import com.iformall.service.pay.service.pay.entity.PayQueryAdapterResult; -import com.iformall.service.pay.service.pay.wx.v2.BaseWxPayAdapterService; +import com.iformall.service.pay.service.pay.wx.v2.BaseWxPayV2AdapterService; import com.iformall.utils.BeanUtils; import com.iformall.utils.Utility; import lombok.extern.slf4j.Slf4j; @@ -41,7 +41,7 @@ import me.chanjar.weixin.common.error.WxErrorException; @Slf4j @Service -public class WxMiniMaPayAdapterService extends BaseWxPayAdapterService implements CPassivePayService{ +public class WxMiniMaPayAdapterService extends BaseWxPayV2AdapterService implements CPassivePayService{ private WxMicroPayOrderP generateWxMicroPayOrderP(WxPayAccount payAccount, WxComposeOrder composeOrder, String productName,WxPayOrder record, EnumPayShare isShare, WxAppinfo appInfo, Date currentDate,String bAppId,String bUserPhone) throws Exception { @@ -253,7 +253,7 @@ public class WxMiniMaPayAdapterService extends BaseWxPayAdapterService implement @Override public PayAdapterResult payOrderReverse(WxAppinfo appInfo, WxPayOrder record, WxPayAccount payAccount) throws Exception { - return super.payOrderReverse(appInfo, record, payAccount); + return super.payOrderReverse(appInfo, record, payAccount,payAccount.getSubMchId()); } @Override diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/BaseWxPayV3AdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/BaseWxPayV3AdapterService.java new file mode 100644 index 000000000..1f0a591dc --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/BaseWxPayV3AdapterService.java @@ -0,0 +1,56 @@ +package com.iformall.service.pay.service.pay.wx.v3; + +import java.io.File; +import java.util.Date; +import java.util.Map; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.iformall.common.ErrorCode; +import com.iformall.common.Result; +import com.iformall.common.ResultData; +import com.iformall.domain.po.PosCouponOrderVerify; +import com.iformall.domain.po.WxAppinfo; +import com.iformall.domain.po.WxBatchOrder; +import com.iformall.domain.po.WxCouponOrder; +import com.iformall.domain.po.WxOrder; +import com.iformall.domain.po.WxPayAccount; +import com.iformall.domain.po.WxPayOrder; +import com.iformall.enums.EnumCouponOrderStatus; +import com.iformall.enums.EnumOrderFrom; +import com.iformall.enums.EnumOrderStatus; +import com.iformall.enums.EnumOrderType; +import com.iformall.enums.EnumPayMode; +import com.iformall.enums.EnumPayStatus; +import com.iformall.exception.MallinkException; +import com.iformall.pay.WxPay; +import com.iformall.pay.WxPayOrderQ; +import com.iformall.pay.WxPayOrderSQ; +import com.iformall.pay.WxPayment; +import com.iformall.service.QrCodeService; +import com.iformall.service.helper.WxPayOrderServiceHelper; +import com.iformall.service.pay.service.pay.PayAdapterService; +import com.iformall.service.pay.service.pay.entity.PayAdapterResult; +import com.iformall.service.pay.service.pay.entity.PayQueryAdapterResult; +import com.iformall.service.pay.service.pay.wx.BaseWxPayAdapterService; +import com.iformall.utils.BeanUtils; +import com.iformall.utils.MaUtil; +import com.iformall.utils.QRCodeUtils; +import com.iformall.utils.Utility; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.WxMaCodeLineColor; +import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.open.api.WxOpenService; + +@Slf4j +public class BaseWxPayV3AdapterService extends BaseWxPayAdapterService{ + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/miniApp/maPay/WxMiniMaPayV3AdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/miniApp/maPay/WxMiniMaPayV3AdapterService.java deleted file mode 100644 index b174af682..000000000 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/miniApp/maPay/WxMiniMaPayV3AdapterService.java +++ /dev/null @@ -1,275 +0,0 @@ -package com.iformall.service.pay.service.pay.wx.v3.miniApp.maPay; - -import java.io.File; -import java.util.Date; -import java.util.List; -import java.util.Map; - -import com.iformall.domain.po.*; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import com.iformall.common.ErrorCode; -import com.iformall.common.IdWorker; -import com.iformall.domain.po.base.TenantEntity; -import com.iformall.enums.EnumPayMode; -import com.iformall.enums.EnumPayShare; -import com.iformall.enums.EnumUserIsSubscribe; -import com.iformall.exception.MallinkException; -import com.iformall.mapper.WxCUserBasicInfoMapper; -import com.iformall.mapper.WxCUserMapper; -import com.iformall.mapper.WxMallMapper; -import com.iformall.pay.WxMicroPayOrderP; -import com.iformall.pay.WxMicroPayOrderSP; -import com.iformall.pay.WxPay; -import com.iformall.pay.WxPayment; -import com.iformall.service.WxCUserService; -import com.iformall.service.order.entity.WxComposeOrder; -import com.iformall.service.pay.entity.PayExtraParam; -import com.iformall.service.pay.service.pay.CPassivePayService; -import com.iformall.service.pay.service.pay.entity.CreateUser; -import com.iformall.service.pay.service.pay.entity.PayAdapterResult; -import com.iformall.service.pay.service.pay.entity.PayQueryAdapterResult; -import com.iformall.service.pay.service.pay.wx.v2.BaseWxPayAdapterService; -import com.iformall.utils.BeanUtils; -import com.iformall.utils.Utility; -import lombok.extern.slf4j.Slf4j; -import me.chanjar.weixin.common.error.WxErrorException; - - -@Slf4j -@Service -public class WxMiniMaPayV3AdapterService implements CPassivePayService{ - - private WxMicroPayOrderP generateWxMicroPayOrderP(WxPayAccount payAccount, WxComposeOrder composeOrder, String productName,WxPayOrder record, EnumPayShare isShare, - WxAppinfo appInfo, Date currentDate,String bAppId,String bUserPhone) throws Exception { - String noncestr = Utility.generate32UUID(); - WxMicroPayOrderP wxPayOrderP = new WxMicroPayOrderP(); - wxPayOrderP.setAppid(bAppId); - wxPayOrderP.setMch_id(payAccount.getMchId()); - wxPayOrderP.setDevice_info(bUserPhone); - wxPayOrderP.setNonce_str(noncestr); - wxPayOrderP.setBody(productName); - wxPayOrderP.setOut_trade_no(record.getPayOrderNo()); - wxPayOrderP.setTotal_fee(record.getPayAmount()); - wxPayOrderP.setSpbill_create_ip(record.getIp()); // 终端IP - wxPayOrderP.setAuth_code(record.getAuthCode()); - 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; - } - - private PayAdapterResult getWxMicroPayOrderPResult(Map returnMap,WxPayOrder record,WxPayAccount payAccount) { - String return_code = returnMap.get("return_code"); - String result_code = returnMap.get("result_code"); - PayAdapterResult pr = null; - if ("SUCCESS".equalsIgnoreCase(return_code)) { - if ("SUCCESS".equals(result_code)) { - String openId = returnMap.get("openid"); - String isSubscribe = returnMap.get("is_subscribe"); - String transactionId = returnMap.get("transaction_id"); - record.setTransactionId(transactionId); - record.setUpdateTime(new Date()); - pr = new PayAdapterResult(true, "success", returnMap,transactionId); - } else { - String err_code = returnMap.get("err_code"); - String errMsg = returnMap.get("err_code_des"); - if (errMsg.length() <= 0) { - errMsg = returnMap.get("return_msg"); - } - record.setFailReason(errMsg); - record.setUpdateTime(new Date()); - pr = new PayAdapterResult(false, errMsg, returnMap,null); - } - } else { - String errMsg = returnMap.get("return_msg"); - record.setFailReason(errMsg); - record.setUpdateTime(new Date()); - pr = new PayAdapterResult(false, errMsg, returnMap,null); - } - return pr; - } - - - private WxMicroPayOrderSP generateWxMicroPayOrderSP(WxPayAccount payAccount, WxComposeOrder composeOrder, String productName,WxPayOrder record, EnumPayShare isShare, - WxAppinfo appInfo, Date currentDate,String bUserPhone) throws Exception { - String noncestr = Utility.generate32UUID(); - WxMicroPayOrderSP wxPayOrderSP = new WxMicroPayOrderSP(); - wxPayOrderSP.setAppid(appInfo.getParentAppId()); - wxPayOrderSP.setMch_id(payAccount.getMchId()); - wxPayOrderSP.setSub_appid(appInfo.getAppId()); - wxPayOrderSP.setSub_mch_id(payAccount.getSubMchId()); - wxPayOrderSP.setDevice_info(bUserPhone); - wxPayOrderSP.setNonce_str(noncestr); - wxPayOrderSP.setBody(productName); - wxPayOrderSP.setOut_trade_no(record.getPayOrderNo()); - wxPayOrderSP.setTotal_fee(record.getPayAmount()); - wxPayOrderSP.setSpbill_create_ip(record.getIp()); - wxPayOrderSP.setAuth_code(record.getAuthCode()); - 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(null); - if (isShare == EnumPayShare.YES) { - wxPayOrderSP.setProfit_sharing("Y"); - } - Map payOrderMap = BeanUtils.toStringMap(wxPayOrderSP); - wxPayOrderSP.setSign(WxPayment.createSignHMAC(payOrderMap, payAccount.getApiKey())); - return wxPayOrderSP; - } - - private PayAdapterResult getWxMicroPayOrderSPResutl(Map returnMap,WxPayOrder record,WxPayAccount payAccount) { - PayAdapterResult pr = null; - String return_code = returnMap.get("return_code"); - String result_code = returnMap.get("result_code"); - if ("SUCCESS".equalsIgnoreCase(return_code)) { - if ("SUCCESS".equals(result_code)) { - String openId = returnMap.get("sub_openid"); - String isSubscribe = returnMap.get("sub_is_subscribe"); - String transactionId = returnMap.get("transaction_id"); - record.setTransactionId(transactionId); - record.setUpdateTime(new Date()); - pr = new PayAdapterResult(true, "success", returnMap,transactionId); - } else { - String err_code = returnMap.get("err_code"); - String errMsg = returnMap.get("err_code_des"); - if (errMsg.length() <= 0) { - errMsg = returnMap.get("return_msg"); - } - record.setFailReason(errMsg); - record.setUpdateTime(new Date()); - pr = new PayAdapterResult(false, errMsg, returnMap,null); - } - } else { - String errMsg = returnMap.get("return_msg"); - record.setFailReason(errMsg); - record.setUpdateTime(new Date()); - pr = new PayAdapterResult(false, errMsg, returnMap,null); - } - return pr; - } - - - @Override - public PayAdapterResult pay(WxPayAccount payAccount,WxPayOrder record, WxComposeOrder composeOrder,List childOrders, - String productName, EnumPayShare isShare,WxAppinfo appInfo, Date currentDate, PayExtraParam params) throws Exception { - if (payAccount.getType() == EnumPayMode.MCH.getCode()) { - // 扫码支付 普通商户模式 - String bAppId = (String) params.getValue("bAppId"); - if (StringUtils.isBlank(bAppId)) { - throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"bAppId 不能为空"); - } - String bUserPhone = (String) params.getValue("bUserPhone"); - if (StringUtils.isBlank(bUserPhone)) { - throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"bUserPhone 不能为空"); - } - - WxMicroPayOrderP wxPayOrderP = generateWxMicroPayOrderP(payAccount, composeOrder,productName,record, isShare, appInfo, currentDate, bAppId, bUserPhone); - String response = WxPay.micropay(BeanUtils.toStringMap(wxPayOrderP)); - log.info("pay order, wechat micropay, " + wxPayOrderP.toString() + ", response: " + response.toString()); - Map returnMap = WxPayment.xmlToMap(response); - returnMap.put("payOrderId", record.getPayOrderNo()); - returnMap.put("orderId", String.valueOf(composeOrder.getMainOrderId())); - return getWxMicroPayOrderPResult(returnMap, record, payAccount); - } else { - // 统一下单 // 服务商模式 - String bUserPhone = (String) params.getValue("bUserPhone"); - if (StringUtils.isBlank(bUserPhone)) { - throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"bUserPhone 不能为空"); - } - WxMicroPayOrderSP wxPayOrderSP = generateWxMicroPayOrderSP(payAccount, composeOrder,productName,record, isShare, appInfo, currentDate, bUserPhone); - String response = WxPay.micropay(BeanUtils.toStringMap(wxPayOrderSP)); - log.info("pay order, wechat micropay, " + wxPayOrderSP.toString() + ", response: " + response.toString()); - Map returnMap = WxPayment.xmlToMap(response); - returnMap.put("payOrderId", record.getPayOrderNo()); - returnMap.put("orderId", String.valueOf(composeOrder.getMainOrderId())); - return getWxMicroPayOrderSPResutl(returnMap, record, payAccount); - } - } - - - @Autowired - WxCUserMapper wxCUserMapper; - @Autowired - WxCUserService wxCUserService; - @Autowired - WxCUserBasicInfoMapper wxCUserBasicInfoMapper; - @Autowired - WxMallMapper wxMallMapper; - - @Override - public CreateUser getCUserAfterPay(Object result,WxAppinfo appInfo) throws Exception { - // add c_user, 收银台支付和券支付可能不是同一个人 - WxCUser userQ = new WxCUser(); - Map returnMap = (Map) result; - String openId = returnMap.get("sub_openid"); - //String isSubscribe = returnMap.get("sub_is_subscribe"); - userQ.setOpenId(openId); - userQ.setAppId(appInfo.getAppId()); - userQ.updateTenantInfo(appInfo); - WxCUser user1 = wxCUserMapper.findByOpenId(userQ); - if (user1 == null) { - return null; - }else { - return new CreateUser(user1.getId(),user1.getUserId()); - } - } - - @Override - public PayQueryAdapterResult queryPayStatus(WxPayOrder oldRecord, WxAppinfo appInfo, - WxPayAccount payAccount) throws Exception { - //return super.queryPayStatus(oldRecord,appInfo, payAccount); - return null; - } - - @Override - public int queryPayStatus(PayQueryAdapterResult statusObject, String orderOutNo) throws Exception { - //return super.queryPayStatus(statusObject, orderOutNo); - return 0; - } - - @Override - public int queryPayStatusCode(WxPayOrder oldRecord, WxAppinfo appInfo, WxPayAccount payAccount) - throws Exception { - //return super.queryPayStatusCode(oldRecord, appInfo, payAccount); - return 0; - } - - @Override - public PayAdapterResult payOrderClose(WxAppinfo appInfo, WxPayOrder record,WxPayAccount payAccount) throws Exception { - //return super.closeOrder(appInfo, record, payAccount); - return null; - } - - @Override - public PayAdapterResult payOrderReverse(WxAppinfo appInfo, WxPayOrder record, WxPayAccount payAccount) - throws Exception { - //return super.payOrderReverse(appInfo, record, payAccount); - return null; - } - - @Override - public PayAdapterResult payOrderPush(String openId,WxAppinfo appInfo, WxBatchOrder batchOrder,WxPayOrder payOrder) throws Exception { - return null; - } - - @Override - public File getQrcode(WxAppinfo appinfo,String pageUrl,int type,String sceneParam) throws Exception { - //return super.getQrCode(appinfo, pageUrl, type, sceneParam); - return null; - } - - @Override - public PayAdapterResult noCreatePay(WxPayOrder record, WxComposeOrder composeOrder, List childOrders) { - throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR); - } - - -}