diff --git a/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/api/SettingConfigService.java b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/api/SettingConfigService.java new file mode 100644 index 00000000..79db995a --- /dev/null +++ b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/api/SettingConfigService.java @@ -0,0 +1,21 @@ +package com.xhpc.common.api; + +import com.xhpc.common.api.factory.CardHistoryOrderFactory; +import com.xhpc.common.api.factory.SettingConfigFactory; +import com.xhpc.common.core.constant.ServiceNameConstants; +import com.xhpc.common.core.domain.R; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * @author yuyang + * @date 2022/2/8 13:55 + */ +@FeignClient(contextId ="settingConfigFactory",value = ServiceNameConstants.XHPC_PAYMENT, fallbackFactory = SettingConfigFactory.class) +public interface SettingConfigService { + //获取支付配置 + @GetMapping("/commonPayment/settingConfig") + R settingConfig(@RequestParam(value = "status") Integer status, @RequestParam(value = "tenantId") String tenantId); + +} diff --git a/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/api/factory/SettingConfigFactory.java b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/api/factory/SettingConfigFactory.java new file mode 100644 index 00000000..bf072df1 --- /dev/null +++ b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/api/factory/SettingConfigFactory.java @@ -0,0 +1,25 @@ +package com.xhpc.common.api.factory; + +import com.xhpc.common.api.SettingConfigService; +import com.xhpc.common.core.constant.ServiceNameConstants; +import com.xhpc.common.core.domain.R; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.stereotype.Component; + +/** + * @author yuyang + * @date 2022/2/8 13:56 + */ +@Component +public class SettingConfigFactory implements FallbackFactory { + @Override + public SettingConfigService create(Throwable cause) { + return new SettingConfigService() { + @Override + public R settingConfig(Integer status, String tenantId) { + return R.fail("获取支付配置信息失败:" + cause.getMessage()); + } + }; + } +} diff --git a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/domain/XhpcSettingConfig.java b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/domain/XhpcSettingConfig.java similarity index 98% rename from xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/domain/XhpcSettingConfig.java rename to xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/domain/XhpcSettingConfig.java index d292facd..6200bd5d 100644 --- a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/domain/XhpcSettingConfig.java +++ b/xhpc-modules/xhpc-common/src/main/java/com/xhpc/common/domain/XhpcSettingConfig.java @@ -1,4 +1,4 @@ -package com.xhpc.payment.domain; +package com.xhpc.common.domain; import com.xhpc.common.core.web.domain.BaseEntity; import lombok.Data; diff --git a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/AlipayPaymentController.java b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/AlipayPaymentController.java index 07342952..a096b4b0 100644 --- a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/AlipayPaymentController.java +++ b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/AlipayPaymentController.java @@ -20,9 +20,14 @@ import com.xhpc.common.core.utils.StringUtils; import com.xhpc.common.core.web.domain.AjaxResult; import com.xhpc.common.data.down.StartChargingData; import com.xhpc.common.domain.XhpcRechargeOrder; +import com.xhpc.common.log.annotation.Log; +import com.xhpc.common.log.enums.BusinessType; import com.xhpc.common.security.service.TokenService; import com.xhpc.common.util.UserTypeUtil; -import com.xhpc.payment.domain.*; +import com.xhpc.payment.domain.AlipayNotifyParam; +import com.xhpc.payment.domain.XhpcAppUser; +import com.xhpc.common.domain.XhpcSettingConfig; +import com.xhpc.payment.domain.XhpcUserAccountStatement; import com.xhpc.payment.mapper.XhpcUserAccountStatementMapper; import com.xhpc.payment.service.IXhpcCommonPayment; import com.xhpc.payment.service.IXhpcRechargeOrderService; @@ -33,16 +38,19 @@ import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.env.Environment; -import org.springframework.web.bind.annotation.*; -import com.xhpc.common.log.annotation.Log; -import com.xhpc.common.log.enums.BusinessType; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.net.URLDecoder; import java.net.URLEncoder; -import java.util.*; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; @RestController @@ -50,8 +58,6 @@ import java.util.*; @Api(value = "支付宝支付接口", tags = "支付宝支付接口") public class AlipayPaymentController { - @Autowired - private Environment environment; @Autowired private IXhpcRechargeOrderService iXhpcRechargeOrderService; @Autowired diff --git a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/WxPaymentController.java b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/WxPaymentController.java index 505f61c4..f2d3c376 100644 --- a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/WxPaymentController.java +++ b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/WxPaymentController.java @@ -16,7 +16,7 @@ import com.xhpc.common.security.service.TokenService; import com.xhpc.common.util.UserTypeUtil; import com.xhpc.payment.domain.XhpcAppUser; import com.xhpc.common.domain.XhpcRechargeOrder; -import com.xhpc.payment.domain.XhpcSettingConfig; +import com.xhpc.common.domain.XhpcSettingConfig; import com.xhpc.payment.domain.XhpcUserAccountStatement; import com.xhpc.payment.mapper.XhpcUserAccountStatementMapper; import com.xhpc.payment.service.IXhpcCommonPayment; @@ -34,7 +34,6 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import javax.annotation.PostConstruct; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; diff --git a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/XhpcCommonPaymentController.java b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/XhpcCommonPaymentController.java new file mode 100644 index 00000000..34ccd47f --- /dev/null +++ b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/XhpcCommonPaymentController.java @@ -0,0 +1,37 @@ +package com.xhpc.payment.controller; + +import com.xhpc.common.core.domain.R; +import com.xhpc.common.core.web.controller.BaseController; +import com.xhpc.payment.service.IXhpcCommonPayment; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author yuyang + * @date 2022/2/8 14:00 + */ +@EnableScheduling +@RestController +@RequestMapping("/commonPayment") +public class XhpcCommonPaymentController extends BaseController { + + @Autowired + private IXhpcCommonPayment xhpcCommonPayment; + + + /** + * 获取支付配置 + * @param status 1微信 2支付宝 + * @param tenantId + * @return + */ + @GetMapping("/settingConfig") + public R settingConfig(Integer status, String tenantId) { + return R.ok(xhpcCommonPayment.getXhpcSettingConfigTenantId(status, tenantId)); + } + + +} diff --git a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/XhpcRefundAuditController.java b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/XhpcRefundAuditController.java index 4a194dad..3614ed82 100644 --- a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/XhpcRefundAuditController.java +++ b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/controller/XhpcRefundAuditController.java @@ -11,7 +11,6 @@ import com.xhpc.common.api.SmsService; import com.xhpc.common.api.UserTypeService; import com.xhpc.common.core.constant.HttpStatus; import com.xhpc.common.core.constant.StatusConstants; -import com.xhpc.common.core.domain.R; import com.xhpc.common.core.utils.DateUtils; import com.xhpc.common.core.utils.StringUtils; import com.xhpc.common.core.utils.WXPayUtil; @@ -25,7 +24,7 @@ import com.xhpc.common.util.UserTypeUtil; import com.xhpc.payment.domain.XhpcAppUser; import com.xhpc.payment.domain.XhpcRefundAudit; import com.xhpc.common.domain.XhpcRefundOrder; -import com.xhpc.payment.domain.XhpcSettingConfig; +import com.xhpc.common.domain.XhpcSettingConfig; import com.xhpc.payment.mapper.XhpcUserAccountStatementMapper; import com.xhpc.payment.service.IXhpcCommonPayment; import com.xhpc.payment.service.IXhpcRefundAuditService; diff --git a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/mapper/XhpcCommonPaymentMapper.java b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/mapper/XhpcCommonPaymentMapper.java index 3f543b1a..0520c914 100644 --- a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/mapper/XhpcCommonPaymentMapper.java +++ b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/mapper/XhpcCommonPaymentMapper.java @@ -1,6 +1,6 @@ package com.xhpc.payment.mapper; -import com.xhpc.payment.domain.XhpcSettingConfig; +import com.xhpc.common.domain.XhpcSettingConfig; import org.apache.ibatis.annotations.Param; /** diff --git a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/service/IXhpcCommonPayment.java b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/service/IXhpcCommonPayment.java index a0b616b1..cd922700 100644 --- a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/service/IXhpcCommonPayment.java +++ b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/service/IXhpcCommonPayment.java @@ -1,6 +1,6 @@ package com.xhpc.payment.service; -import com.xhpc.payment.domain.XhpcSettingConfig; +import com.xhpc.common.domain.XhpcSettingConfig; /** * @author yuyang diff --git a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/service/impl/XhpcCommonPaymentImpl.java b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/service/impl/XhpcCommonPaymentImpl.java index 62945d05..2acb86fb 100644 --- a/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/service/impl/XhpcCommonPaymentImpl.java +++ b/xhpc-modules/xhpc-payment/src/main/java/com/xhpc/payment/service/impl/XhpcCommonPaymentImpl.java @@ -1,6 +1,6 @@ package com.xhpc.payment.service.impl; -import com.xhpc.payment.domain.XhpcSettingConfig; +import com.xhpc.common.domain.XhpcSettingConfig; import com.xhpc.payment.mapper.XhpcCommonPaymentMapper; import com.xhpc.payment.service.IXhpcCommonPayment; import org.springframework.beans.factory.annotation.Autowired; diff --git a/xhpc-modules/xhpc-payment/src/main/resources/mapper/XhpcCommonPaymentMapper.xml b/xhpc-modules/xhpc-payment/src/main/resources/mapper/XhpcCommonPaymentMapper.xml index 9f095052..dd58b32c 100644 --- a/xhpc-modules/xhpc-payment/src/main/resources/mapper/XhpcCommonPaymentMapper.xml +++ b/xhpc-modules/xhpc-payment/src/main/resources/mapper/XhpcCommonPaymentMapper.xml @@ -4,7 +4,7 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + diff --git a/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/controller/XhpcAppUserController.java b/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/controller/XhpcAppUserController.java index 0a7ed380..95852fd8 100644 --- a/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/controller/XhpcAppUserController.java +++ b/xhpc-modules/xhpc-user/src/main/java/com/xhpc/user/controller/XhpcAppUserController.java @@ -2,12 +2,12 @@ package com.xhpc.user.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.CertAlipayRequest; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.request.AlipaySystemOauthTokenRequest; import com.alipay.api.response.AlipaySystemOauthTokenResponse; +import com.xhpc.common.api.SettingConfigService; import com.xhpc.common.core.constant.HttpStatus; import com.xhpc.common.core.domain.R; import com.xhpc.common.core.utils.HttpUtils; @@ -16,20 +16,14 @@ import com.xhpc.common.core.utils.sign.Base64; import com.xhpc.common.core.web.controller.BaseController; import com.xhpc.common.core.web.domain.AjaxResult; import com.xhpc.common.core.web.page.TableDataInfo; +import com.xhpc.common.domain.XhpcSettingConfig; import com.xhpc.common.log.annotation.Log; import com.xhpc.common.log.enums.BusinessType; import com.xhpc.user.service.IXhpcAppUserUserService; import io.swagger.annotations.ApiOperation; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.env.Environment; import org.springframework.web.bind.annotation.*; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.security.PublicKey; -import java.security.cert.Certificate; -import java.security.cert.CertificateException; -import java.security.cert.CertificateFactory; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; @@ -55,8 +49,7 @@ public class XhpcAppUserController extends BaseController { private IXhpcAppUserUserService iXhpcAppUserUserService; @Autowired - private Environment environment; - + private SettingConfigService settingConfigService; /** * C端用户详情 */ @@ -162,38 +155,47 @@ public class XhpcAppUserController extends BaseController { */ @PostMapping("/jscode2session") @ApiOperation(value = "获取微信权限标识", notes = "jsCode") - public R jsCode(String jsCode, String encryptedData, String iv) { + public R jsCode(String jsCode, String encryptedData, String iv,String tenantId) { if (StringUtils.isEmpty(jsCode)) { return R.fail(HttpStatus.NOT_NULL, "信息不完整"); } encryptedData =encryptedData.replace(' ','+'); - String url = environment.getProperty("WXGETJSCODE") + jsCode + "&grant_type=authorization_code"; - String result = HttpUtils.get(url); - JSONObject json = JSON.parseObject(result); - if (null != json) { - String openid = json.getString("openid"); - String sessionKey = json.getString("session_key"); - System.out.println("sessionKey:"+sessionKey); - if (StringUtils.isEmpty(openid)) { - return R.fail(HttpStatus.ERROR_STATUS, "openid获取失败"); - } - if (StringUtils.isEmpty(sessionKey)) { - return R.fail(HttpStatus.ERROR_STATUS, "openid获取失败"); - } - Map map = new HashMap<>(16); - map.put("openid", openid); - JSONObject jsonObject = new JSONObject(); - if ((!"".equals(encryptedData) && encryptedData != null) && (!"".equals(iv) && iv != null)) { - jsonObject = getPhoneNumber(encryptedData, sessionKey, iv); - if (jsonObject !=null) { - map.put("name", jsonObject.get("nickName")); - map.put("sex", jsonObject.get("gender")); - map.put("avatar", jsonObject.get("avatarUrl")); - map.put("phone", jsonObject.get("purePhoneNumber")); - } - } - return R.ok(map); + if("".equals(tenantId) || null==tenantId){ + tenantId="000000"; } + R r = settingConfigService.settingConfig(1, tenantId); + if(r !=null && r.getCode()==200){ + XhpcSettingConfig xhpcSettingConfig = (XhpcSettingConfig)r.getData(); + String url = "https://api.weixin.qq.com/sns/jscode2session?appid="+xhpcSettingConfig.getWxAppId()+"&secret="+xhpcSettingConfig.getWxAppSecret()+"&js_code="+ jsCode + "&grant_type=authorization_code"; + String result = HttpUtils.get(url); + JSONObject json = JSON.parseObject(result); + if (null != json) { + String openid = json.getString("openid"); + String sessionKey = json.getString("session_key"); + System.out.println("sessionKey:"+sessionKey); + if (StringUtils.isEmpty(openid)) { + return R.fail(HttpStatus.ERROR_STATUS, "openid获取失败"); + } + if (StringUtils.isEmpty(sessionKey)) { + return R.fail(HttpStatus.ERROR_STATUS, "openid获取失败"); + } + Map map = new HashMap<>(16); + map.put("openid", openid); + JSONObject jsonObject = new JSONObject(); + if ((!"".equals(encryptedData) && encryptedData != null) && (!"".equals(iv) && iv != null)) { + jsonObject = getPhoneNumber(encryptedData, sessionKey, iv); + if (jsonObject !=null) { + map.put("name", jsonObject.get("nickName")); + map.put("sex", jsonObject.get("gender")); + map.put("avatar", jsonObject.get("avatarUrl")); + map.put("phone", jsonObject.get("purePhoneNumber")); + } + } + return R.ok(map); + } + } + + return R.fail(HttpStatus.ERROR_STATUS, "openid获取失败"); } @@ -241,43 +243,50 @@ public class XhpcAppUserController extends BaseController { */ @ApiOperation("支付宝授权") @PostMapping("/alipayEmpower") - public AjaxResult alipayEmpower(@RequestParam String code) throws Exception { - - /** 初始化 **/ - CertAlipayRequest certAlipayRequest = new CertAlipayRequest(); - /** 支付宝网关 **/ - certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do"); - /** 应用id,如何获取请参考:https://opensupport.alipay.com/support/helpcenter/190/201602493024 **/ - certAlipayRequest.setAppId(environment.getProperty("ALIPAYAPPID")); - /** 应用私钥, 如何获取请参考:https://opensupport.alipay.com/support/helpcenter/207/201602471154?ant_source=antsupport **/ - certAlipayRequest.setPrivateKey(environment.getProperty("ALIPAYPRIVATEKEY")); - /** 应用公钥证书路径,下载后保存位置的绝对路径 **/ - certAlipayRequest.setCertPath(environment.getProperty("CERTPATH")); - /** 支付宝公钥证书路径,下载后保存位置的绝对路径 **/ - certAlipayRequest.setAlipayPublicCertPath(environment.getProperty("PUBLICCERTPATH")); - /** 支付宝根证书路径,下载后保存位置的绝对路径 **/ - certAlipayRequest.setRootCertPath(environment.getProperty("ROOTCRETPATH")); - /** 设置签名类型 **/ - certAlipayRequest.setSignType("RSA2"); - /** 设置请求格式,固定值json **/ - certAlipayRequest.setFormat("json"); - /** 设置编码格式 **/ - certAlipayRequest.setCharset("UTF-8"); - AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest); - AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest(); - request.setGrantType("authorization_code"); - // auth_code 前端授权后得到的授权码 - request.setCode(code); - AlipaySystemOauthTokenResponse response = alipayClient.certificateExecute(request); - //服务端请求返回,RSA2密钥和公钥证书请求方式不同,如当面付 - // RSA2密钥请求response = alipayClient.execute(request); - // 公钥证书请求请求response = alipayClient.certificateExecute(request); - if (response.isSuccess()) { - System.out.println("调用成功"); - } else { - System.out.println("调用失败"); + public AjaxResult alipayEmpower(@RequestParam String code,String tenantId) throws Exception { + if("".equals(tenantId) || null==tenantId){ + tenantId="000000"; } - return AjaxResult.success(response); + R r = settingConfigService.settingConfig(1, tenantId); + if(r !=null && r.getCode()==200){ + XhpcSettingConfig xhpcSettingConfig = (XhpcSettingConfig)r.getData(); + /** 初始化 **/ + CertAlipayRequest certAlipayRequest = new CertAlipayRequest(); + /** 支付宝网关 **/ + certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do"); + /** 应用id,如何获取请参考:https://opensupport.alipay.com/support/helpcenter/190/201602493024 **/ + certAlipayRequest.setAppId(xhpcSettingConfig.getZfbAppId()); + /** 应用私钥, 如何获取请参考:https://opensupport.alipay.com/support/helpcenter/207/201602471154?ant_source=antsupport **/ + certAlipayRequest.setPrivateKey(xhpcSettingConfig.getZfbPrivateKey()); + /** 应用公钥证书路径,下载后保存位置的绝对路径 **/ + certAlipayRequest.setCertPath(xhpcSettingConfig.getZfbAppCertPublicKey()); + /** 支付宝公钥证书路径,下载后保存位置的绝对路径 **/ + certAlipayRequest.setAlipayPublicCertPath(xhpcSettingConfig.getZfbAppCertPublicKey()); + /** 支付宝根证书路径,下载后保存位置的绝对路径 **/ + certAlipayRequest.setRootCertPath(xhpcSettingConfig.getZfbAlipayRootCert()); + /** 设置签名类型 **/ + certAlipayRequest.setSignType("RSA2"); + /** 设置请求格式,固定值json **/ + certAlipayRequest.setFormat("json"); + /** 设置编码格式 **/ + certAlipayRequest.setCharset("UTF-8"); + AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest); + AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest(); + request.setGrantType("authorization_code"); + // auth_code 前端授权后得到的授权码 + request.setCode(code); + AlipaySystemOauthTokenResponse response = alipayClient.certificateExecute(request); + //服务端请求返回,RSA2密钥和公钥证书请求方式不同,如当面付 + // RSA2密钥请求response = alipayClient.execute(request); + // 公钥证书请求请求response = alipayClient.certificateExecute(request); + if (response.isSuccess()) { + System.out.println("调用成功"); + } else { + return AjaxResult.error("获取失败"); + } + return AjaxResult.success(response); + } + return AjaxResult.error("获取失败"); } /**