2 Commits

  1. 12
      cereshop-admin/src/main/java/com/shop/cereshop/admin/pay/alipay/service/impl/AliPayServiceImpl.java
  2. 2
      cereshop-admin/src/main/java/com/shop/cereshop/admin/pay/weixin/service/impl/WxPayServiceImpl.java
  3. 20
      cereshop-app/src/main/java/com/shop/cereshop/app/dao/balipay/CereBusinessAlipayDao.java
  4. 25
      cereshop-app/src/main/java/com/shop/cereshop/app/pay/alipay/service/impl/AliPayServiceImpl.java
  5. 11
      cereshop-app/src/main/java/com/shop/cereshop/app/pay/weixin/service/impl/WxPayServiceImpl.java
  6. 19
      cereshop-app/src/main/java/com/shop/cereshop/app/service/balipay/CereBusinessAlipayService.java
  7. 40
      cereshop-app/src/main/java/com/shop/cereshop/app/service/balipay/impl/CereBusinessAlipayServiceImpl.java
  8. 18
      cereshop-app/src/main/resources/mybatis/mapper/ballipay/CereBusinessAlipayDAO.xml
  9. 20
      cereshop-business/src/main/java/com/shop/cereshop/business/dao/balipay/CereBusinessAlipayDao.java
  10. 4
      cereshop-business/src/main/java/com/shop/cereshop/business/param/activity/ActivitySignSaveParam.java
  11. 6
      cereshop-business/src/main/java/com/shop/cereshop/business/pay/PayService.java
  12. 26
      cereshop-business/src/main/java/com/shop/cereshop/business/pay/alipay/service/impl/AliPayServiceImpl.java
  13. 4
      cereshop-business/src/main/java/com/shop/cereshop/business/pay/alipay/service/impl/HuabeiPayServiceImpl.java
  14. 19
      cereshop-business/src/main/java/com/shop/cereshop/business/pay/balipay/CereBusinessAlipayService.java
  15. 40
      cereshop-business/src/main/java/com/shop/cereshop/business/pay/balipay/impl/CereBusinessAlipayServiceImpl.java
  16. 4
      cereshop-business/src/main/java/com/shop/cereshop/business/pay/hnapay/impl/HnaPayServiceImpl.java
  17. 68
      cereshop-business/src/main/java/com/shop/cereshop/business/pay/weixin/service/impl/WxPayServiceImpl.java
  18. 4
      cereshop-business/src/main/java/com/shop/cereshop/business/pay/xs/service/impl/XsPayServiceImpl.java
  19. 2
      cereshop-business/src/main/java/com/shop/cereshop/business/service/activity/impl/CereActivitySignServiceImpl.java
  20. 2
      cereshop-business/src/main/java/com/shop/cereshop/business/service/order/impl/CereShopOrderServiceImpl.java
  21. 18
      cereshop-business/src/main/resources/mybatis/mapper/ballipay/CereBusinessAlipayDAO.xml
  22. 46
      cereshop-commons/src/main/java/com/shop/cereshop/commons/config/AlipayConfig.java
  23. 2
      cereshop-commons/src/main/java/com/shop/cereshop/commons/domain/activity/CereActivitySign.java

12
cereshop-admin/src/main/java/com/shop/cereshop/admin/pay/alipay/service/impl/AliPayServiceImpl.java

