diff --git a/rights-client-controller/src/main/java/com/cyjd/rights/controller/AliPayController.java b/rights-client-controller/src/main/java/com/cyjd/rights/controller/AliPayController.java index 277170d..6254d18 100644 --- a/rights-client-controller/src/main/java/com/cyjd/rights/controller/AliPayController.java +++ b/rights-client-controller/src/main/java/com/cyjd/rights/controller/AliPayController.java @@ -1,25 +1,20 @@ package com.cyjd.rights.controller; import com.alibaba.fastjson.JSON; -import com.alipay.api.AlipayApiException; -import com.alipay.api.AlipayConstants; -import com.alipay.api.CertAlipayRequest; +import com.alipay.api.*; import com.alipay.api.internal.util.AlipaySignature; -import com.alipay.api.response.AlipayTradePayResponse; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.cyjd.rights.beans.AliPayProperties; import com.cyjd.rights.beans.R; import com.cyjd.rights.beans.ResultCodeEnum; import com.cyjd.rights.business.service.*; -import com.cyjd.rights.constant.AliPayConstant; import com.cyjd.rights.constant.EnumPeriodType; -import com.cyjd.rights.dto.AliPayInOrderByAgreementDto; import com.cyjd.rights.dto.AliPaySignUpDto; import com.cyjd.rights.entity.AliPayOrderEntity; import com.cyjd.rights.entity.AliPaySigningOrderEntity; +import com.cyjd.rights.entity.ConfigEntity; +import com.cyjd.rights.enums.AliPayEnum; import com.cyjd.rights.result.FResult; -import com.cyjd.rights.utils.EntityConvertUtil; import com.cyjd.rights.utils.OrderUtil; import com.cyjd.rights.vo.AliPayInOrderByAgreementReq; import com.cyjd.rights.vo.AliPayQueryPageSignReq; @@ -27,15 +22,12 @@ import com.cyjd.rights.vo.AliPayTradeQueryReq; import com.cyjd.rights.vo.AliPayUserPageSignReq; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import lombok.extern.java.Log; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.*; -import javax.annotation.PostConstruct; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.time.LocalDateTime; @@ -75,22 +67,15 @@ public class AliPayController { private AliPayProperties aliPayProperties; - private CertAlipayRequest certAlipayRequest; private static String[] unicom = {"130", "131", "132", "140", "155", "156", "185", "186", "145", "171", "176", "175", "166"}; private static String[] mobileArray = {"134", "135", "136", "137", "138", "139", "147", "150", "151", "152", "157", "158", "159", "178", "182", "183", "184", "187", "188", "195", "198"}; private static String[] tel = {"133", "153", "177", "180", "181", "189", "173", "149", "199"}; - @PostConstruct +/* @PostConstruct public void init() { CertAlipayRequest certAlipayRequest = new CertAlipayRequest(); - //设置文件地址 -// if (isSkipSign) { -// aliPayProperties.setCertPath("D:\\daima\\hy\\ringback-q\\02Ypcl\\01Code\\01Plantform\\Server\\vrbt-client-controller\\src\\main\\resources\\config\\"); -// } else { -// aliPayProperties.setCertPath("/home/ypcl/server-client/config/"); -// } certAlipayRequest.setServerUrl(AliPayConstant.serverUrl); certAlipayRequest.setAppId(aliPayProperties.getAppId()); certAlipayRequest.setPrivateKey(aliPayProperties.getPrivateKey()); @@ -101,17 +86,21 @@ public class AliPayController { certAlipayRequest.setAlipayPublicCertPath(aliPayProperties.getCertPath() + "alipayCertPublicKey_RSA2.crt"); certAlipayRequest.setRootCertPath(aliPayProperties.getCertPath() + "alipayRootCert.crt"); this.certAlipayRequest = certAlipayRequest; - } + }*/ @ApiOperation(value = "支付宝签约", notes = "前端先调用此接口,由服务端请求支付宝组装scheme地址,之后前端通过该地址唤起支付宝进行签约") @PostMapping("/signUp") public R signUp(@RequestBody AliPaySignUpDto signUpDto) { - String price="19.9"; + String price = "19.9"; //查询用户31天内是否已经有代扣成功的记录了 if (!aliPayOrderService.checkOpen(signUpDto.getMobile())) { return R.error(ResultCodeEnum.user_month_repeat_open); } + //获取现在要推广的账号 + ConfigEntity configEntity = configService.getOne(new QueryWrapper().eq("config_name", "account")); + String aliPayAccountName = configEntity.getConfigValue(); + AliPayUserPageSignReq signReq = new AliPayUserPageSignReq(); signUpDto.setIsPage(true); signUpDto.setPeriod("31"); //设置天数 @@ -128,7 +117,7 @@ public class AliPayController { periodRuleParams.setSingleAmount(signUpDto.getSingleAmount()); signReq.setPeriodRuleParams(periodRuleParams); //aliPayUserPageSignReq.setSignScene("INDUSTRY|DIGITAL_MEDIA"); - String signUrl = aliPayService.signUp(signReq); + String signUrl = aliPayService.signUp(signReq, aliPayAccountName); //保存签约订单 AliPaySigningOrderEntity aliPaySigningOrderEntity = new AliPaySigningOrderEntity(); aliPaySigningOrderEntity.setOrderId(agreementNo); @@ -137,11 +126,12 @@ public class AliPayController { aliPaySigningOrderEntity.setLinkId(signUpDto.getLinkId()); aliPaySigningOrderEntity.setLinkName("推广名字"); //先定死 aliPaySigningOrderEntity.setOperatorsId(1); //先定死可能不要这个参数 - aliPaySigningOrderEntity.setIsPage(signUpDto.getIsPage()?1:0); + aliPaySigningOrderEntity.setIsPage(signUpDto.getIsPage() ? 1 : 0); aliPaySigningOrderEntity.setOrderName("优爱腾三方权益业务"); aliPaySigningOrderEntity.setPrice(price); + aliPaySigningOrderEntity.setAliAccountName(aliPayAccountName); aliPaySigningOrderEntity.setBusinessType(1); - if (signUpDto.getSendApiData()!=null&&!Objects.equals(signUpDto.getSendApiData(), "")) { + if (signUpDto.getSendApiData() != null && !Objects.equals(signUpDto.getSendApiData(), "")) { aliPaySigningOrderEntity.setSendApiData(signUpDto.getSendApiData()); } if (StringUtils.isBlank(signUrl)) { @@ -158,19 +148,19 @@ public class AliPayController { @ApiOperation(value = "支付宝签约状态查询", notes = "签约成功以后前端可调用此接口查询是否签约成功") @PostMapping("/querySign") - public FResult querySign(@RequestParam String externalAgreementNo) { + public FResult querySign(@RequestParam String externalAgreementNo,@RequestParam String accountName) { AliPayQueryPageSignReq aliPayQueryPageSignReq = new AliPayQueryPageSignReq(); aliPayQueryPageSignReq.setExternalAgreementNo(externalAgreementNo); - boolean querySign = aliPayService.querySign(aliPayQueryPageSignReq); + boolean querySign = aliPayService.querySign(aliPayQueryPageSignReq,accountName); return FResult.ok(querySign); } @ApiOperation(value = "支付宝支付状态查询", notes = "代扣以后可调用此接口查询是否成功") @PostMapping("/queryOrder") - public FResult queryOrder(@RequestParam String outTradeNo) { + public FResult queryOrder(@RequestParam String outTradeNo,@RequestParam String accountName) { AliPayTradeQueryReq aliPayTradeQueryReq = new AliPayTradeQueryReq(); aliPayTradeQueryReq.setOutTradeNo(outTradeNo); - boolean queryOrder = aliPayService.queryOrder(aliPayTradeQueryReq); + boolean queryOrder = aliPayService.queryOrder(aliPayTradeQueryReq, accountName); return FResult.ok(queryOrder); } @@ -212,6 +202,31 @@ public class AliPayController { } + @ApiOperation(value = "支付退款", notes = "支付退款") + @PostMapping("/alipayRefund") + public void alipayRefund() throws AlipayApiException { +// AliPayEnum aliPayEnum = AliPayEnum.getMessageEnum(inMap.get("app_id")); +// CertAlipayRequest certAlipayRequest = aliPayService.init(aliPayEnum.getAccountName()); +// AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest); +// AlipayTradeRefundRequest request = new AlipayTradeRefundRequest(); +// JSONObject bizContent = new JSONObject(); +// bizContent.put("out_trade_no", "Y2023080420524534021000"); +// bizContent.put("refund_amount", 0.1); +// bizContent.put("out_request_no", "HZ01RF001"); +// //// 返回参数选项,按需传入 +// //JSONArray queryOptions = new JSONArray(); +// //queryOptions.add("refund_detail_item_list"); +// //bizContent.put("query_options", queryOptions); +// +// request.setBizContent(bizContent.toString()); +// AlipayTradeRefundResponse response = alipayClient.certificateExecute(request); +// if (response.isSuccess()) { +// System.out.println("调用成功"); +// } else { +// System.out.println("调用失败"); +// } + + } //@Scheduled(cron = "0 0 8,20 * * ?") @@ -296,9 +311,12 @@ public class AliPayController { * @return */ public String signNotify(Map inMap) { + log.info("===========================我是签约回调============================"); //log.info("支付宝签约回调开始:request{}", JSON.toJSONString(inMap)); try { + AliPayEnum aliPayEnum = AliPayEnum.getMessageEnum(inMap.get("app_id")); + CertAlipayRequest certAlipayRequest = aliPayService.init(aliPayEnum.getAccountName()); //验签 boolean signVerified = AlipaySignature.certVerifyV1(inMap, certAlipayRequest.getAlipayPublicCertPath(), AlipayConstants.CHARSET_UTF8, AlipayConstants.SIGN_TYPE_RSA2); if (signVerified) { @@ -323,7 +341,7 @@ public class AliPayController { //更新订单签约信息 AliPaySigningOrderEntity aliPaySigningOrder = aliPaySigningOrderService.getOne(new QueryWrapper().eq("order_id", externalAgreementNo)); - if (aliPaySigningOrder==null){ + if (aliPaySigningOrder == null) { return "fail"; } aliPaySigningOrder.setAliUserId(alipayUserId); @@ -345,13 +363,13 @@ public class AliPayController { aliPaySigningOrder.setStatus(1); //设置下次续费的时间 aliPaySigningOrder.setNextPayTime(LocalDateTime.now().plusDays(31)); - log.info("支付宝签约修改成功订单"+aliPaySigningOrder+"================================"); + log.info("支付宝签约修改成功订单" + aliPaySigningOrder + "================================"); boolean b = aliPaySigningOrderService.updateById(aliPaySigningOrder); - log.info("支付宝签约修改结果:=========================================================="+b); + log.info("支付宝签约修改结果:==========================================================" + b); //进行扣款 - aliPayService.aliPayTradePayByAgreement(payInOrderByAgreementReq,aliPaySigningOrder); - }else { + aliPayService.aliPayTradePayByAgreement(payInOrderByAgreementReq, aliPaySigningOrder,certAlipayRequest); + } else { //修改订单状态为失败 aliPaySigningOrder.setStatus(0); aliPaySigningOrderService.updateById(aliPaySigningOrder); @@ -402,8 +420,10 @@ public class AliPayController { * @return */ public String agreementNotify(@RequestBody Map inMap) { - log.info("支付宝代扣回调开始:request{}"+JSON.toJSONString(inMap)); + log.info("支付宝代扣回调开始:request{}" + JSON.toJSONString(inMap)); try { + AliPayEnum aliPayEnum = AliPayEnum.getMessageEnum(inMap.get("app_id")); + CertAlipayRequest certAlipayRequest = aliPayService.init(aliPayEnum.getAccountName()); //验签 boolean signVerified = AlipaySignature.certVerifyV1(inMap, certAlipayRequest.getAlipayPublicCertPath(), AlipayConstants.CHARSET_UTF8, AlipayConstants.SIGN_TYPE_RSA2); if (signVerified) { @@ -442,18 +462,18 @@ public class AliPayController { //通知时间。通知的发送时间。格式为 yyyy-MM-dd HH:mm:ss。 String notifyTime = inMap.get("notify_time"); log.info("支付宝支付回调:" + inMap.toString()); - log.info("outTradeNo====================="+outTradeNo); + log.info("outTradeNo=====================" + outTradeNo); AliPaySigningOrderEntity aliPaySigningOrderEntity = aliPaySigningOrderService.getOne(new QueryWrapper().eq("other_order_id", outTradeNo)); // for (AliPayOrderEntity aliPayOrderEntity : aliPayOrderService.list(new QueryWrapper<>())) { // System.out.println(aliPayOrderEntity); // } - if (aliPaySigningOrderEntity==null){ + if (aliPaySigningOrderEntity == null) { log.info("未查询到订单"); return "success"; } AliPayOrderEntity aliPayOrderEntity = new AliPayOrderEntity(); - aliPayOrderEntity.setOrderId(System.currentTimeMillis()+""); + aliPayOrderEntity.setOrderId(System.currentTimeMillis() + ""); aliPayOrderEntity.setOrderTime(LocalDateTime.now()); aliPayOrderEntity.setPrice(aliPaySigningOrderEntity.getPrice()); aliPayOrderEntity.setIsPage(aliPaySigningOrderEntity.getIsPage()); @@ -464,26 +484,27 @@ public class AliPayController { aliPayOrderEntity.setBusinessType(aliPaySigningOrderEntity.getBusinessType()); aliPayOrderEntity.setLinkId(aliPaySigningOrderEntity.getLinkId()); aliPayOrderEntity.setLinkName(aliPaySigningOrderEntity.getLinkName()); + aliPayOrderEntity.setAliAccountName(aliPaySigningOrderEntity.getAliAccountName()); aliPayOrderEntity.setOrderName("惠点联合会员"); if ("TRADE_SUCCESS".equals(tradeStatus) || "TRADE_FINISHED".equals(tradeStatus)) { aliPayOrderEntity.setStatus(1); aliPayOrderService.save(aliPayOrderEntity); - log.info("支付订单保存成功"+aliPayOrderEntity); + log.info("支付订单保存成功" + aliPayOrderEntity); //查看是否发送 - if (sendSuccessMobileService.ifSendDataByType(aliPaySigningOrderEntity.getLinkId().toString(),outTradeNo)) { + if (sendSuccessMobileService.ifSendDataByType(aliPaySigningOrderEntity.getLinkId().toString(), outTradeNo)) { //回传 1161张敏渠道 - if (1161==aliPaySigningOrderEntity.getLinkId()){ + if (1161 == aliPaySigningOrderEntity.getLinkId()) { //回传成功数据 - sendSuccessMobileService.sendSuccessMobile(aliPaySigningOrderEntity.getMobile(),"zm",outTradeNo); + sendSuccessMobileService.sendSuccessMobile(aliPaySigningOrderEntity.getMobile(), "zm", outTradeNo); } //回传 1160推啊渠道 - if (1160==aliPaySigningOrderEntity.getLinkId()){ - sendSuccessMobileService.sendSuccessMobile(aliPaySigningOrderEntity.getSendApiData(),"tuia",outTradeNo); + if (1160 == aliPaySigningOrderEntity.getLinkId()) { + sendSuccessMobileService.sendSuccessMobile(aliPaySigningOrderEntity.getSendApiData(), "tuia", outTradeNo); } //回传 1162赤金渠道 - if (1162==aliPaySigningOrderEntity.getLinkId()){ - sendSuccessMobileService.sendSuccessMobile(aliPaySigningOrderEntity.getSendApiData(),"cj",outTradeNo); + if (1162 == aliPaySigningOrderEntity.getLinkId()) { + sendSuccessMobileService.sendSuccessMobile(aliPaySigningOrderEntity.getSendApiData(), "cj", outTradeNo); } } // if (b){ @@ -495,7 +516,7 @@ public class AliPayController { } aliPayOrderEntity.setStatus(0); aliPayOrderService.save(aliPayOrderEntity); - log.info("支付开通失败订单保存成功"+aliPayOrderEntity); + log.info("支付开通失败订单保存成功" + aliPayOrderEntity); } } catch (AlipayApiException e) { diff --git a/rights-entity/src/main/java/com/cyjd/rights/entity/AliAccountEntity.java b/rights-entity/src/main/java/com/cyjd/rights/entity/AliAccountEntity.java new file mode 100644 index 0000000..763fa8d --- /dev/null +++ b/rights-entity/src/main/java/com/cyjd/rights/entity/AliAccountEntity.java @@ -0,0 +1,31 @@ +package com.cyjd.rights.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("tb_ali_account") +public class AliAccountEntity { + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + //阿里账户名字 + private String aliAccountName; + + //应用Id + private String appId; + + //应用密钥 + private String privateKey; + + //应用公钥 + private String publicKey; + + //证书存放位置 + private String certAddress; +} diff --git a/rights-entity/src/main/java/com/cyjd/rights/entity/AliPayOrderEntity.java b/rights-entity/src/main/java/com/cyjd/rights/entity/AliPayOrderEntity.java index 73f2ec7..6ba3648 100644 --- a/rights-entity/src/main/java/com/cyjd/rights/entity/AliPayOrderEntity.java +++ b/rights-entity/src/main/java/com/cyjd/rights/entity/AliPayOrderEntity.java @@ -46,4 +46,6 @@ public class AliPayOrderEntity { private String linkName; + + private String aliAccountName; //账户名称(公司拼音首字母+编号) } diff --git a/rights-entity/src/main/java/com/cyjd/rights/entity/AliPaySigningOrderEntity.java b/rights-entity/src/main/java/com/cyjd/rights/entity/AliPaySigningOrderEntity.java index 412c5aa..daaa9e2 100644 --- a/rights-entity/src/main/java/com/cyjd/rights/entity/AliPaySigningOrderEntity.java +++ b/rights-entity/src/main/java/com/cyjd/rights/entity/AliPaySigningOrderEntity.java @@ -61,5 +61,7 @@ public class AliPaySigningOrderEntity { * 回传成功数据 */ private String sendApiData; + + private String aliAccountName; //账户名称(公司拼音首字母+编号) } diff --git a/rights-entity/src/main/java/com/cyjd/rights/entity/ConfigEntity.java b/rights-entity/src/main/java/com/cyjd/rights/entity/ConfigEntity.java index 59bda65..8f9235a 100644 --- a/rights-entity/src/main/java/com/cyjd/rights/entity/ConfigEntity.java +++ b/rights-entity/src/main/java/com/cyjd/rights/entity/ConfigEntity.java @@ -15,7 +15,7 @@ public class ConfigEntity { @TableId(value = "id", type = IdType.AUTO) private Integer id; /** - * 配置名字 hj(核减数配置) + * 配置名字 hj(核减数配置) account(使用的阿里账号) */ private String configName; /** diff --git a/rights-entity/src/main/java/com/cyjd/rights/enums/AliPayEnum.java b/rights-entity/src/main/java/com/cyjd/rights/enums/AliPayEnum.java new file mode 100644 index 0000000..1dec723 --- /dev/null +++ b/rights-entity/src/main/java/com/cyjd/rights/enums/AliPayEnum.java @@ -0,0 +1,45 @@ +package com.cyjd.rights.enums; + +import com.alipay.api.CertAlipayRequest; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + + +public enum AliPayEnum { + CJYD1("cyjd1","2021003135690045"),CJYD2("cyjd2","2021004109660018"); + + + private String accountName; + + private String appId; + + public String getAccountName() { + return accountName; + } + + public void setAccountName(String accountName) { + this.accountName = accountName; + } + + public String getAppId() { + return appId; + } + + + public void setAppId(String appId) { + this.appId = appId; + } + + AliPayEnum(String accountName, String appId) { + this.accountName = accountName; + this.appId = appId; + } + + public static AliPayEnum getMessageEnum(String appId) { + return Arrays.stream(AliPayEnum.values()).filter(x -> x.appId.equals(appId)).findFirst().orElse(null); + } + + +} diff --git a/rights-interface/src/main/java/com/cyjd/rights/business/service/AliAccountService.java b/rights-interface/src/main/java/com/cyjd/rights/business/service/AliAccountService.java new file mode 100644 index 0000000..8570fb6 --- /dev/null +++ b/rights-interface/src/main/java/com/cyjd/rights/business/service/AliAccountService.java @@ -0,0 +1,9 @@ +package com.cyjd.rights.business.service; + +import com.alipay.api.CertAlipayRequest; +import com.baomidou.mybatisplus.extension.service.IService; +import com.cyjd.rights.entity.AliAccountEntity; + +public interface AliAccountService extends IService { + CertAlipayRequest init(String aliPayAccountName); +} diff --git a/rights-interface/src/main/java/com/cyjd/rights/business/service/AliPayService.java b/rights-interface/src/main/java/com/cyjd/rights/business/service/AliPayService.java index a29bee1..2ba8e02 100644 --- a/rights-interface/src/main/java/com/cyjd/rights/business/service/AliPayService.java +++ b/rights-interface/src/main/java/com/cyjd/rights/business/service/AliPayService.java @@ -1,6 +1,7 @@ package com.cyjd.rights.business.service; +import com.alipay.api.CertAlipayRequest; import com.alipay.api.response.AlipayTradeCancelResponse; import com.alipay.api.response.AlipayTradePayResponse; import com.alipay.api.response.AlipayUserAgreementExecutionplanModifyResponse; @@ -20,43 +21,49 @@ public interface AliPayService { * 签约 * @return */ - String signUp(AliPayUserPageSignReq aliPayUserPageSignReq); + String signUp(AliPayUserPageSignReq aliPayUserPageSignReq,String accountName); /** * 查询签约结果 * @param aliPayQueryPageSignReq * @return */ - public boolean querySign(AliPayQueryPageSignReq aliPayQueryPageSignReq); + public boolean querySign(AliPayQueryPageSignReq aliPayQueryPageSignReq,String accountName); /** * 根据签约协议号,发起主动扣款 + * * @param inOrderByAgreementReq + * @param certAlipayRequest * @return */ - public AlipayTradePayResponse aliPayTradePayByAgreement(AliPayInOrderByAgreementReq inOrderByAgreementReq, AliPaySigningOrderEntity aliPaySigningOrderEntity); + public AlipayTradePayResponse aliPayTradePayByAgreement(AliPayInOrderByAgreementReq inOrderByAgreementReq, AliPaySigningOrderEntity aliPaySigningOrderEntity,CertAlipayRequest certAlipayRequest); /** * 根据商户订单号/支付宝交易号查询 支付状态 + * * @param aliPayTradeQueryReq + * @param accountName * @return */ - boolean queryOrder(AliPayTradeQueryReq aliPayTradeQueryReq); + boolean queryOrder(AliPayTradeQueryReq aliPayTradeQueryReq,String accountName); /** * 交易撤销 * @param tradeCancelReq * @return */ - AlipayTradeCancelResponse aliPayTradeCancel(AliPayTradeCancelReq tradeCancelReq); + AlipayTradeCancelResponse aliPayTradeCancel(AliPayTradeCancelReq tradeCancelReq,String accountName); /** * 变更签约 * @param modifyPlanReq * @return */ - public AlipayUserAgreementExecutionplanModifyResponse aliPayModifyPlan(AliPayModifyPlanReq modifyPlanReq); + public AlipayUserAgreementExecutionplanModifyResponse aliPayModifyPlan(AliPayModifyPlanReq modifyPlanReq,String accountName); /** * 解除签约 * @return */ - public AlipayUserAgreementUnsignResponse aliPayUnSign(AliPayUnSignReq aliPayUnSignReq); + public AlipayUserAgreementUnsignResponse aliPayUnSign(AliPayUnSignReq aliPayUnSignReq,String accountName); + + CertAlipayRequest init(String aliPayAccountName); } diff --git a/rights-server/src/main/java/com/cyjd/rights/business/mapper/AliAccountMapper.java b/rights-server/src/main/java/com/cyjd/rights/business/mapper/AliAccountMapper.java new file mode 100644 index 0000000..19828b7 --- /dev/null +++ b/rights-server/src/main/java/com/cyjd/rights/business/mapper/AliAccountMapper.java @@ -0,0 +1,13 @@ +package com.cyjd.rights.business.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.cyjd.rights.dto.AliPayInOrderDto; +import com.cyjd.rights.entity.AliAccountEntity; +import com.cyjd.rights.entity.AliPayOrderEntity; +import com.cyjd.rights.vo.AliPayOrderVo; + +import java.util.List; + +public interface AliAccountMapper extends BaseMapper { + +} diff --git a/rights-server/src/main/java/com/cyjd/rights/business/service/impl/AliAccountServiceImpl.java b/rights-server/src/main/java/com/cyjd/rights/business/service/impl/AliAccountServiceImpl.java new file mode 100644 index 0000000..8e2ed81 --- /dev/null +++ b/rights-server/src/main/java/com/cyjd/rights/business/service/impl/AliAccountServiceImpl.java @@ -0,0 +1,47 @@ +package com.cyjd.rights.business.service.impl; + +import com.alipay.api.AlipayConstants; +import com.alipay.api.CertAlipayRequest; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.cyjd.rights.business.mapper.AliAccountMapper; +import com.cyjd.rights.business.service.AliAccountService; +import com.cyjd.rights.business.service.ConfigService; +import com.cyjd.rights.constant.AliPayConstant; +import com.cyjd.rights.entity.AliAccountEntity; +import com.cyjd.rights.entity.ConfigEntity; +import lombok.extern.java.Log; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +@Log +public class AliAccountServiceImpl extends ServiceImpl implements AliAccountService { + @Autowired + private AliAccountService aliAccountService; + @Autowired + private ConfigService configService; + @Override + public CertAlipayRequest init(String aliPayAccountName) { + + //获取账号的详细信息 + AliAccountEntity aliAccount = aliAccountService.getOne(new QueryWrapper().eq("ali_account_name", aliPayAccountName)); + CertAlipayRequest certAlipayRequest = new CertAlipayRequest(); + //设置文件地址 +// if (isSkipSign) { +// aliPayProperties.setCertPath("D:\\daima\\hy\\ringback-q\\02Ypcl\\01Code\\01Plantform\\Server\\vrbt-client-controller\\src\\main\\resources\\config\\"); +// } else { +// aliPayProperties.setCertPath("/home/ypcl/server-client/config/"); +// } + certAlipayRequest.setServerUrl(AliPayConstant.serverUrl); + certAlipayRequest.setAppId(aliAccount.getAppId()); + certAlipayRequest.setPrivateKey(aliAccount.getPrivateKey()); + certAlipayRequest.setFormat(AlipayConstants.FORMAT_JSON); + certAlipayRequest.setCharset(AlipayConstants.CHARSET_UTF8); + certAlipayRequest.setSignType(AlipayConstants.SIGN_TYPE_RSA2); + certAlipayRequest.setCertPath(aliAccount.getCertAddress() + "appCertPublicKey_" + aliAccount.getAppId() + ".crt"); + certAlipayRequest.setAlipayPublicCertPath(aliAccount.getCertAddress() + "alipayCertPublicKey_RSA2.crt"); + certAlipayRequest.setRootCertPath(aliAccount.getCertAddress() + "alipayRootCert.crt"); + return certAlipayRequest; + } +} diff --git a/rights-server/src/main/java/com/cyjd/rights/business/service/impl/AliPayOrderServiceImpl.java b/rights-server/src/main/java/com/cyjd/rights/business/service/impl/AliPayOrderServiceImpl.java index 24e0526..9084cec 100644 --- a/rights-server/src/main/java/com/cyjd/rights/business/service/impl/AliPayOrderServiceImpl.java +++ b/rights-server/src/main/java/com/cyjd/rights/business/service/impl/AliPayOrderServiceImpl.java @@ -33,8 +33,8 @@ public class AliPayOrderServiceImpl extends ServiceImpl().ge("order_time", endStringTime).le("order_time", beginStringTime).eq("mobile",mobile).eq("status",1)); if (orderCount<=0){ return true; diff --git a/rights-server/src/main/java/com/cyjd/rights/business/service/impl/AliPayServiceImpl.java b/rights-server/src/main/java/com/cyjd/rights/business/service/impl/AliPayServiceImpl.java index 9aa9d19..c908953 100644 --- a/rights-server/src/main/java/com/cyjd/rights/business/service/impl/AliPayServiceImpl.java +++ b/rights-server/src/main/java/com/cyjd/rights/business/service/impl/AliPayServiceImpl.java @@ -3,10 +3,13 @@ package com.cyjd.rights.business.service.impl; import com.alipay.api.*; import com.alipay.api.request.*; import com.alipay.api.response.*; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.cyjd.rights.beans.AliPayProperties; +import com.cyjd.rights.business.service.AliAccountService; import com.cyjd.rights.business.service.AliPayOrderService; import com.cyjd.rights.business.service.AliPayService; import com.cyjd.rights.constant.AliPayConstant; +import com.cyjd.rights.entity.AliAccountEntity; import com.cyjd.rights.entity.AliPayOrderEntity; import com.cyjd.rights.entity.AliPaySigningOrderEntity; import com.cyjd.rights.utils.AlipayRequestBuilderUtil; @@ -14,11 +17,9 @@ import com.cyjd.rights.vo.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.util.Assert; -import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.Objects; @@ -45,36 +46,17 @@ public class AliPayServiceImpl implements AliPayService { @Autowired private AliPayOrderService aliPayOrderService; - private CertAlipayRequest certAlipayRequest; + @Autowired + private AliAccountService aliAccountService; - @PostConstruct - public void init() { - CertAlipayRequest certAlipayRequest = new CertAlipayRequest(); - //设置文件地址 -// if (isSkipSign){ -// aliPayProperties.setCertPath("D:\\daima\\hy\\ringback-q\\02Ypcl\\01Code\\01Plantform\\Server\\vrbt-client-controller\\src\\main\\resources\\config\\"); -// }else { -// aliPayProperties.setCertPath("/home/ypcl/server-client/config/"); -// } - certAlipayRequest.setServerUrl(AliPayConstant.serverUrl); - certAlipayRequest.setAppId(aliPayProperties.getAppId()); - certAlipayRequest.setPrivateKey(aliPayProperties.getPrivateKey()); - certAlipayRequest.setFormat(AlipayConstants.FORMAT_JSON); - certAlipayRequest.setCharset(AlipayConstants.CHARSET_UTF8); - certAlipayRequest.setSignType(AlipayConstants.SIGN_TYPE_RSA2); - certAlipayRequest.setCertPath(aliPayProperties.getCertPath() + "appCertPublicKey_" + aliPayProperties.getAppId() + ".crt"); - certAlipayRequest.setAlipayPublicCertPath(aliPayProperties.getCertPath() + "alipayCertPublicKey_RSA2.crt"); - certAlipayRequest.setRootCertPath(aliPayProperties.getCertPath() + "alipayRootCert.crt"); - this.certAlipayRequest = certAlipayRequest; - } /* * 签约 */ @Override - public String signUp(AliPayUserPageSignReq aliPayUserPageSignReq) { + public String signUp(AliPayUserPageSignReq aliPayUserPageSignReq, String accountName) { Assert.isTrue(StringUtils.isNotBlank(aliPayUserPageSignReq.getExternalAgreementNo()), "商户签约号不能为空"); Assert.isTrue(Objects.nonNull(aliPayUserPageSignReq.getPeriodRuleParams()), "周期管控规则不能为空"); AliPayUserPageSignReq.PeriodRuleParams periodRuleParams = aliPayUserPageSignReq.getPeriodRuleParams(); @@ -83,7 +65,7 @@ public class AliPayServiceImpl implements AliPayService { Assert.isTrue(StringUtils.isNotBlank(periodRuleParams.getSingleAmount()), "单次扣款最大金额不能为空"); try { - + CertAlipayRequest certAlipayRequest = init(accountName); AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest); AlipayUserAgreementPageSignRequest request = alipayRequestBuilderUtil.buildAlipayUserAgreementPageSignRequest(aliPayUserPageSignReq); @@ -119,7 +101,8 @@ public class AliPayServiceImpl implements AliPayService { * 查询签约状态 */ @Override - public boolean querySign(AliPayQueryPageSignReq aliPayQueryPageSignReq) { + public boolean querySign(AliPayQueryPageSignReq aliPayQueryPageSignReq,String accountName) { + CertAlipayRequest certAlipayRequest = init(accountName); Assert.isTrue(StringUtils.isNotBlank(aliPayQueryPageSignReq.getExternalAgreementNo()), "商户签约号不能为空"); try { AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest); @@ -147,7 +130,7 @@ public class AliPayServiceImpl implements AliPayService { * 扣款 */ @Override - public AlipayTradePayResponse aliPayTradePayByAgreement(AliPayInOrderByAgreementReq inOrderByAgreementReq, AliPaySigningOrderEntity aliPaySigningOrderEntity) { + public AlipayTradePayResponse aliPayTradePayByAgreement(AliPayInOrderByAgreementReq inOrderByAgreementReq, AliPaySigningOrderEntity aliPaySigningOrderEntity, CertAlipayRequest certAlipayRequest) { System.out.println("=========================================走到这里了=========================================="); Assert.isTrue(StringUtils.isNotBlank(inOrderByAgreementReq.getOutTradeNo()), "订单号不能为空"); Assert.isTrue(StringUtils.isNotBlank(inOrderByAgreementReq.getTotalAmount()), "本次扣款金额不能为空"); @@ -174,6 +157,7 @@ public class AliPayServiceImpl implements AliPayService { aliPayOrderEntity.setSignCode(inOrderByAgreementReq.getAuthCode()); //System.out.println(aliPaySigningOrderEntity.getOtherOrderId()+"======================"); aliPayOrderEntity.setOtherOrderId(aliPaySigningOrderEntity.getOtherOrderId()); + aliPayOrderEntity.setAliAccountName(aliPaySigningOrderEntity.getAliAccountName()); if (response.isSuccess()) { aliPayOrderEntity.setStatus(2); //最终结果要看代扣回调,这个返回值可能被篡改 log.info("支付宝用户签约号{}:周期扣款,主动扣费成功", inOrderByAgreementReq.getAuthCode()); @@ -194,9 +178,10 @@ public class AliPayServiceImpl implements AliPayService { * 查询支付状态 */ @Override - public boolean queryOrder(AliPayTradeQueryReq aliPayTradeQueryReq) { + public boolean queryOrder(AliPayTradeQueryReq aliPayTradeQueryReq, String accountName) { Assert.isTrue(!((StringUtils.isBlank(aliPayTradeQueryReq.getTradeNo()) && StringUtils.isBlank(aliPayTradeQueryReq.getOutTradeNo()))), "支付宝交易号,和商户订单号不能同时为空!"); try { + CertAlipayRequest certAlipayRequest = init(accountName); AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest); AlipayTradeQueryRequest alipayTradeQueryRequest = alipayRequestBuilderUtil.buildAlipayTradeQueryRequest(aliPayTradeQueryReq); log.info("=========================="); @@ -213,9 +198,10 @@ public class AliPayServiceImpl implements AliPayService { * 交易撤销 */ @Override - public AlipayTradeCancelResponse aliPayTradeCancel(AliPayTradeCancelReq tradeCancelReq) { + public AlipayTradeCancelResponse aliPayTradeCancel(AliPayTradeCancelReq tradeCancelReq,String accountName) { Assert.isTrue(!((StringUtils.isBlank(tradeCancelReq.getTradeNo()) && StringUtils.isBlank(tradeCancelReq.getOutTradeNo()))), "支付宝交易号,和商户订单号不能同时为空!"); try { + CertAlipayRequest certAlipayRequest = init(accountName); AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest); AlipayTradeCancelRequest request = alipayRequestBuilderUtil.buildAlipayTradeCancelRequest(tradeCancelReq); //log.info("支付宝统一收单撤销接口调用:request{}", request.getBizContent()); @@ -231,11 +217,12 @@ public class AliPayServiceImpl implements AliPayService { * 变更签约 */ @Override - public AlipayUserAgreementExecutionplanModifyResponse aliPayModifyPlan(AliPayModifyPlanReq modifyPlanReq) { + public AlipayUserAgreementExecutionplanModifyResponse aliPayModifyPlan(AliPayModifyPlanReq modifyPlanReq,String accountName) { Assert.isTrue(StringUtils.isNotBlank(modifyPlanReq.getAliAgreementNo()), "支付宝签约号必填!"); Assert.isTrue(StringUtils.isNotBlank(modifyPlanReq.getDeductTime()), "下一次扣款时间必填!"); String agreementNo = modifyPlanReq.getAliAgreementNo(); try { + CertAlipayRequest certAlipayRequest = init(accountName); AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest); AlipayUserAgreementExecutionplanModifyRequest request = alipayRequestBuilderUtil.buildAlipayUserAgreementExecutionplanModifyRequest(modifyPlanReq); //log.info("用户签约号{}:周期扣款-修改协议执行计划入参:{}", agreementNo, request.getBizContent()); @@ -257,9 +244,10 @@ public class AliPayServiceImpl implements AliPayService { * 解除签约 */ @Override - public AlipayUserAgreementUnsignResponse aliPayUnSign(AliPayUnSignReq aliPayUnSignReq) { + public AlipayUserAgreementUnsignResponse aliPayUnSign(AliPayUnSignReq aliPayUnSignReq, String accountName) { Assert.isTrue(StringUtils.isNotBlank(aliPayUnSignReq.getExternalAgreementNo()), "签约号必填!"); try { + CertAlipayRequest certAlipayRequest = init(accountName); AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest); AlipayUserAgreementUnsignRequest request = alipayRequestBuilderUtil.buildAlipayUserAgreementUnsignRequest(aliPayUnSignReq); //log.info("签约号{}:周期扣款-解除签约入参:{}", aliPayUnSignReq.getExternalAgreementNo(), request.getBizContent()); @@ -277,7 +265,29 @@ public class AliPayServiceImpl implements AliPayService { return null; } + @Override + public CertAlipayRequest init(String aliPayAccountName) { + //获取账号的详细信息 + AliAccountEntity aliAccount = aliAccountService.getOne(new QueryWrapper().eq("ali_account_name", aliPayAccountName)); + CertAlipayRequest certAlipayRequest = new CertAlipayRequest(); + //设置文件地址 +// if (isSkipSign) { +// aliPayProperties.setCertPath("D:\\daima\\hy\\ringback-q\\02Ypcl\\01Code\\01Plantform\\Server\\vrbt-client-controller\\src\\main\\resources\\config\\"); +// } else { +// aliPayProperties.setCertPath("/home/ypcl/server-client/config/"); +// } + certAlipayRequest.setServerUrl(AliPayConstant.serverUrl); + certAlipayRequest.setAppId(aliAccount.getAppId()); + certAlipayRequest.setPrivateKey(aliAccount.getPrivateKey()); + certAlipayRequest.setFormat(AlipayConstants.FORMAT_JSON); + certAlipayRequest.setCharset(AlipayConstants.CHARSET_UTF8); + certAlipayRequest.setSignType(AlipayConstants.SIGN_TYPE_RSA2); + certAlipayRequest.setCertPath(aliAccount.getCertAddress() + "appCertPublicKey_" + aliAccount.getAppId() + ".crt"); + certAlipayRequest.setAlipayPublicCertPath(aliAccount.getCertAddress() + "alipayCertPublicKey_RSA2.crt"); + certAlipayRequest.setRootCertPath(aliAccount.getCertAddress() + "alipayRootCert.crt"); + return certAlipayRequest; + } }