package cn.lili.modules.payment.kit.plugin.alipay; import cn.hutool.core.date.DateUtil; import cn.hutool.json.JSONUtil; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.utils.SpringContextUtil; import cn.lili.modules.system.entity.dos.Setting; import cn.lili.modules.system.entity.dto.payment.AlipayPaymentSetting; import cn.lili.modules.system.entity.enums.SettingEnum; import cn.lili.modules.system.service.SettingService; import com.alipay.api.AlipayApiException; import com.alipay.api.CertAlipayRequest; import com.alipay.api.DefaultAlipayClient; import java.util.Date; /** * AliPayApiConfigKit * * @author Chopper * @since 2020-12-16 09:31 */ public class AliPayApiConfigKit { /** * 支付配置 */ static DefaultAlipayClient defaultAlipayClient; /** * 下次刷新时间 */ static Date nextRebuildDate; /** * 间隔时间 */ static Long refreshInterval = 1000 * 60 * 3L; /** * 获取支付宝支付参数 * * @return * @throws AlipayApiException */ public static synchronized DefaultAlipayClient getAliPayApiConfig() throws AlipayApiException { Date date = new Date(); //如果过期,则重新构建 if (nextRebuildDate == null || date.after(nextRebuildDate)) { return rebuild(); } return defaultAlipayClient; } static DefaultAlipayClient rebuild() throws AlipayApiException { AlipayPaymentSetting setting; try { SettingService settingService = (SettingService) SpringContextUtil.getBean("settingServiceImpl"); Setting systemSetting = settingService.get(SettingEnum.ALIPAY_PAYMENT.name()); setting = JSONUtil.toBean(systemSetting.getSettingValue(), AlipayPaymentSetting.class); } catch (Exception e) { throw new ServiceException(ResultCode.PAY_NOT_SUPPORT); } CertAlipayRequest certAlipayRequest = new CertAlipayRequest(); certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do"); certAlipayRequest.setFormat("json"); certAlipayRequest.setCharset("utf-8"); certAlipayRequest.setSignType("RSA2"); certAlipayRequest.setAppId(setting.getAppId()); certAlipayRequest.setPrivateKey(setting.getPrivateKey()); certAlipayRequest.setCertPath(setting.getCertPath()); certAlipayRequest.setAlipayPublicCertPath(setting.getAlipayPublicCertPath()); certAlipayRequest.setRootCertPath(setting.getRootCertPath()); defaultAlipayClient = new DefaultAlipayClient(certAlipayRequest); nextRebuildDate = DateUtil.date(System.currentTimeMillis()+ refreshInterval); return defaultAlipayClient; } }