@ -11,11 +11,14 @@ import com.alipay.api.domain.AlipayTradeRefundApplyModel;
import com.alipay.api.request.AlipayTradeRefundRequest;
import com.alipay.api.response.AlipayTradeRefundResponse;
import com.shop.cereshop.admin.pay.alipay.service.AliPayService;
import com.shop.cereshop.admin.service.balipay.CereBusinessAlipayService;
import com.shop.cereshop.commons.config.AlipayConfig;
import com.shop.cereshop.commons.constant.CoReturnFormat;
import com.shop.cereshop.commons.constant.WxPayEnum;
import com.shop.cereshop.commons.domain.balipay.CereBusinessAlipay;
import com.shop.cereshop.commons.exception.CoBusinessException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
@ -26,11 +29,15 @@ import java.util.Map;
@Slf4j(topic = "AliPayServiceImpl")
public class AliPayServiceImpl implements AliPayService {
@Autowired
private CereBusinessAlipayService businessAlipayService;
@Override
public Map<String, String> refund(String project, String orderFormId, String outTradeNo, String transactionId, String outRefundNo, BigDecimal total, BigDecimal refund) throws CoBusinessException, Exception {
CereBusinessAlipay businessAlipay = businessAlipayService.getByBusinessId(Long.valueOf(project));
Map<String, String> result = new HashMap<>();
AlipayClient client = new DefaultAlipayClient(AlipayConfig.URL, AlipayConfig.APPID, AlipayConfig.RSA_PRIVATE_KEY, AlipayConfig.FORMAT, AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.SIGNTYPE);
AlipayClient client = new DefaultAlipayClient(AlipayConfig.URL, businessAlipay.getAppId(), businessAlipay.getPrivateKey(), AlipayConfig.FORMAT, AlipayConfig.CHARSET, businessAlipay.getPublicKey(), AlipayConfig.SIGNTYPE);
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
//request.setNotifyUrl(AlipayConfig.REFUND_NOTIFY_URL);
AlipayTradeRefundApplyModel model = new AlipayTradeRefundApplyModel();
@ -53,9 +60,10 @@ public class AliPayServiceImpl implements AliPayService {
@Override
public Map<String, String> refundBond(String project, String transactionId, String outRefundNo, BigDecimal total, BigDecimal refund) throws CoBusinessException, Exception {
CereBusinessAlipay businessAlipay = businessAlipayService.getByBusinessId(Long.valueOf(project));
Map<String, String> result = new HashMap<>();
AlipayClient client = new DefaultAlipayClient(AlipayConfig.URL, AlipayConfig.APPID, AlipayConfig.RSA_PRIVATE_KEY, AlipayConfig.FORMAT, AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.SIGNTYPE);
AlipayClient client = new DefaultAlipayClient(AlipayConfig.URL, businessAlipay.getAppId(), businessAlipay.getPrivateKey(), AlipayConfig.FORMAT, AlipayConfig.CHARSET, businessAlipay.getPublicKey(), AlipayConfig.SIGNTYPE);
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
//request.setNotifyUrl(AlipayConfig.REFUND_NOTIFY_URL);
AlipayTradeRefundApplyModel model = new AlipayTradeRefundApplyModel();

2
cereshop-admin/src/main/java/com/shop/cereshop/admin/pay/weixin/service/impl/WxPayServiceImpl.java

@ -160,7 +160,7 @@ public class WxPayServiceImpl implements WxPayService {
// 退款原因若商户传入会在下发给用户的退款消息中体现退款原因
params.put("refund_desc","退款");
//退款回调
params.put("notify_url", pc_refund_notify_url);
params.put("notify_url", pc_refund_notify_url + "/" + project);
//签名算法
String sign = WXPayUtil.generateSignature(params, businessWxpay.getMchKey());
params.put("sign", sign);

20
cereshop-app/src/main/java/com/shop/cereshop/app/dao/balipay/CereBusinessAlipayDao.java

@ -0,0 +1,20 @@
package com.shop.cereshop.app.dao.balipay;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.shop.cereshop.commons.domain.balipay.CereBusinessAlipay;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* 描述
*
* @author stevenhu
* @version 2025/02/20 11:49
*/
@Mapper
public interface CereBusinessAlipayDao extends BaseMapper<CereBusinessAlipay> {
CereBusinessAlipay getByBusinessId(@Param("businessId") Long businessId);
}

25
cereshop-app/src/main/java/com/shop/cereshop/app/pay/alipay/service/impl/AliPayServiceImpl.java

@ -19,12 +19,16 @@ import com.alipay.api.response.AlipayTradePrecreateResponse;
import com.alipay.api.response.AlipayTradeRefundResponse;
import com.alipay.api.response.AlipayTradeWapPayResponse;
import com.shop.cereshop.app.pay.alipay.service.AliPayService;
import com.shop.cereshop.app.service.balipay.CereBusinessAlipayService;
import com.shop.cereshop.app.utils.ContextUtil;
import com.shop.cereshop.commons.config.AlipayConfig;
import com.shop.cereshop.commons.constant.CoReturnFormat;
import com.shop.cereshop.commons.constant.WxPayEnum;
import com.shop.cereshop.commons.domain.balipay.CereBusinessAlipay;
import com.shop.cereshop.commons.exception.CoBusinessException;
import com.shop.cereshop.commons.utils.RandomStringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
@ -36,6 +40,9 @@ import java.util.UUID;
@Slf4j(topic = "AliPayServiceImpl")
public class AliPayServiceImpl implements AliPayService {
@Autowired
private CereBusinessAlipayService businessAlipayService;
/**
* 支付小程序appid
@ -64,9 +71,9 @@ public class AliPayServiceImpl implements AliPayService {
//设置网关地址
certAlipayRequest.setServerUrl(AlipayConfig.URL);
//设置应用Id
certAlipayRequest.setAppId(AlipayConfig.APPID);
certAlipayRequest.setAppId("appId");
//设置应用私钥
certAlipayRequest.setPrivateKey(AlipayConfig.RSA_PRIVATE_KEY);
certAlipayRequest.setPrivateKey("privateKey");
//设置请求格式固定值json
certAlipayRequest.setFormat(AlipayConfig.FORMAT);
//设置字符集
@ -120,11 +127,14 @@ public class AliPayServiceImpl implements AliPayService {
@Override
public Map<String, String> gotoPay(String orderFormId, BigDecimal money, String openId, String ip, Integer type, Integer huabeiPeriod) throws CoBusinessException, Exception {
String businessId = ContextUtil.getProject();
CereBusinessAlipay businessAlipay = businessAlipayService.getByBusinessId(Long.valueOf(businessId));
String outTradeNo = "";
String subject = "通用下单";
outTradeNo=orderFormId+"-"+ RandomStringUtil.getRandomCode(3,0)+"XCX";
AlipayClient client = new DefaultAlipayClient(AlipayConfig.URL, AlipayConfig.APPID, AlipayConfig.RSA_PRIVATE_KEY, AlipayConfig.FORMAT, AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.SIGNTYPE);
AlipayClient client = new DefaultAlipayClient(AlipayConfig.URL, businessAlipay.getAppId(), businessAlipay.getPrivateKey(), AlipayConfig.FORMAT, AlipayConfig.CHARSET, businessAlipay.getPublicKey(), AlipayConfig.SIGNTYPE);
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称alipay.trade.create.
AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();
request.setNotifyUrl(AlipayConfig.APP_NOTIFY_URL);
@ -163,9 +173,11 @@ public class AliPayServiceImpl implements AliPayService {
@Override
public Map<String, String> orderRefund(String outTradeNo, String transactionId, String outRefundNo, BigDecimal total, BigDecimal refund) throws CoBusinessException, Exception {
String businessId = ContextUtil.getProject();
CereBusinessAlipay businessAlipay = businessAlipayService.getByBusinessId(Long.valueOf(businessId));
Map<String, String> result = new HashMap<>();
AlipayClient client = new DefaultAlipayClient(AlipayConfig.URL, AlipayConfig.APPID, AlipayConfig.RSA_PRIVATE_KEY, AlipayConfig.FORMAT, AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.SIGNTYPE);
AlipayClient client = new DefaultAlipayClient(AlipayConfig.URL, businessAlipay.getAppId(), businessAlipay.getPrivateKey(), AlipayConfig.FORMAT, AlipayConfig.CHARSET, businessAlipay.getPublicKey(), AlipayConfig.SIGNTYPE);
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
request.setNotifyUrl(AlipayConfig.REFUND_NOTIFY_URL);
AlipayTradeRefundApplyModel model = new AlipayTradeRefundApplyModel();
@ -197,7 +209,10 @@ public class AliPayServiceImpl implements AliPayService {
@Override
public String getOrderCollectionCode(String orderFormid, BigDecimal money, String ip, String tradeType) throws CoBusinessException, Exception {
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.URL, AlipayConfig.APPID, AlipayConfig.RSA_PRIVATE_KEY, AlipayConfig.FORMAT, AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.SIGNTYPE);
String businessId = ContextUtil.getProject();
CereBusinessAlipay businessAlipay = businessAlipayService.getByBusinessId(Long.valueOf(businessId));
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.URL, businessAlipay.getAppId(), businessAlipay.getPrivateKey(), AlipayConfig.FORMAT, AlipayConfig.CHARSET, businessAlipay.getPublicKey(), AlipayConfig.SIGNTYPE);
AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
request.setBizContent("{" +
"\"out_trade_no\":\"" + orderFormid + "\"," +

11
cereshop-app/src/main/java/com/shop/cereshop/app/pay/weixin/service/impl/WxPayServiceImpl.java

@ -178,12 +178,13 @@ public class WxPayServiceImpl implements WxPayService {
private Map<String, String> refundWithV3(String transactionId, String outRefundNo,
BigDecimal total, BigDecimal refund) throws Exception {
String businessId = ContextUtil.getProject();
log.info(" orderRefund refundWithV3 {}, {}, {}, {}", transactionId, outRefundNo,
total, refund);
Map<String, Object> params = new HashMap<>();
params.put("transaction_id", transactionId);
params.put("out_refund_no", outRefundNo);
params.put("notify_url", appV3NotifyUrl);
params.put("notify_url", appV3NotifyUrl + "/" + businessId);
params.put("amount", new HashMap<String, Object>(){
{
put("refund", refund.multiply(new BigDecimal(100)).intValue());
@ -230,7 +231,7 @@ public class WxPayServiceImpl implements WxPayService {
// 退款原因若商户传入会在下发给用户的退款消息中体现退款原因
params.put("refund_desc","退款");
//退款回调
params.put("notify_url", order_refund_notifyurl);
params.put("notify_url", order_refund_notifyurl + "/" + businessId);
//签名算法
String sign = WXPayUtil.generateSignature(params, businessWxpay.getMchKey());
params.put("sign", sign);
@ -268,7 +269,7 @@ public class WxPayServiceImpl implements WxPayService {
// 退款原因若商户传入会在下发给用户的退款消息中体现退款原因
params.put("refund_desc","退款");
//退款回调
params.put("notify_url", pc_bond_refund_notify_url);
params.put("notify_url", pc_bond_refund_notify_url + "/" + businessId);
//签名算法
String sign = WXPayUtil.generateSignature(params, businessWxpay.getMchKey());
params.put("sign", sign);
@ -307,7 +308,7 @@ public class WxPayServiceImpl implements WxPayService {
// reqParams.put("spbill_create_ip", "127.0.0.1");
reqParams.put("spbill_create_ip", ip);
//支付回调地址
reqParams.put("notify_url", pc_notify_url);
reqParams.put("notify_url", pc_notify_url + "/" + businessId);
//交易类型
reqParams.put("trade_type", tradeType);
//用户标识
@ -351,7 +352,7 @@ public class WxPayServiceImpl implements WxPayService {
// reqParams.put("spbill_create_ip", "127.0.0.1");
reqParams.put("spbill_create_ip", ip);
//支付回调地址
reqParams.put("notify_url", app_notify_url);
reqParams.put("notify_url", app_notify_url + "/" + businessId);
//交易类型
reqParams.put("trade_type", tradeType);
//用户标识

19
cereshop-app/src/main/java/com/shop/cereshop/app/service/balipay/CereBusinessAlipayService.java

@ -0,0 +1,19 @@
package com.shop.cereshop.app.service.balipay;
import com.shop.cereshop.commons.domain.balipay.CereBusinessAlipay;
import com.shop.cereshop.commons.exception.CoBusinessException;
/**
* 描述
*
* @author stevenhu
* @version 2025/02/20 14:19
*/
public interface CereBusinessAlipayService {
void save(CereBusinessAlipay record) throws CoBusinessException;
void update(CereBusinessAlipay businessAlipay) throws CoBusinessException;
CereBusinessAlipay getByBusinessId(Long businessId) throws CoBusinessException;
}

40
cereshop-app/src/main/java/com/shop/cereshop/app/service/balipay/impl/CereBusinessAlipayServiceImpl.java

@ -0,0 +1,40 @@
package com.shop.cereshop.app.service.balipay.impl;
import com.shop.cereshop.app.dao.balipay.CereBusinessAlipayDao;
import com.shop.cereshop.app.service.balipay.CereBusinessAlipayService;
import com.shop.cereshop.commons.domain.balipay.CereBusinessAlipay;
import com.shop.cereshop.commons.exception.CoBusinessException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
/**
* 描述
*
* @author stevenhu
* @version 2025/02/20 14:21
*/
@Service
public class CereBusinessAlipayServiceImpl implements CereBusinessAlipayService {
@Autowired
private CereBusinessAlipayDao cereBusinessAlipayDao;
@Override
@Transactional(isolation= Isolation.DEFAULT,propagation= Propagation.REQUIRED,rollbackFor = {CoBusinessException.class, Exception.class})
public void save(CereBusinessAlipay record) throws CoBusinessException {
cereBusinessAlipayDao.insert(record);
}
@Override
public void update(CereBusinessAlipay businessAlipay) throws CoBusinessException {
cereBusinessAlipayDao.updateById(businessAlipay);
}
@Override
public CereBusinessAlipay getByBusinessId(Long businessId) throws CoBusinessException {
return cereBusinessAlipayDao.getByBusinessId(businessId);
}
}

18
cereshop-app/src/main/resources/mybatis/mapper/ballipay/CereBusinessAlipayDAO.xml

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.shop.cereshop.app.dao.balipay.CereBusinessAlipayDao">
<resultMap id="BaseResultMap" type="com.shop.cereshop.commons.domain.balipay.CereBusinessAlipay">
<id column="id" jdbcType="BIGINT" property="id"/>
<result column="business_id" jdbcType="BIGINT" property="businessId" />
<result column="app_id" jdbcType="VARCHAR" property="appId" />
<result column="private_key" jdbcType="VARCHAR" property="privateKey" />
<result column="decry_key" jdbcType="VARCHAR" property="decryKey" />
<result column="public_key" jdbcType="VARCHAR" property="publicKey" />
<result column="gateway_url" jdbcType="VARCHAR" property="gatewayUrl" />
</resultMap>
<select id="getByBusinessId" parameterType="java.lang.Object" resultType="com.shop.cereshop.commons.domain.balipay.CereBusinessAlipay">
SELECT * FROM cere_business_alipay where business_id = #{businessId}
</select>
</mapper>

20
cereshop-business/src/main/java/com/shop/cereshop/business/dao/balipay/CereBusinessAlipayDao.java

@ -0,0 +1,20 @@
package com.shop.cereshop.business.dao.balipay;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.shop.cereshop.commons.domain.balipay.CereBusinessAlipay;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* 描述
*
* @author stevenhu
* @version 2025/02/20 11:49
*/
@Mapper
public interface CereBusinessAlipayDao extends BaseMapper<CereBusinessAlipay> {
CereBusinessAlipay getByBusinessId(@Param("businessId") Long businessId);
}

4
cereshop-business/src/main/java/com/shop/cereshop/business/param/activity/ActivitySignSaveParam.java

@ -20,9 +20,9 @@ import java.util.List;
public class ActivitySignSaveParam {
/**
* 关联店铺id
* 关联店铺id(实际为商家id)
*/
@ApiModelProperty(value = "关联店铺id")
@ApiModelProperty(value = "关联店铺id(实际为商家id)")
private Long shopId;
/**

6
cereshop-business/src/main/java/com/shop/cereshop/business/pay/PayService.java

@ -5,7 +5,6 @@
*/
package com.shop.cereshop.business.pay;
import com.shop.cereshop.business.page.shop.Shop;
import com.shop.cereshop.commons.exception.CoBusinessException;
import java.math.BigDecimal;
@ -30,13 +29,14 @@ public interface PayService {
/**
* 生成收款码返回
* @param businessId 商家id
* @param orderFormid 订单编号
* @param money 金额
* @param ip IP地址
* @param tradeType 支付类型
* @throws Exception
*/
String getCollectionCode(String orderFormid, BigDecimal money, String ip, String tradeType) throws CoBusinessException, Exception;
String getCollectionCode(Long businessId, String orderFormid, BigDecimal money, String ip, String tradeType) throws CoBusinessException, Exception;
/**
* 订单取消微信退款
@ -47,5 +47,5 @@ public interface PayService {
* @throws CoBusinessException
* @throws Exception
*/
public Map<String,String> orderRefund(String orderFormId, String outTradeNo, String transactionId,String outRefundNo,BigDecimal total,BigDecimal refund) throws CoBusinessException,Exception;
public Map<String,String> orderRefund(String project, String orderFormId, String outTradeNo, String transactionId,String outRefundNo,BigDecimal total,BigDecimal refund) throws CoBusinessException,Exception;
}

26
cereshop-business/src/main/java/com/shop/cereshop/business/pay/alipay/service/impl/AliPayServiceImpl.java

@ -14,11 +14,13 @@ import com.alipay.api.request.AlipayTradeRefundRequest;
import com.alipay.api.response.AlipayTradePrecreateResponse;
import com.alipay.api.response.AlipayTradeRefundResponse;
import com.shop.cereshop.business.pay.alipay.service.AliPayService;
import com.shop.cereshop.business.pay.balipay.CereBusinessAlipayService;
import com.shop.cereshop.commons.config.AlipayConfig;
import com.shop.cereshop.commons.constant.CoReturnFormat;
import com.shop.cereshop.commons.constant.IntegerEnum;
import com.shop.cereshop.commons.constant.StringEnum;
import com.shop.cereshop.commons.constant.WxPayEnum;
import com.shop.cereshop.commons.domain.balipay.CereBusinessAlipay;
import com.shop.cereshop.commons.domain.order.CereOrderReconciliation;
import com.shop.cereshop.commons.domain.order.CereShopOrder;
import com.shop.cereshop.commons.domain.pay.CerePayLog;
@ -26,6 +28,7 @@ import com.shop.cereshop.commons.exception.CoBusinessException;
import com.shop.cereshop.commons.utils.RandomStringUtil;
import com.shop.cereshop.commons.utils.TimeUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
@ -36,13 +39,17 @@ import java.util.Map;
@Slf4j(topic = "AliPayServiceImpl")
public class AliPayServiceImpl implements AliPayService {
@Autowired
private CereBusinessAlipayService businessAlipayService;
@Override
public Map<String, String> refund(String project, String orderFormId, String outTradeNo, String transactionId, String outRefundNo, BigDecimal total, BigDecimal refund, Long afterId) throws CoBusinessException, Exception {
CereBusinessAlipay businessAlipay = businessAlipayService.getByBusinessId(Long.valueOf(project));
Map<String, String> result = new HashMap<>();
AlipayClient client = new DefaultAlipayClient(AlipayConfig.URL, AlipayConfig.APPID, AlipayConfig.RSA_PRIVATE_KEY, AlipayConfig.FORMAT, AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.SIGNTYPE);
AlipayClient client = new DefaultAlipayClient(AlipayConfig.URL, businessAlipay.getAppId(), businessAlipay.getPrivateKey(), AlipayConfig.FORMAT, AlipayConfig.CHARSET, businessAlipay.getPublicKey(), AlipayConfig.SIGNTYPE);
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
request.setNotifyUrl(AlipayConfig.REFUND_NOTIFY_URL);
request.setNotifyUrl(AlipayConfig.REFUND_NOTIFY_URL + "/" + project );
AlipayTradeRefundApplyModel model = new AlipayTradeRefundApplyModel();
model.setOutTradeNo(outTradeNo);
if (!total.equals(refund)) {
@ -66,10 +73,12 @@ public class AliPayServiceImpl implements AliPayService {
}
@Override
public String getCollectionCode(String orderFormid, BigDecimal money, String ip, String tradeType) throws CoBusinessException, Exception {
AlipayClient client = new DefaultAlipayClient(AlipayConfig.URL, AlipayConfig.APPID, AlipayConfig.RSA_PRIVATE_KEY, AlipayConfig.FORMAT, AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.SIGNTYPE);
public String getCollectionCode(Long businessId, String orderFormid, BigDecimal money, String ip, String tradeType) throws CoBusinessException, Exception {
CereBusinessAlipay businessAlipay = businessAlipayService.getByBusinessId(businessId);
AlipayClient client = new DefaultAlipayClient(AlipayConfig.URL, businessAlipay.getAppId(), businessAlipay.getPrivateKey(), AlipayConfig.FORMAT, AlipayConfig.CHARSET, businessAlipay.getPublicKey(), AlipayConfig.SIGNTYPE);
AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
request.setNotifyUrl(AlipayConfig.BOND_NOTIFY_URL);
request.setNotifyUrl(AlipayConfig.BOND_NOTIFY_URL + "/" + businessId);
AlipayTradePrecreateModel model = new AlipayTradePrecreateModel();
//生成一个新的订单支付编号
String outTradeNo=orderFormid+"-"+ RandomStringUtil.getRandomCode(3,0);
@ -88,12 +97,13 @@ public class AliPayServiceImpl implements AliPayService {
}
@Override
public Map<String, String> orderRefund(String orderFormId, String outTradeNo, String transactionId, String outRefundNo, BigDecimal total, BigDecimal refund) throws CoBusinessException, Exception {
public Map<String, String> orderRefund(String project, String orderFormId, String outTradeNo, String transactionId, String outRefundNo, BigDecimal total, BigDecimal refund) throws CoBusinessException, Exception {
Map<String, String> result = new HashMap<>();
CereBusinessAlipay businessAlipay = businessAlipayService.getByBusinessId(Long.valueOf(project));
AlipayClient client = new DefaultAlipayClient(AlipayConfig.URL, AlipayConfig.APPID, AlipayConfig.RSA_PRIVATE_KEY, AlipayConfig.FORMAT, AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.SIGNTYPE);
AlipayClient client = new DefaultAlipayClient(AlipayConfig.URL, businessAlipay.getAppId(), businessAlipay.getPrivateKey(), AlipayConfig.FORMAT, AlipayConfig.CHARSET, businessAlipay.getPublicKey(), AlipayConfig.SIGNTYPE);
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
request.setNotifyUrl(AlipayConfig.REFUND_NOTIFY_URL);
request.setNotifyUrl(AlipayConfig.REFUND_NOTIFY_URL + "/" + project);
AlipayTradeRefundApplyModel model = new AlipayTradeRefundApplyModel();
model.setTradeNo(transactionId);
model.setRefundAmount(refund.toString());

4
cereshop-business/src/main/java/com/shop/cereshop/business/pay/alipay/service/impl/HuabeiPayServiceImpl.java

@ -60,7 +60,7 @@ public class HuabeiPayServiceImpl implements HuabeiPayService {
}
@Override
public String getCollectionCode(String orderFormid, BigDecimal money, String ip, String tradeType) throws CoBusinessException, Exception {
public String getCollectionCode(Long businessId, String orderFormid, BigDecimal money, String ip, String tradeType) throws CoBusinessException, Exception {
AlipayClient client = new DefaultAlipayClient(AlipayConfig.URL, AlipayConfig.APPID, AlipayConfig.RSA_PRIVATE_KEY, AlipayConfig.FORMAT, AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.SIGNTYPE);
AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
request.setNotifyUrl(AlipayConfig.BOND_NOTIFY_URL);
@ -82,7 +82,7 @@ public class HuabeiPayServiceImpl implements HuabeiPayService {
}
@Override
public Map<String, String> orderRefund(String orderFormId, String outTradeNo, String transactionId, String outRefundNo, BigDecimal total, BigDecimal refund) throws CoBusinessException, Exception {
public Map<String, String> orderRefund(String project, String orderFormId, String outTradeNo, String transactionId, String outRefundNo, BigDecimal total, BigDecimal refund) throws CoBusinessException, Exception {
return null;
}
}

19
cereshop-business/src/main/java/com/shop/cereshop/business/pay/balipay/CereBusinessAlipayService.java

@ -0,0 +1,19 @@
package com.shop.cereshop.business.pay.balipay;
import com.shop.cereshop.commons.domain.balipay.CereBusinessAlipay;
import com.shop.cereshop.commons.exception.CoBusinessException;
/**
* 描述
*
* @author stevenhu
* @version 2025/02/20 14:19
*/
public interface CereBusinessAlipayService {
void save(CereBusinessAlipay record) throws CoBusinessException;
void update(CereBusinessAlipay businessAlipay) throws CoBusinessException;
CereBusinessAlipay getByBusinessId(Long businessId) throws CoBusinessException;
}

40
cereshop-business/src/main/java/com/shop/cereshop/business/pay/balipay/impl/CereBusinessAlipayServiceImpl.java

@ -0,0 +1,40 @@
package com.shop.cereshop.business.pay.balipay.impl;
import com.shop.cereshop.business.dao.balipay.CereBusinessAlipayDao;
import com.shop.cereshop.business.pay.balipay.CereBusinessAlipayService;
import com.shop.cereshop.commons.domain.balipay.CereBusinessAlipay;
import com.shop.cereshop.commons.exception.CoBusinessException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
/**
* 描述
*
* @author stevenhu
* @version 2025/02/20 14:21
*/
@Service
public class CereBusinessAlipayServiceImpl implements CereBusinessAlipayService {
@Autowired
private CereBusinessAlipayDao cereBusinessAlipayDao;
@Override
@Transactional(isolation= Isolation.DEFAULT,propagation= Propagation.REQUIRED,rollbackFor = {CoBusinessException.class, Exception.class})
public void save(CereBusinessAlipay record) throws CoBusinessException {
cereBusinessAlipayDao.insert(record);
}
@Override
public void update(CereBusinessAlipay businessAlipay) throws CoBusinessException {
cereBusinessAlipayDao.updateById(businessAlipay);
}
@Override
public CereBusinessAlipay getByBusinessId(Long businessId) throws CoBusinessException {
return cereBusinessAlipayDao.getByBusinessId(businessId);
}
}

4
cereshop-business/src/main/java/com/shop/cereshop/business/pay/hnapay/impl/HnaPayServiceImpl.java

@ -187,12 +187,12 @@ public class HnaPayServiceImpl implements HnaPayService {
//获取保证金
@Override
public String getCollectionCode(String orderFormid, BigDecimal money, String ip, String tradeType) throws CoBusinessException, Exception {
public String getCollectionCode(Long businessId, String orderFormid, BigDecimal money, String ip, String tradeType) throws CoBusinessException, Exception {
return null;
}
@Override
public Map<String, String> orderRefund(String orderFormId, String outTradeNo, String transactionId, String outRefundNo, BigDecimal total, BigDecimal refund) throws CoBusinessException, Exception {
public Map<String, String> orderRefund(String project, String orderFormId, String outTradeNo, String transactionId, String outRefundNo, BigDecimal total, BigDecimal refund) throws CoBusinessException, Exception {
List<CereShopOrder> orderList = null;
String cereOrderFormId = orderFormId;
String[] split = orderFormId.split("-");

68
cereshop-business/src/main/java/com/shop/cereshop/business/pay/weixin/service/impl/WxPayServiceImpl.java

@ -14,6 +14,7 @@ import com.shop.cereshop.business.pay.weixin.skd.WXPayUtil;
import com.shop.cereshop.business.pay.weixin.skd.WXPayV3Util;
import com.shop.cereshop.business.service.bwxpay.CereBusinessWxpayService;
import com.shop.cereshop.commons.constant.WxPayEnum;
import com.shop.cereshop.commons.domain.bwxpay.CereBusinessWxpay;
import com.shop.cereshop.commons.exception.CoBusinessException;
import com.shop.cereshop.commons.utils.RandomStringUtil;
import lombok.extern.slf4j.Slf4j;
@ -32,32 +33,32 @@ public class WxPayServiceImpl implements WxPayService {
/**
* 支付小程序appid
*/
@Value("${weixin.appid}")
private String appid;
// @Value("${weixin.appid}")
// private String appid;
/**
* 支付APP端的appid
*/
@Value("${weixin.app_appid}")
private String app_appid;
// @Value("${weixin.app_appid}")
// private String app_appid;
/**
* 支付小程序秘钥
*/
@Value("${weixin.secret}")
private String secret;
// @Value("${weixin.secret}")
// private String secret;
/**
* 商户号
*/
@Value("${weixin.mchid}")
private String mch_id;
// @Value("${weixin.mchid}")
// private String mch_id;
/**
* 证书路径
*/
@Value("${weixin.certurl}")
private String cert_url;
// @Value("${weixin.certurl}")
// private String cert_url;
/**
* pc回调地址
@ -89,8 +90,8 @@ public class WxPayServiceImpl implements WxPayService {
/**
* 商户秘钥
*/
@Value("${weixin.key}")
private String key;
// @Value("${weixin.key}")
// private String key;
@Autowired
private WXPayV3Util wxPayV3Util;
@ -102,20 +103,20 @@ public class WxPayServiceImpl implements WxPayService {
public Map<String, String> refund(String project, String orderFormId, String outTradeNo, String transactionId, String outRefundNo, BigDecimal total, BigDecimal refund, Long afterId) throws CoBusinessException, Exception {
//APPV3版本的退款以APPV3开头
if (outRefundNo.startsWith("APPV3")) {
return refundWithV3(transactionId, outRefundNo, total, refund);
return refundWithV3(project, transactionId, outRefundNo, total, refund);
} else {
return refundWithNormal(transactionId, outRefundNo, total, refund);
return refundWithNormal(project, transactionId, outRefundNo, total, refund);
}
}
private Map<String, String> refundWithV3(String transactionId, String outRefundNo,
private Map<String, String> refundWithV3(String project, String transactionId, String outRefundNo,
BigDecimal total, BigDecimal refund) throws Exception {
log.info(" orderRefund refundWithV3 {}, {}, {}, {}", transactionId, outRefundNo,
total, refund);
Map<String, Object> params = new HashMap<>();
params.put("transaction_id", transactionId);
params.put("out_refund_no", outRefundNo);
params.put("notify_url", appV3NotifyUrl);
params.put("notify_url", appV3NotifyUrl + "/" + project);
params.put("amount", new HashMap<String, Object>(){
{
put("refund", refund.multiply(new BigDecimal(100)).intValue());
@ -137,18 +138,19 @@ public class WxPayServiceImpl implements WxPayService {
return result;
}
private Map<String, String> refundWithNormal(String transactionId, String outRefundNo,
private Map<String, String> refundWithNormal(String project, String transactionId, String outRefundNo,
BigDecimal total, BigDecimal refund) throws Exception {
CereBusinessWxpay businessWxpay = cereBusinessWxpayService.getByBusinessId(Long.valueOf(project));
//退款资金来源-可用余额退款
String refundAccount="REFUND_SOURCE_RECHARGE_FUNDS";
Map<String, String> params = new HashMap<>();
if(outRefundNo.contains("APP")){
//APP微信退款
params.put("appid", app_appid);
params.put("appid", businessWxpay.getAppAppId());
} else {
params.put("appid", appid);
params.put("appid", businessWxpay.getAppId());
}
params.put("mch_id",mch_id);
params.put("mch_id",businessWxpay.getMchId());
params.put("nonce_str", System.currentTimeMillis() / 1000 + "");
//商户订单号和微信订单号二选一
// params.put("out_trade_no", wxPayLog.getOutTradeNo());
@ -160,27 +162,28 @@ public class WxPayServiceImpl implements WxPayService {
// 退款原因若商户传入会在下发给用户的退款消息中体现退款原因
params.put("refund_desc","退款");
//退款回调
params.put("notify_url", pc_refund_notify_url);
params.put("notify_url", pc_refund_notify_url + "/" + project);
//签名算法
String sign = WXPayUtil.generateSignature(params,key);
String sign = WXPayUtil.generateSignature(params,businessWxpay.getMchKey());
params.put("sign", sign);
String xml = PaymentKit.toXml(params);
log.info(xml);
String xmlStr = WXPayUtil.doRefund("https://api.mch.weixin.qq.com/secapi/pay/refund", xml, cert_url, mch_id);
String xmlStr = WXPayUtil.doRefund("https://api.mch.weixin.qq.com/secapi/pay/refund", xml, businessWxpay.getCertUrl(), businessWxpay.getMchId());
log.info(xmlStr);
//加入微信支付日志
return PaymentKit.xmlToMap(xmlStr);
}
@Override
public String getCollectionCode(String orderFormid, BigDecimal money, String ip, String tradeType) throws CoBusinessException,Exception {
public String getCollectionCode(Long businessId, String orderFormid, BigDecimal money, String ip, String tradeType) throws CoBusinessException,Exception {
CereBusinessWxpay businessWxpay = cereBusinessWxpayService.getByBusinessId(businessId);
Map<String, String> reqParams = new HashMap<>();
//生成一个新的订单支付编号
String outTradeNo=orderFormid+"-"+ RandomStringUtil.getRandomCode(3,0);
//微信分配的小程序ID
reqParams.put("appid",appid);
reqParams.put("appid",businessWxpay.getAppId());
//微信支付分配的商户号
reqParams.put("mch_id",mch_id);
reqParams.put("mch_id",businessWxpay.getMchId());
//随机字符串
reqParams.put("nonce_str", System.currentTimeMillis() / 1000 + "");
//签名类型
@ -196,13 +199,13 @@ public class WxPayServiceImpl implements WxPayService {
// reqParams.put("spbill_create_ip", "127.0.0.1");
reqParams.put("spbill_create_ip", ip);
//支付回调地址
reqParams.put("notify_url", pc_notify_url);
reqParams.put("notify_url", pc_notify_url + "/" + businessId);
//交易类型
reqParams.put("trade_type", tradeType);
//用户标识
// reqParams.put("openid", openid);
//签名
String sign = WXPayUtil.generateSignature(reqParams,key);
String sign = WXPayUtil.generateSignature(reqParams, businessWxpay.getMchKey());
reqParams.put("sign", sign);
/*
调用支付定义下单API,返回预付单信息 prepay_id
@ -215,7 +218,12 @@ public class WxPayServiceImpl implements WxPayService {
}
@Override
public Map<String, String> orderRefund(String orderFormId, String outTradeNo, String transactionId, String outRefundNo, BigDecimal total, BigDecimal refund) throws CoBusinessException, Exception {
return null;
public Map<String, String> orderRefund(String project, String orderFormId, String outTradeNo, String transactionId, String outRefundNo, BigDecimal total, BigDecimal refund) throws CoBusinessException, Exception {
//APPV3版本的退款以APPV3开头
if (outRefundNo.startsWith("APPV3")) {
return refundWithV3(project, transactionId, outRefundNo, total, refund);
} else {
return refundWithNormal(project, transactionId, outRefundNo, total, refund);
}
}
}

4
cereshop-business/src/main/java/com/shop/cereshop/business/pay/xs/service/impl/XsPayServiceImpl.java

@ -113,7 +113,7 @@ public class XsPayServiceImpl implements XsPayService {
//订单退款
@Override
public Map<String, String> orderRefund(String orderFormId, String outTradeNo, String transactionId, String outRefundNo, BigDecimal total, BigDecimal refund) throws CoBusinessException, Exception {
public Map<String, String> orderRefund(String project, String orderFormId, String outTradeNo, String transactionId, String outRefundNo, BigDecimal total, BigDecimal refund) throws CoBusinessException, Exception {
Map<String, Object> contentMap = build22ContentMap(orderFormId, outRefundNo, outTradeNo, transactionId, refund, XspayConfig.APP_NOTICE_URL);
String respMsg = XsPayUtils.requestByXs(SHARE_REFUND_SER_CODE, contentMap);
if(StrUtil.isNotBlank(respMsg)){
@ -156,7 +156,7 @@ public class XsPayServiceImpl implements XsPayService {
//获取保证金二维码
@Override
public String getCollectionCode(String orderFormid, BigDecimal money, String ip, String tradeType) throws CoBusinessException, Exception {
public String getCollectionCode(Long businessId, String orderFormid, BigDecimal money, String ip, String tradeType) throws CoBusinessException, Exception {
//构建请求参数
Map<String, Object> contentMap = build05ContentMap(orderFormid, money, tradeType, XsPayEnum.PAY_TYPE_QRCODE.getCode(), XspayConfig.BUSINESS_RETURN_URL,
XspayConfig.BUSINESS_NOTICE_URL);

2
cereshop-business/src/main/java/com/shop/cereshop/business/service/activity/impl/CereActivitySignServiceImpl.java

@ -338,7 +338,7 @@ public class CereActivitySignServiceImpl implements CereActivitySignService {
formid="XSZKBZJ-"+cereActivitySign.getSignId();
}
String code_url = PayFactory.getPayService(bondPaymentMode).getCollectionCode(formid, param.getBondMoney(), ip, WxPayEnum.PAY_TYPE_NATIVE.getCode());
String code_url = PayFactory.getPayService(bondPaymentMode).getCollectionCode(param.getShopId(), formid, param.getBondMoney(), ip, WxPayEnum.PAY_TYPE_NATIVE.getCode());
if(!EmptyUtils.isEmpty(code_url)){
//生成收款二维码图片
Map<EncodeHintType, Object> hints = new HashMap<>();

2
cereshop-business/src/main/java/com/shop/cereshop/business/service/order/impl/CereShopOrderServiceImpl.java

@ -382,7 +382,7 @@ public class CereShopOrderServiceImpl implements CereShopOrderService {
//微信支付没通,暂时直接处理业务
// handleRefundTestWxLog(order.getOrderFormid(),refund.getTransactionId(),refund.getOutTradeNo());
PayService payService = PayFactory.getPayService(refund.getPaymentMode());
Map<String, String> resultMap = payService.orderRefund(refund.getOrderFormid(), refund.getOutTradeNo(), refund.getTransactionId(), refund.getOutRefundNo(), refund.getTotalFee(), refund.getTotalFee());
Map<String, String> resultMap = payService.orderRefund(refund.getProject(), refund.getOrderFormid(), refund.getOutTradeNo(), refund.getTransactionId(), refund.getOutRefundNo(), refund.getTotalFee(), refund.getTotalFee());
if(!EmptyUtils.isEmpty(resultMap)){
if(resultMap.get("return_msg").equals(WxPayEnum.REFUND_SUCCESS.getCode())&&
resultMap.get("return_code").equals(WxPayEnum.REFUND_OK.getCode())){

18
cereshop-business/src/main/resources/mybatis/mapper/ballipay/CereBusinessAlipayDAO.xml

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.shop.cereshop.business.dao.balipay.CereBusinessAlipayDao">
<resultMap id="BaseResultMap" type="com.shop.cereshop.commons.domain.balipay.CereBusinessAlipay">
<id column="id" jdbcType="BIGINT" property="id"/>
<result column="business_id" jdbcType="BIGINT" property="businessId" />
<result column="app_id" jdbcType="VARCHAR" property="appId" />
<result column="private_key" jdbcType="VARCHAR" property="privateKey" />
<result column="decry_key" jdbcType="VARCHAR" property="decryKey" />
<result column="public_key" jdbcType="VARCHAR" property="publicKey" />
<result column="gateway_url" jdbcType="VARCHAR" property="gatewayUrl" />
</resultMap>
<select id="getByBusinessId" parameterType="java.lang.Object" resultType="com.shop.cereshop.commons.domain.balipay.CereBusinessAlipay">
SELECT * FROM cere_business_alipay where business_id = #{businessId}
</select>
</mapper>

46
cereshop-commons/src/main/java/com/shop/cereshop/commons/config/AlipayConfig.java

@ -16,16 +16,16 @@ import java.util.List;
public class AlipayConfig {
// 应用appid
public static String APPID;
//public static String APPID;
// 应用私钥
public static String RSA_PRIVATE_KEY;
//public static String RSA_PRIVATE_KEY;
// 接口内容解密key
public static String DECRYPT_KEY;
//public static String DECRYPT_KEY;
// 支付宝公钥
public static String ALIPAY_PUBLIC_KEY;
//public static String ALIPAY_PUBLIC_KEY;
// 页面跳转同步通知页面路径 需http://或者https://格式的完整路径不能加?id=123这类自定义参数必须外网可以正常访问 商户可以自定义同步跳转地址
public static String REDIRECT_URL;
@ -45,25 +45,25 @@ public class AlipayConfig {
// 花呗手续费比例列表 3期 6期 12期
public static List<Double> HUABEI_FEERATE_LIST;
@Value("${alipay.appid}")
public void setAppId(String appId) {
this.APPID = appId;
}
@Value("${alipay.rsa_private_key}")
public void setRsaPrivateKey(String rsaPrivateKey) {
this.RSA_PRIVATE_KEY = rsaPrivateKey;
}
@Value("${alipay.decrypt_key}")
public void setDecryptKey(String decryptKey) {
this.DECRYPT_KEY = decryptKey;
}
@Value("${alipay.alipay_public_key}")
public void setAlipayPublicKey(String alipayPublicKey) {
this.ALIPAY_PUBLIC_KEY = alipayPublicKey;
}
// @Value("${alipay.appid}")
// public void setAppId(String appId) {
// this.APPID = appId;
// }
// @Value("${alipay.rsa_private_key}")
// public void setRsaPrivateKey(String rsaPrivateKey) {
// this.RSA_PRIVATE_KEY = rsaPrivateKey;
// }
// @Value("${alipay.decrypt_key}")
// public void setDecryptKey(String decryptKey) {
// this.DECRYPT_KEY = decryptKey;
// }
// @Value("${alipay.alipay_public_key}")
// public void setAlipayPublicKey(String alipayPublicKey) {
// this.ALIPAY_PUBLIC_KEY = alipayPublicKey;
// }
@Value("${alipay.redirect_url}")
public void setRedirectUrl(String redirectUrl) {

2
cereshop-commons/src/main/java/com/shop/cereshop/commons/domain/activity/CereActivitySign.java

@ -30,7 +30,7 @@ public class CereActivitySign implements Serializable {
private String signCode;
/**
* 关联店铺id
* 关联店铺id(实际为商家id)
*/
private Long shopId;

Loading…
Cancel
Save