From 53d2cf9a671916ec7bcd1c0d1283c7261d81e454 Mon Sep 17 00:00:00 2001 From: lin <642018748@qq.com> Date: Sun, 14 Aug 2022 17:39:12 +0800 Subject: [PATCH] fix pay v3 --- .../main/java/com/iformall/pay/WxPayV3.java | 87 +--- .../java/com/iformall/pay/WxPayV3SFT.java | 100 ++++ .../service/pay/PayServiceFactory.java | 39 +- .../appPay/WxMiniAppPaySFTAdapterService.java | 7 +- .../share/wx/sft/WxPayShareSFTService.java | 182 +++++++ .../share/wx/v3/WxPayShareV3Service.java | 447 +----------------- 6 files changed, 333 insertions(+), 529 deletions(-) create mode 100644 mallinkService/src/main/java/com/iformall/pay/WxPayV3SFT.java create mode 100644 mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/sft/WxPayShareSFTService.java diff --git a/mallinkService/src/main/java/com/iformall/pay/WxPayV3.java b/mallinkService/src/main/java/com/iformall/pay/WxPayV3.java index f1a060b27..ea22bc9c8 100644 --- a/mallinkService/src/main/java/com/iformall/pay/WxPayV3.java +++ b/mallinkService/src/main/java/com/iformall/pay/WxPayV3.java @@ -1,20 +1,19 @@ package com.iformall.pay; +import java.io.IOException; +import java.security.GeneralSecurityException; import java.security.cert.X509Certificate; import java.util.HashMap; import java.util.List; import java.util.Map; + import javax.crypto.IllegalBlockSizeException; import com.alibaba.fastjson.JSON; 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.AesUtils; import com.github.binarywang.wxpay.v3.util.RsaCryptoUtil; -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; @@ -25,21 +24,22 @@ public class WxPayV3 { private static final String MERCHANT_TRANSFER_CHANGE_URL = "https://api.mch.weixin.qq.com/v3/transfer/batches"; //查询商家转账到零钱 private static final String MERCHANT_TRANSFER_QUERY_URL = "https://api.mch.weixin.qq.com/v3/transfer/batches/out-batch-no/%s"; - //电商收付通-普通支付-小程序下单 - private static final String PAY_COMMON_MINIAPP_URL = "https://api.mch.weixin.qq.com/v3/pay/partner/transactions/jsapi"; - //电商收付通-普通支付-查询 - private static final String PAY_COMMON_QUERY_URL = "https://api.mch.weixin.qq.com/v3/pay/partner/transactions/out-trade-no/%s"; - //电商收付通-合单支付-小程序下单 - private static final String PAY_COMBINE_MINIAPP_URL = "https://api.mch.weixin.qq.com/v3/combine-transactions/jsapi"; - //电商收付通-合单支付-查询 - private static final String PAY_COMBINE_QUERY_URL = "https://api.mch.weixin.qq.com/v3/combine-transactions/out-trade-no/%s"; - //电商收付通-普通支付-关闭订单 - private static final String PAY_COMMON_CLOSE_ORDER_URL = "https://api.mch.weixin.qq.com/v3/pay/partner/transactions/out-trade-no/%s/close"; - //电商收付通-合单支付-关闭订单 - private static final String PAY_COMBINE_CLOSE_ORDER_URL = "https://api.mch.weixin.qq.com/v3/combine-transactions/out-trade-no/%s/close"; + private WxPayV3() { } + //敏感信息加密 + public static String entry(WxPayService payService,String content) throws IllegalBlockSizeException { + X509Certificate certificate = payService.getConfig().getVerifier().getValidCertificate(); + return RsaCryptoUtil.encryptOAEP(content, certificate); + } + + //解密平台加密信息 + public static String decrypt(WxPayService payService,String entryText,String nonce,String associatedData) throws GeneralSecurityException, IOException { + String apiV3Key = payService.getConfig().getApiV3Key(); + return JSON.toJSONString(AesUtils.decryptToString(associatedData, nonce, entryText, apiV3Key)); + } + /** * 商家转账到零钱 https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter4_3_1.shtml * 注意:1. 需要登录到特约商户号自己的商户后台,产品中心---APPID账号管理----我关联的appId账号,把C端小程序关联 @@ -56,12 +56,11 @@ public class WxPayV3 { * @throws IllegalBlockSizeException */ public static String merchantTranferChange(WxPayService payService,WxCashOutPV3 cashOutV3) throws WxPayException, IllegalBlockSizeException { - X509Certificate certificate = payService.getConfig().getVerifier().getValidCertificate(); List items = cashOutV3.getTransfer_detail_list(); for (WxCashOutPV3Item it : items) { if (!StringUtils.isBlank(it.getUser_name())) { //敏感信息加密 - it.setUser_name(RsaCryptoUtil.encryptOAEP(it.getUser_name(), certificate)); + it.setUser_name(entry(payService,it.getUser_name())); } } return payService.postV3WithWechatpaySerial(MERCHANT_TRANSFER_CHANGE_URL, JSON.toJSONString(cashOutV3)); @@ -85,54 +84,4 @@ public class WxPayV3 { return payService.postV3WithWechatpaySerial(String.format(MERCHANT_TRANSFER_QUERY_URL, batchNo), JSON.toJSONString(param)); } - /** - * 电商收付通-普通支付-小程序下单 https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_2_3.shtml - * @throws WxPayException - */ - public static String payCommonWithMiniApp(WxPayService payService,SFTPayCommonMiniAppReq payReq) throws WxPayException { - return payService.postV3WithWechatpaySerial(PAY_COMMON_MINIAPP_URL, JSON.toJSONString(payReq)); - } - - /** - * 电商收付通-普通支付-查询 https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_2_5.shtml - * @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)); - } - - /** - * 电商收付通-合单支付-小程序下单https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_3_4.shtml - * @throws WxPayException - */ - public static String payCombineCommonWithMiniApp(WxPayService payService,SFTCombinePayCommonMiniAppReq payReq) throws WxPayException { - return payService.postV3WithWechatpaySerial(PAY_COMBINE_MINIAPP_URL, JSON.toJSONString(payReq)); - } - - /** - * 电商收付通-合单支付-查询 https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_3_11.shtml - * @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); - - } - - /** - * 电商收付通-普通支付-关闭 https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_3_11.shtml - * @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)); - - } - - /** - * 电商收付通-合单支付-关闭 https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_3_12.shtml - * @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/pay/WxPayV3SFT.java b/mallinkService/src/main/java/com/iformall/pay/WxPayV3SFT.java new file mode 100644 index 000000000..410c95a67 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/pay/WxPayV3SFT.java @@ -0,0 +1,100 @@ +package com.iformall.pay; + +import java.security.cert.X509Certificate; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import javax.crypto.IllegalBlockSizeException; +import com.alibaba.fastjson.JSON; +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.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; + +public class WxPayV3SFT { + protected static Logger log = LoggerFactory.getLogger(WxPayV3SFT.class); + + //电商收付通-普通支付-小程序下单 + private static final String PAY_COMMON_MINIAPP_URL = "https://api.mch.weixin.qq.com/v3/pay/partner/transactions/jsapi"; + //电商收付通-普通支付-查询 + private static final String PAY_COMMON_QUERY_URL = "https://api.mch.weixin.qq.com/v3/pay/partner/transactions/out-trade-no/%s"; + //电商收付通-合单支付-小程序下单 + private static final String PAY_COMBINE_MINIAPP_URL = "https://api.mch.weixin.qq.com/v3/combine-transactions/jsapi"; + //电商收付通-合单支付-查询 + private static final String PAY_COMBINE_QUERY_URL = "https://api.mch.weixin.qq.com/v3/combine-transactions/out-trade-no/%s"; + //电商收付通-普通支付-关闭订单 + private static final String PAY_COMMON_CLOSE_ORDER_URL = "https://api.mch.weixin.qq.com/v3/pay/partner/transactions/out-trade-no/%s/close"; + //电商收付通-合单支付-关闭订单 + private static final String PAY_COMBINE_CLOSE_ORDER_URL = "https://api.mch.weixin.qq.com/v3/combine-transactions/out-trade-no/%s/close"; + //电商收付通-分账 + private static final String SHARE_URL = "https://api.mch.weixin.qq.com/v3/ecommerce/profitsharing/orders"; + + private WxPayV3SFT() { + } + + /** + * 电商收付通-普通支付-小程序下单 https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_2_3.shtml + * @throws WxPayException + */ + public static String payCommonWithMiniApp(WxPayService payService,SFTPayCommonMiniAppReq payReq) throws WxPayException { + return payService.postV3WithWechatpaySerial(PAY_COMMON_MINIAPP_URL, JSON.toJSONString(payReq)); + } + + /** + * 电商收付通-普通支付-查询 https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_2_5.shtml + * @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)); + } + + /** + * 电商收付通-合单支付-小程序下单https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_3_4.shtml + * @throws WxPayException + */ + public static String payCombineCommonWithMiniApp(WxPayService payService,SFTCombinePayCommonMiniAppReq payReq) throws WxPayException { + return payService.postV3WithWechatpaySerial(PAY_COMBINE_MINIAPP_URL, JSON.toJSONString(payReq)); + } + + /** + * 电商收付通-合单支付-查询 https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_3_11.shtml + * @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); + + } + + /** + * 电商收付通-普通支付-关闭 https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_3_11.shtml + * @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)); + + } + + /** + * 电商收付通-合单支付-关闭 https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_3_12.shtml + * @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)); + } + + /** + * 电商收付通-分账 + */ + public static String share(WxPayService payService) { + //return payService.postV3WithWechatpaySerial(SHARE_URL, JSON.toJSONString(closeOrder)); + return 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 d71126560..8d8f2a81a 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/PayServiceFactory.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/PayServiceFactory.java @@ -8,6 +8,7 @@ import com.iformall.service.pay.service.refund.douyin.TtRefundAdapterService; import com.iformall.service.pay.service.refund.wx.v2.WxRefundAdapterService; import com.iformall.service.pay.service.refund.wx.v3.WxRefundV3AdapterService; import com.iformall.service.pay.service.share.douyin.TtPayShareService; +import com.iformall.service.pay.service.share.wx.sft.WxPayShareSFTService; import com.iformall.service.pay.service.share.wx.v2.WxPayShareService; import com.iformall.service.pay.service.share.wx.v3.WxPayShareV3Service; import org.springframework.beans.factory.annotation.Autowired; @@ -46,7 +47,7 @@ public class PayServiceFactory { @Autowired WxMiniAppPayAdapterService wxMiniAppPayService; @Autowired - WxMiniAppPaySFTAdapterService wxMiniAppPayV3AdapterService; + WxMiniAppPaySFTAdapterService wxMiniAppPaySFTAdapterService; @Autowired WxMiniMaPayAdapterService wxMiniAppMaPayService; @@ -54,7 +55,7 @@ public class PayServiceFactory { @Autowired WxH5PayService wxH5PayService; @Autowired - WxH5PaySFTService wxH5PayV3Service; + WxH5PaySFTService wxH5PaySFTService; @Autowired TtMiniAppPayAdapterService ttMiniAppPayService; @@ -62,7 +63,7 @@ public class PayServiceFactory { @Autowired WxPayShareService wxShareService; @Autowired - WxPayShareV3Service wxPayShareV3Service; + WxPayShareSFTService wxPayShareSFTService; @Autowired TtPayShareService ttShareService; @@ -86,11 +87,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_SFT.getCode(), wxMiniAppPayV3AdapterService); + serviceMap.put(EnumPayWay.PAY_WAY_WECHAT.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxMiniAppPaySFTAdapterService); 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_SFT.getCode(), wxMiniAppMaPayService); + //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_SFT.getCode(), wxH5PayV3Service); + serviceMap.put(EnumPayWay.PAY_WAY_WECHAT_WAP.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxH5PaySFTService); serviceMap.put(EnumPayWay.PAY_WAY_TT.getCode()+"_"+EnumPayVersion.DY_PAY_V2.getCode(),ttMiniAppPayService); } return serviceMap; @@ -125,19 +126,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_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); + shareMap.put(EnumPayWay.PAY_WAY_WECHAT.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxPayShareSFTService); + shareMap.put(EnumPayWay.PAY_WAY_WECHAT_MA.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxPayShareSFTService); + shareMap.put(EnumPayWay.PAY_WAY_POS_NEU.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxPayShareSFTService); + shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_MERCHANT.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxPayShareSFTService); + shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_VERRIFY.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxPayShareSFTService); + shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_B_MA.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxPayShareSFTService); + shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_CAR_STOP.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxPayShareSFTService); + shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_SYSTEM_SEND.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxPayShareSFTService); + shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_BATCH_SEND.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxPayShareSFTService); + shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_TRADE.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxPayShareSFTService); + shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_PASSWD.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxPayShareSFTService); + shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_CREDIT.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxPayShareSFTService); + shareMap.put(EnumPayWay.PAY_WAY_NOT_UNPAY_GIFTLIST.getCode()+"_"+EnumPayVersion.WX_PAY_V3_SFT.getCode(), wxPayShareSFTService); } return shareMap; } diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/miniApp/appPay/WxMiniAppPaySFTAdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/miniApp/appPay/WxMiniAppPaySFTAdapterService.java index df4ebcd50..dcd730f13 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/miniApp/appPay/WxMiniAppPaySFTAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/sft/miniApp/appPay/WxMiniAppPaySFTAdapterService.java @@ -29,6 +29,7 @@ import com.iformall.pay.WxPay; import com.iformall.pay.WxPayOrderP; import com.iformall.pay.WxPayOrderSP; import com.iformall.pay.WxPayV3; +import com.iformall.pay.WxPayV3SFT; import com.iformall.pay.WxPayment; import com.iformall.service.helper.WxPayOrderServiceHelper; import com.iformall.service.order.entity.WxComposeChildOrderShare; @@ -171,7 +172,7 @@ public class WxMiniAppPaySFTAdapterService extends BaseWxPaySFTAdapterService i */ if (childOrders.size() == 1) { SFTPayCommonMiniAppReq payReq = generatePayCommonRequest(payAccount,composeOrder,productName,record,openId,appInfo,currentDate); - String response = WxPayV3.payCommonWithMiniApp(payService, payReq); + String response = WxPayV3SFT.payCommonWithMiniApp(payService, payReq); log.info("pay order v3, " + payReq.toString() + ", response: " + response.toString()); return getOrderPResult(response); } else { @@ -228,7 +229,7 @@ public class WxMiniAppPaySFTAdapterService extends BaseWxPaySFTAdapterService i req.setSp_mchid(payAccount.getMchId()); req.setSub_mchid(oldRecord.getSingleChildOrderShare().getMerchantUid()); req.setOut_trade_no(String.valueOf(oldRecord.getId())); - String response = WxPayV3.payCommonQuery(payService, req); + String response = WxPayV3SFT.payCommonQuery(payService, req); if (StringUtils.isBlank(response)){ log.error("pay common v3 query response is null."+JSON.toJSONString(req)); throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"pay common v3 query response is null."+JSON.toJSONString(req)); @@ -265,7 +266,7 @@ public class WxMiniAppPaySFTAdapterService extends BaseWxPaySFTAdapterService i req.setSp_mchid(payAccount.getMchId()); req.setSub_mchid(record.getSingleChildOrderShare().getMerchantUid()); req.setOut_trade_no(String.valueOf(record.getId())); - WxPayV3.payCommonClose(payService, req); + WxPayV3SFT.payCommonClose(payService, req); return new PayAdapterResult(true, "close success", req, null); }else { throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"因电商收付通合单查询无法处理,暂时不支持合单支付关闭"); diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/sft/WxPayShareSFTService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/sft/WxPayShareSFTService.java new file mode 100644 index 000000000..ad7b53e27 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/sft/WxPayShareSFTService.java @@ -0,0 +1,182 @@ +package com.iformall.service.pay.service.share.wx.sft; + +import java.text.ParseException; +import java.util.*; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.iformall.common.IdWorker; +import com.iformall.domain.dto.WxSharingOrderDto; +import com.iformall.domain.po.*; +import com.iformall.domain.po.base.TenantEntity; +import com.iformall.douyin.pay.enums.MerchantImportStatus; +import com.iformall.enums.*; +import com.iformall.mapper.*; + +import net.sf.saxon.trans.Err; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.iformall.common.ErrorCode; +import com.iformall.common.ResultData; +import com.iformall.exception.MallinkException; +import com.iformall.pay.WxPayment; +import com.iformall.pay.WxProfitSharing; +import com.iformall.pay.WxProfitSharingFinishP; +import com.iformall.pay.WxProfitSharingP; +import com.iformall.pay.WxProfitSharingQueryP; +import com.iformall.pay.WxProfitSharingReceiverP; +import com.iformall.service.WxProfitSharingReceiverService; +import com.iformall.service.order.util.OrderHelper; +import com.iformall.service.pay.service.pay.douyin.v1.miniApp.EnumTtPayChannel; +import com.iformall.service.pay.service.share.PayShareAdapterService; +import com.iformall.service.pay.service.share.PayShareBaseAdapterService; +import com.iformall.service.pay.service.share.entity.ShareAccountResult; +import com.iformall.service.pay.service.share.entity.PayShareCalculateAmount; +import com.iformall.service.pay.service.share.entity.PayShareQueryResult; +import com.iformall.service.pay.service.share.entity.PayShareResult; +import com.iformall.service.pay.service.share.entity.ShareNotifyAdapterResult; +import com.iformall.utils.BeanUtils; +import com.iformall.utils.Utility; +import com.iformall.utils.XmlUtil; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Service +public class WxPayShareSFTService extends PayShareBaseAdapterService{ + + @Autowired + WxProfitSharingOrderMapper wxProfitSharingOrderMapper; + + @Lazy + @Autowired + WxProfitSharingReceiverService wxProfitSharingReceiverService; + + final JSONObject statusMap = JSON.parseObject( + "{\"ACCEPTED\":3," + + "\"PROCESSING\": 4," + + "\"FINISHED\": 5," + + "\"CLOSED\": 6}"); + + + + + @Override + public Integer getSubsidyType() { + return EnumMerchantSubsidyType.WECHAT.getCode(); + } + + @Override + public Integer getProfitSharingType() { + return EnumProfitSharingType.PROFIT_SHARING_TYPE_WECHAT.getCode(); + } + + @Override + public Integer getSharingOrderInitialStatus() { + return EnumProfitSharingOrderStatus.PROFIT_SHARING_READY.getCode(); + } + + @Override + public PayShareCalculateAmount calculateAmount(Integer payAmount,Integer officialCommissionRate, WxPayAccount payAccount) { + int mallCharge = OrderHelper.getMallCharge(payAmount, payAccount); + Integer realRateAmount = OrderHelper.getRealRateAmount(payAmount, payAccount); + return new PayShareCalculateAmount(payAmount,mallCharge,realRateAmount,0); + } + + @Override + public PayShareResult noReciverShare(WxAppinfo appInfo,WxPayAccount payAccount,WxProfitSharingOrder record,String transcationId,Integer amount) { + + return null; + } + + @Override + public PayShareResult haveReciversShare(WxAppinfo appInfo,WxPayAccount payAccount,WxProfitSharingOrder record,String transcationId,JSONArray receivers,EnumProfitSharingOrderType shareType ) throws MallinkException { + return null; + + } + + @Override + public PayShareQueryResult shareQuery(WxAppinfo appInfo, WxPayAccount payAccount, WxProfitSharingOrder record) throws MallinkException { + return null; + } + + + @Autowired + WxAppinfoMapper wxAppinfoMapper; + @Autowired + WxPayAccountMapper wxPayAccountMapper; + @Autowired + WxPayOrderMapper wxPayOrderMapper; + + private ShareNotifyAdapterResult getErrorResult(String msg) { + SortedMap resultMap = new TreeMap(); + resultMap.put("return_code", "FAIL"); + resultMap.put("return_msg", msg); + return new ShareNotifyAdapterResult(false,ErrorCode.PAY_ORDER_NOTIFY_CHECK_SIGN_ERROR.getCode(),msg,XmlUtil.getRequestXml(resultMap)); + } + + private ShareNotifyAdapterResult getSuccessResult(WxPayOrder payOrder, String transcationId){ + SortedMap resultMap = new TreeMap(); + resultMap.put("return_code", "SUCCESS"); + resultMap.put("return_msg", "OK"); + return new ShareNotifyAdapterResult(transcationId, payOrder, XmlUtil.getRequestXml(resultMap)); + } + + @Override + public ShareNotifyAdapterResult notify(Map paramMap,EnumPayWay payWay) { + + + return getErrorResult("FAILED"); + } + + @Override + public ShareAccountResult createShareAccount(WxAppinfo appInfo,WxPayAccount payAccount,WxProfitSharingReceiver receiver) { + return null; + + } + + @Autowired + WxProfitSharingReceiverMapper wxProfitSharingReceiverMapper; + + @Override + public ShareAccountResult deleteShareAccount(WxAppinfo appInfo, WxPayAccount payAccount, + WxProfitSharingReceiver receiver) { + return null; + + } + + @Override + public int getOfficialCommission(WxOrder o, WxPayAccount payAccount) { + return 0; + } + + @Override + public ResultData handerSharingOrder(WxPayOrder payOrder, WxProfitSharingOrder sharingOrder) { + return new ResultData(ErrorCode.SYS_PARAMETER_TYPE_ERROR.getCode(),"微信分账无需处理"); + } + + @Override + public WxProfitSharingOrder createSharingOrder(WxSharingOrderDto sharingOrderDto, Integer mchType,Integer share) { + if(EnumPayMchType.DIRECT.getCode().equals(mchType)){ + throw new MallinkException(ErrorCode.SYS_PARAMETER_TYPE_ERROR.getCode(),"微信直连模式待开发"); + } + if(EnumYesOrNo.NO.getCode().equals(share)){ + throw new MallinkException(ErrorCode.SYS_PARAMETER_TYPE_ERROR.getCode(),"微信不分账"); + } + + + return null; + } + + @Override + public List getReceiverList(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay) { + return null; + } + + +} diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v3/WxPayShareV3Service.java b/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v3/WxPayShareV3Service.java index 6174bcac8..3d62f19bd 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v3/WxPayShareV3Service.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/share/wx/v3/WxPayShareV3Service.java @@ -91,133 +91,18 @@ public class WxPayShareV3Service extends PayShareBaseAdapterService{ @Override public PayShareResult noReciverShare(WxAppinfo appInfo,WxPayAccount payAccount,WxProfitSharingOrder record,String transcationId,Integer amount) { - WxProfitSharingFinishP psFCmd = new WxProfitSharingFinishP(); - psFCmd.setMch_id(payAccount.getMchId()); - psFCmd.setSub_mch_id(payAccount.getSubMchId()); - psFCmd.setAppid(appInfo.getParentAppId()); - psFCmd.setNonce_str(Utility.generate32UUID()); - psFCmd.setTransaction_id(transcationId); - psFCmd.setOut_order_no(record.getId().toString()); - //psFCmd.setAmount(amount); - psFCmd.setDescription("分账已完结"); - psFCmd.setSign_type("HMAC-SHA256"); - - String response; - try { - psFCmd.setSign(WxPayment.createSignHMAC(BeanUtils.toStringMap(psFCmd), payAccount.getApiKey())); - log.info("request:" + psFCmd.toString()); - response = WxProfitSharing.finishOrder(BeanUtils.toStringMap(psFCmd), payAccount.getCertPath(), payAccount.getMchId()); - } catch (Exception e) { - log.error("wx noreciver share error:",e); - return new PayShareResult(false, EnumProfitSharingOrderStatus.PROFIT_SHARING_REQ_FAILED.getCode(),ErrorCode.PROFIT_SHARING_REQUEST_FAILED.getMessage()+":"+e.getMessage(), null,null); - } - - log.info("response: " + response); - Map returnMap = WxPayment.xmlToMap(response); - String return_code = returnMap.get("return_code"); - - if (!"SUCCESS".equals(return_code)) { - return new PayShareResult(false, EnumProfitSharingOrderStatus.PROFIT_SHARING_REQ_FAILED.getCode(),returnMap.get("return_msg"), null,null); - } - if (!WxPayment.verifyNotifyHMAC(returnMap,payAccount.getApiKey())){ - return new PayShareResult(false, EnumProfitSharingOrderStatus.PROFIT_SHARING_REQ_FAILED.getCode(),ErrorCode.PROFIT_SHARING_RETURN_INVALID.getMessage(), null,null); - } - String result_code = returnMap.get("result_code"); - if (!"SUCCESS".equals(result_code)) { - return new PayShareResult(false, EnumProfitSharingOrderStatus.PROFIT_SHARING_APPLY_FAILED.getCode(),returnMap.get("err_code_des"), null,null); - } - - return new PayShareResult(true, null,"success", returnMap,returnMap.get("order_id")); + return null; } @Override public PayShareResult haveReciversShare(WxAppinfo appInfo,WxPayAccount payAccount,WxProfitSharingOrder record,String transcationId,JSONArray receivers,EnumProfitSharingOrderType shareType ) throws MallinkException { - //分账提交 - WxProfitSharingP psCmd = new WxProfitSharingP(); - psCmd.setMch_id(payAccount.getMchId()); - psCmd.setSub_mch_id(payAccount.getSubMchId()); - psCmd.setAppid(appInfo.getParentAppId()); - psCmd.setSub_appid(appInfo.getAppId()); - psCmd.setNonce_str(Utility.generate32UUID()); - psCmd.setTransaction_id(transcationId); - psCmd.setOut_order_no(record.getId().toString()); - psCmd.setSign_type("HMAC-SHA256"); - psCmd.setReceivers(receivers.toJSONString()); - - String response; - try { - psCmd.setSign(WxPayment.createSignHMAC(BeanUtils.toStringMap(psCmd), payAccount.getApiKey())); - log.info("request:" + psCmd.toString()); - if(shareType.getCode().intValue()==EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE.getCode().intValue()) { - response = WxProfitSharing.pushOrder(BeanUtils.toStringMap(psCmd), payAccount.getCertPath(), payAccount.getMchId()); - } else if(shareType.getCode().intValue()==EnumProfitSharingOrderType.PROFIT_SHARING_MULTI.getCode().intValue()) { - response = WxProfitSharing.pushMultiOrder(BeanUtils.toStringMap(psCmd), payAccount.getCertPath(), payAccount.getMchId()); - } else { - throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR); - } - } catch (Exception e) { - log.error("wx recivers share error:",e); - return new PayShareResult(false, EnumProfitSharingOrderStatus.PROFIT_SHARING_REQ_FAILED.getCode(), ErrorCode.PROFIT_SHARING_REQUEST_FAILED.getMessage()+":"+e.getMessage(), null, null); - } - - log.info("response: " + response); - Map returnMap = WxPayment.xmlToMap(response); - String return_code = returnMap.get("return_code"); - - if (!"SUCCESS".equals(return_code)) { - return new PayShareResult(false, EnumProfitSharingOrderStatus.PROFIT_SHARING_REQ_FAILED.getCode(), returnMap.get("return_msg"), null, null); - } - - if (!WxPayment.verifyNotifyHMAC(returnMap,payAccount.getApiKey())){ - return new PayShareResult(false, EnumProfitSharingOrderStatus.PROFIT_SHARING_REQ_FAILED.getCode(), ErrorCode.PROFIT_SHARING_RETURN_INVALID.getMessage(), null, null); - } - - String result_code = returnMap.get("result_code"); - if (!"SUCCESS".equals(result_code)) { - return new PayShareResult(false, EnumProfitSharingOrderStatus.PROFIT_SHARING_APPLY_FAILED.getCode(), returnMap.get("err_code_des"), null, null); - } + return null; - return new PayShareResult(true, null, "success",returnMap, returnMap.get("order_id")); } @Override public PayShareQueryResult shareQuery(WxAppinfo appInfo, WxPayAccount payAccount, WxProfitSharingOrder record) throws MallinkException { - WxProfitSharingQueryP wxProfitSharingQueryP = new WxProfitSharingQueryP();; - wxProfitSharingQueryP.setMch_id(payAccount.getMchId()); - wxProfitSharingQueryP.setSub_mch_id(payAccount.getSubMchId()); - wxProfitSharingQueryP.setNonce_str(Utility.generate32UUID()); - wxProfitSharingQueryP.setTransaction_id(record.getTransactionId()); - wxProfitSharingQueryP.setOut_order_no(record.getId().toString()); - wxProfitSharingQueryP.setSign_type("HMAC-SHA256"); - String response; - try { - wxProfitSharingQueryP.setSign(WxPayment.createSignHMAC(BeanUtils.toStringMap(wxProfitSharingQueryP),payAccount.getApiKey())); - response = WxProfitSharing.queryOrder(BeanUtils.toStringMap(wxProfitSharingQueryP), payAccount.getCertPath(), payAccount.getMchId()); - }catch (Exception e){ - throw new MallinkException(ErrorCode.PROFIT_SHARING_QUERY_REQUEST_FAILED.getCode(), ErrorCode.PROFIT_SHARING_QUERY_REQUEST_FAILED.getMessage()+e.getMessage()); - } - Map returnMap = WxPayment.xmlToMap(response); - String return_code = returnMap.get("return_code"); - if (!"SUCCESS".equals(return_code)) { - throw new MallinkException(ErrorCode.PROFIT_SHARING_QUERY_REQUEST_FAILED.getCode(), returnMap.get("return_msg")); - } - - if (!WxPayment.verifyNotifyHMAC(returnMap,payAccount.getApiKey())){ - throw new MallinkException(ErrorCode.PROFIT_SHARING_QUERY_RETURN_INVALID); - } - - String result_code = returnMap.get("result_code"); - if (!"SUCCESS".equals(result_code)) { - throw new MallinkException(ErrorCode.PROFIT_SHARING_QUERY_APPLY_FAILED.getCode(), returnMap.get("err_code_des")); - } - - String out_order_no = returnMap.get("out_order_no"); - if (StringUtils.isBlank(out_order_no) || !out_order_no.equals(record.getId().toString())){ - throw new MallinkException(ErrorCode.PROFIT_SHARING_QUERY_RETURN_INVALID.getCode(),"out_order_no:["+out_order_no+"] WxProfitSharingOrder:["+record.getId()+"]"); - } - - Integer code = (Integer) statusMap.get(returnMap.get("status")); - return new PayShareQueryResult(true, code, "success",returnMap, returnMap.get("receivers")); + return null; } @@ -244,145 +129,15 @@ public class WxPayShareV3Service extends PayShareBaseAdapterService{ @Override public ShareNotifyAdapterResult notify(Map paramMap,EnumPayWay payWay) { - // how to get wechatAppId, wechatMchId, partnerKey - String appId = paramMap.get("appid"); - String subAppId = paramMap.get("sub_appid"); - String mchId = paramMap.get("mch_id"); - String subMchId = paramMap.get("sub_mch_id"); - WxAppinfo appinfo = null; - boolean isNormal = true; - if (StringUtils.isBlank(subAppId) && StringUtils.isBlank(subMchId)) { - // 普通商户号 - appinfo = wxAppinfoMapper.findByAppId(appId); - if (appinfo == null) { - log.error("appid not found: " + appId); - throw new MallinkException(ErrorCode.APP_ID_NOT_FOUND); - } - isNormal = true; - } else { - // 服务号 现在用hmac-sha256 - appinfo = wxAppinfoMapper.findByAppId(subAppId); - if (appinfo == null) { - log.error("subappid not found: " + subAppId); - throw new MallinkException(ErrorCode.APP_ID_NOT_FOUND); - } - isNormal = false; - } - - WxPayAccount payAccount = wxPayAccountMapper.selectById(appinfo.getPayId()); - if (payAccount == null) { - throw new MallinkException(ErrorCode.MCH_INFO_NOT_FOUND); - } - String partnerKey = payAccount.getApiKey(); - try { - if (payWay == EnumPayWay.PAY_WAY_WECHAT) { - boolean signVerified = false; - if (isNormal) { - // 普通商户号支付 - signVerified = WxPayment.verifyNotify(paramMap, partnerKey); - if (!signVerified) { - log.warn("notify order, wxpay checksign error, paramMap: " + paramMap.toString() + ", payWay:" + payWay.toString()); - throw new MallinkException(ErrorCode.PAY_ORDER_NOTIFY_CHECK_SIGN_ERROR); - } - } else { - // 服务号 现在用hmac-sha256 - signVerified = WxPayment.verifyNotifyHMAC(paramMap, partnerKey); - if (!signVerified) { - log.warn("notify order, wxpay checksign error, paramMap: " + paramMap.toString() + ", payWay:" + payWay.toString()); - throw new MallinkException(ErrorCode.PAY_ORDER_NOTIFY_CHECK_SIGN_ERROR); - } - } - - if (!"SUCCESS".equals(paramMap.get("return_code"))) { - log.warn("notify order, wxpay status not success, paramMap: " + paramMap.toString() + ", payWay:" + payWay.toString()); - return getErrorResult("订单状态码非SUCCESS"); - } - - String payOrderNo = paramMap.get("out_trade_no"); - String timEndStr = paramMap.get("time_end"); - Long payOrderId = Long.valueOf(payOrderNo); - WxPayOrder payOrder = wxPayOrderMapper.selectById(payOrderId,payAccount.getTenantId()); - if (payOrder == null) { - log.warn("notify order, wxpay check pay order not exists, paramMap: " + paramMap.toString() + ", payWay:" + payWay.toString()); - return getErrorResult("订单不存在"); - } - // 验证支付金额 - if (!paramMap.get("total_fee").equals(payOrder.getPayAmount().toString())) { - log.warn("notify order, wxpay check total_fee is invalid, paramMap: " + paramMap.toString() + ", payWay:" + payWay.toString()); - return getErrorResult("订单总金额不一致"); - } - - Date timeEnd = null; - - try { - timeEnd = Utility.getDateFromString(timEndStr); - } catch (ParseException e) { - log.error("解析timeEnd失败"); - timeEnd = new Date(); - } - payOrder.setPayTimeEnd(timeEnd); - - log.info("notify order, wxpay checksign success, paramMap:{}, paramMap: " + paramMap.toString() + ", payWay:" + payWay.toString()); - return getSuccessResult(payOrder, paramMap.get("transaction_id")); - } - } catch (RuntimeException e) { - log.warn("notify order, checksign error, paramMap: " + paramMap.toString() + ", payWay:" + payWay.toString() + ", e:" + e.getMessage()); - throw new MallinkException(ErrorCode.PAY_ORDER_ERROR); - } + return getErrorResult("FAILED"); } @Override public ShareAccountResult createShareAccount(WxAppinfo appInfo,WxPayAccount payAccount,WxProfitSharingReceiver receiver) { - WxProfitSharingReceiverP wxProfitSharingReceiverP = new WxProfitSharingReceiverP(); - if (StringUtils.isNotBlank(appInfo.getParentAppId())) { - wxProfitSharingReceiverP.setAppid(appInfo.getParentAppId()); - wxProfitSharingReceiverP.setMch_id(payAccount.getMchId()); - wxProfitSharingReceiverP.setSub_appid(appInfo.getAppId()); - wxProfitSharingReceiverP.setSub_mch_id(payAccount.getSubMchId()); - } else { - wxProfitSharingReceiverP.setAppid(appInfo.getAppId()); - wxProfitSharingReceiverP.setMch_id(payAccount.getMchId()); - } - wxProfitSharingReceiverP.setNonce_str(Utility.generate32UUID()); - wxProfitSharingReceiverP.setSign_type("HMAC-SHA256"); - - - JSONObject receiverJSON = new JSONObject(); - receiverJSON.put("type", EnumProfitSharingReceiverType.getEnum(receiver.getReceiverType()).getMessage()); - receiverJSON.put("account", receiver.getReceiverAccount()); - receiverJSON.put("name", receiver.getTrueName()); - - wxProfitSharingReceiverP.setReceiver(receiverJSON.toJSONString()); - String response; - try { - wxProfitSharingReceiverP.setSign(WxPayment.createSignHMAC(BeanUtils.toStringMap(wxProfitSharingReceiverP), payAccount.getApiKey())); - response = WxProfitSharing.addReceiver(BeanUtils.toStringMap(wxProfitSharingReceiverP)); - log.info(response); - } catch (Exception e) { - log.error(ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getMessage() + e.getMessage()); - return new ShareAccountResult(false, ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getCode(), e.getMessage(), null); - } - Map returnMap = WxPayment.xmlToMap(response); - String return_code = returnMap.get("return_code"); - if (!"SUCCESS".equals(return_code)) { - log.error(ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getMessage() + returnMap.get("return_msg")+":"+JSON.toJSONString(returnMap)); - return new ShareAccountResult(false, ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getCode(), returnMap.get("return_msg"), null); - } - - String result_code = returnMap.get("result_code"); - if (!"SUCCESS".equals(result_code)) { - log.error(ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getMessage() + returnMap.get("err_code_des")+":"+JSON.toJSONString(returnMap)); - return new ShareAccountResult(false, ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getCode(), returnMap.get("err_code_des"), null); - } - - if (!WxPayment.verifyNotifyHMAC(returnMap, payAccount.getApiKey())) { - log.error(ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getMessage() + "verifyNotifyHMAC"+":"+JSON.toJSONString(returnMap)); - return new ShareAccountResult(false, ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getCode(), ErrorCode.PROFIT_SHARING_RECEIVER_ADD_FAILED.getMessage(), null); - } + return null; - return new ShareAccountResult(true, null, "success", returnMap); } @Autowired @@ -391,58 +146,8 @@ public class WxPayShareV3Service extends PayShareBaseAdapterService{ @Override public ShareAccountResult deleteShareAccount(WxAppinfo appInfo, WxPayAccount payAccount, WxProfitSharingReceiver receiver) { - //删除分账账户从微信服务器 - WxProfitSharingReceiverP wxProfitSharingReceiverP = new WxProfitSharingReceiverP(); - if (StringUtils.isNotBlank(appInfo.getParentAppId())) { - wxProfitSharingReceiverP.setAppid(appInfo.getParentAppId()); - wxProfitSharingReceiverP.setMch_id(payAccount.getMchId()); - wxProfitSharingReceiverP.setSub_appid(appInfo.getAppId()); - wxProfitSharingReceiverP.setSub_mch_id(payAccount.getSubMchId()); - } else { - wxProfitSharingReceiverP.setAppid(appInfo.getAppId()); - wxProfitSharingReceiverP.setMch_id(payAccount.getMchId()); - } - wxProfitSharingReceiverP.setNonce_str(Utility.generate32UUID()); - wxProfitSharingReceiverP.setSign_type("HMAC-SHA256"); - - JSONObject receiverJSON = new JSONObject(); - receiverJSON.put("type", EnumProfitSharingReceiverType.getEnum(receiver.getReceiverType()).getMessage()); - receiverJSON.put("account", receiver.getReceiverAccount()); - - wxProfitSharingReceiverP.setReceiver(receiverJSON.toJSONString()); - String response; - try { - wxProfitSharingReceiverP.setSign(WxPayment.createSignHMAC(BeanUtils.toStringMap(wxProfitSharingReceiverP), payAccount.getApiKey())); - response = WxProfitSharing.delReceiver(BeanUtils.toStringMap(wxProfitSharingReceiverP)); - } catch (Exception e) { - log.error(ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getMessage() + e.getMessage()); - return new ShareAccountResult(false, ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getCode(), e.getMessage(), null); - } - Map returnMap = WxPayment.xmlToMap(response); - String return_code = returnMap.get("return_code"); - if (!"SUCCESS".equals(return_code)) { - log.error(ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getMessage() + returnMap.get("return_msg")+":"+JSON.toJSONString(returnMap)); - return new ShareAccountResult(false, ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getCode(), returnMap.get("return_msg"), null); - } - - String result_code = returnMap.get("result_code"); - if (!"SUCCESS".equals(result_code)) { - - if (returnMap.get("err_code").contains("USER_NOT_EXIST")) { - receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_INVALID.getCode()); - receiver.setUpdateTime(new Date()); - wxProfitSharingReceiverMapper.updateById(receiver); - } - log.error(ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getMessage() + returnMap.get("err_code_des")+":"+JSON.toJSONString(returnMap)); - return new ShareAccountResult(false, ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getCode(), returnMap.get("err_code_des"), null); - } - - if (!WxPayment.verifyNotifyHMAC(returnMap, payAccount.getApiKey())) { - log.error(ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getMessage()+":"+JSON.toJSONString(returnMap)); - return new ShareAccountResult(false, ErrorCode.PROFIT_SHARING_RECEIVER_DEL_FAILED.getCode(), "verifyNotifyHMAC", null); - } + return null; - return new ShareAccountResult(true, null, "success", returnMap); } @Override @@ -463,149 +168,15 @@ public class WxPayShareV3Service extends PayShareBaseAdapterService{ if(EnumYesOrNo.NO.getCode().equals(share)){ throw new MallinkException(ErrorCode.SYS_PARAMETER_TYPE_ERROR.getCode(),"微信不分账"); } - //是否已创建分账订单 - WxProfitSharingOrder record = new WxProfitSharingOrder(); - record.updateTenantInfo(sharingOrderDto); - record.setOrderId(sharingOrderDto.getOrderId()); - record = wxProfitSharingOrderMapper.selectOne(new QueryWrapper(record)); - if (record == null) { - //创建分账订单 - Date currentDate = new Date(); - record = new WxProfitSharingOrder(); - final IdWorker idworker = IdWorker.get(); - record.setId(idworker.nextId()); - record.updateTenantInfo(sharingOrderDto); - record.setTransactionId(sharingOrderDto.getTransactionId()); - record.setOrderId(sharingOrderDto.getOrderId()); - record.setPayAmount(sharingOrderDto.getPayAmount()); - record.setMerchantId(sharingOrderDto.getMerchantId()); - record.setSharingStatus(this.getSharingOrderInitialStatus()); - record.setCreateTime(currentDate); - record.setUpdateTime(currentDate); - record.setPayTimeStart(sharingOrderDto.getPayTimeStart()); - record.setPayTimeEnd(sharingOrderDto.getPayTimeEnd()); - record.setType(sharingOrderDto.getType()); - wxProfitSharingOrderMapper.insert(record); - } - - List psReceiverList = getReceiverList(sharingOrderDto, sharingOrderDto.getMerchantId(), null); - - if (psReceiverList != null && psReceiverList.size() > 50) { - throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID); - } - - if (psReceiverList == null || psReceiverList.size() == 0) { //没有分账账户, - throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_UNKNOWN); - } - - if (psReceiverList.size() > 1 &&//计算分账账户合法性 - psReceiverList.stream().filter(r->(r.getParameter() == null)).count() > 0) { - throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID); - } - - //计算分账金额合法性 - psReceiverList.stream().forEach(r-> - { - if (r.getParameter() == null){ - r.setSharingAmount(sharingOrderDto.getShareAmount()); - r.setRateAmount(sharingOrderDto.getRateAmount()); - r.setRealRateAmount(sharingOrderDto.getRealRateAmount()); - r.setCommissionAmount(sharingOrderDto.getCommissionAmount()); - } else { - r.setSharingAmount(sharingOrderDto.getShareAmount()*Integer.valueOf(r.getParameter())/10000); - } - }); - if (psReceiverList.stream().mapToInt(r->r.getSharingAmount()).sum() > sharingOrderDto.getShareAmount()){ - throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_UNKNOWN); - } - - // 添加分账接收方 - JSONArray receivers = new JSONArray(); - psReceiverList.stream().forEach(receiver->{ - JSONObject jo = new JSONObject(); - jo.put("type",this.getShareAccount(receiver.getReceiverType()).getMessage()); - jo.put("account",receiver.getReceiverAccount()); - jo.put("amount", receiver.getSharingAmount()); - jo.put("rateAmount", receiver.getRateAmount()); - jo.put("realRateAmount", receiver.getRateAmount()); - jo.put("commissionAmount", receiver.getCommissionAmount()); - //jo.put("description",receiver.getReceiverComments()); //改为存ID, - jo.put("description",receiver.getId().toString()); //为重试做准备 - receivers.add(jo); - }); - - record.setReceivers(receivers.toJSONString()); - wxProfitSharingOrderMapper.updateById(record); + - return record; + return null; } @Override public List getReceiverList(TenantEntity tenantEntity, Long merchantId, Integer ttPayWay) { - WxProfitSharingReceiver psReceiverQ = new WxProfitSharingReceiver(); - psReceiverQ.updateTenantInfo(tenantEntity); - psReceiverQ.setMerchantId(merchantId); - psReceiverQ.setSharingType(getProfitSharingType()); - psReceiverQ.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); - psReceiverQ.setPlat(EnumAppPlat.WX.getCode()); - List psReceiverList = wxProfitSharingReceiverMapper.findList(psReceiverQ); - if (null == psReceiverList || psReceiverList.size() == 0) { - throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID.getCode(),"该商户未设置分账账号."); - }else { - for (WxProfitSharingReceiver receiver:psReceiverList) { - if (EnumProfitSharingReceiverType.PROFIT_SHARING_RECEIVER_PERSONAL_WECHATID.getCode().intValue() - == receiver.getReceiverType().intValue()) { - throw new MallinkException(ErrorCode.PROFIT_SHARING_RECEIVER_INVALID.getCode(),"该商户收款账号存在个人微信号方式,微信已停止支持,请重新设置."); - } - } - } - return psReceiverList; - } - - private static String queryOrderShareAmount(String mchId,String transcationId,String apiKey) { - WxProfitSharingP psCmd = new WxProfitSharingP(); - psCmd.setMch_id(mchId);//服务商商户id - psCmd.setNonce_str(Utility.generate32UUID()); - psCmd.setTransaction_id(transcationId); - psCmd.setSign_type("HMAC-SHA256"); - - try { - psCmd.setSign(WxPayment.createSignHMAC(BeanUtils.toStringMap(psCmd), apiKey)); - return WxProfitSharing.queryOrderShareAmount(BeanUtils.toStringMap(psCmd)); - } catch (Exception e) { - e.printStackTrace(); - } return null; - } + } -// public static void main(String[] args) { -// System.out.println(queryOrderShareAmount("1511925291","4200001516202205010431149938","XHZfpVA0NzoXgLEjsujctUTcyj8Zur2C")); -// //System.out.println(test("1511925291", "1604439800", "wxed2f44705544b892", "4200001455202205127949391954", "XHZfpVA0NzoXgLEjsujctUTcyj8Zur2C", "684670745960046592", "D:\\apiclient_cert.p12")); -// } -// -// private static String test(String mchId,String subMchId,String parentAppId,String transcationId,String apiKey,String orderNo,String certPaht) { -// WxProfitSharingFinishP psFCmd = new WxProfitSharingFinishP(); -// psFCmd.setMch_id(mchId); -// psFCmd.setSub_mch_id(subMchId); -// psFCmd.setAppid(parentAppId); -// psFCmd.setNonce_str(Utility.generate32UUID()); -// psFCmd.setTransaction_id(transcationId); -// psFCmd.setOut_order_no(orderNo); -// //psFCmd.setAmount(amount); -// psFCmd.setDescription("分账已完结"); -// psFCmd.setSign_type("HMAC-SHA256"); -// -// String response; -// try { -// psFCmd.setSign(WxPayment.createSignHMAC(BeanUtils.toStringMap(psFCmd), apiKey)); -// log.info("request:" + psFCmd.toString()); -// response = WxProfitSharing.finishOrder(BeanUtils.toStringMap(psFCmd), certPaht, mchId); -// return response; -// } catch (Exception e) { -// e.printStackTrace(); -// } -// return null; -// -// } }