Browse Source

商家端支付宝支付业务逻辑新增动态获取商家微信支付配置信息处理

multiwx
dy-hu 4 months ago
parent
commit
4b044bf322
  1. 21
      cereshop-app/src/main/java/com/shop/cereshop/app/controller/order/OrderController.java
  2. 4
      cereshop-app/src/main/java/com/shop/cereshop/app/pay/alipay/service/impl/AliPayServiceImpl.java
  3. 20
      cereshop-app/src/main/java/com/shop/cereshop/app/pay/alipay/service/impl/HuabeiPayServiceImpl.java
  4. 2
      cereshop-app/src/main/java/com/shop/cereshop/app/service/balipay/CereBusinessAlipayService.java
  5. 2
      cereshop-app/src/main/java/com/shop/cereshop/app/service/balipay/impl/CereBusinessAlipayServiceImpl.java
  6. 11
      cereshop-app/src/main/java/com/shop/cereshop/app/service/buyer/impl/CereBuyerUserServiceImpl.java
  7. 19
      cereshop-app/src/main/java/com/shop/cereshop/app/service/product/impl/CereShopProductServiceImpl.java
  8. 13
      cereshop-app/src/main/java/com/shop/cereshop/app/service/shop/impl/CerePlatformShopServiceImpl.java
  9. 8
      cereshop-app/src/main/java/com/shop/cereshop/app/utils/AlipayUtil.java
  10. 14
      cereshop-business/src/main/java/com/shop/cereshop/business/controller/ActivitySignController.java
  11. 10
      cereshop-commons/src/main/java/com/shop/cereshop/commons/utils/PayUtil.java

21
cereshop-app/src/main/java/com/shop/cereshop/app/controller/order/OrderController.java

@ -20,6 +20,7 @@ import com.shop.cereshop.app.pay.weixin.skd.HttpKit;
import com.shop.cereshop.app.pay.weixin.skd.PaymentKit; import com.shop.cereshop.app.pay.weixin.skd.PaymentKit;
import com.shop.cereshop.app.pay.weixin.skd.WXPayUtil; import com.shop.cereshop.app.pay.weixin.skd.WXPayUtil;
import com.shop.cereshop.app.pay.weixin.skd.WXPayV3Util; import com.shop.cereshop.app.pay.weixin.skd.WXPayV3Util;
import com.shop.cereshop.app.service.balipay.CereBusinessAlipayService;
import com.shop.cereshop.app.service.dict.CerePlatformDictService; import com.shop.cereshop.app.service.dict.CerePlatformDictService;
import com.shop.cereshop.app.service.order.CereShopOrderService; import com.shop.cereshop.app.service.order.CereShopOrderService;
import com.shop.cereshop.commons.config.AlipayConfig; import com.shop.cereshop.commons.config.AlipayConfig;
@ -27,6 +28,7 @@ import com.shop.cereshop.commons.constant.CoReturnFormat;
import com.shop.cereshop.commons.constant.StringEnum; import com.shop.cereshop.commons.constant.StringEnum;
import com.shop.cereshop.commons.constant.WxPayEnum; import com.shop.cereshop.commons.constant.WxPayEnum;
import com.shop.cereshop.commons.domain.after.CereAfterDilever; import com.shop.cereshop.commons.domain.after.CereAfterDilever;
import com.shop.cereshop.commons.domain.balipay.CereBusinessAlipay;
import com.shop.cereshop.commons.domain.buyer.CereBuyerUser; import com.shop.cereshop.commons.domain.buyer.CereBuyerUser;
import com.shop.cereshop.commons.domain.common.Page; import com.shop.cereshop.commons.domain.common.Page;
import com.shop.cereshop.commons.domain.dict.CerePlatformDict; import com.shop.cereshop.commons.domain.dict.CerePlatformDict;
@ -77,6 +79,9 @@ public class OrderController {
@Value("${weixin.key}") @Value("${weixin.key}")
private String key; private String key;
@Autowired
private CereBusinessAlipayService businessAlipayService;
/** /**
* 结算查询 * 结算查询
* @param param / * @param param /
@ -534,15 +539,15 @@ public class OrderController {
* @param request * @param request
* @throws Exception * @throws Exception
*/ */
@PostMapping("alipay/rolBack")
@PostMapping("alipay/rolBack/{businessId}")
@ResponseBody @ResponseBody
public String alipayNotify(HttpServletRequest request) {
public String alipayNotify(@PathVariable String businessId, HttpServletRequest request) {
log.info("进入支付宝小程序支付回调"); log.info("进入支付宝小程序支付回调");
Map< String , String > params = PayUtil.getAlipayResultParams(request); Map< String , String > params = PayUtil.getAlipayResultParams(request);
log.info("支付宝小程序回调信息:"+params); log.info("支付宝小程序回调信息:"+params);
CereBusinessAlipay businessAlipay = businessAlipayService.getByBusinessId(Long.valueOf(businessId));
try { try {
if(!EmptyUtils.isEmpty(params) && PayUtil.signAlipayVerified(params)){
if(!EmptyUtils.isEmpty(params) && PayUtil.signAlipayVerified(businessAlipay.getPublicKey(),params)){
String tradeStatus = params.get(StringEnum.ALI_PAY_TRADE_STATUS.getCode()); String tradeStatus = params.get(StringEnum.ALI_PAY_TRADE_STATUS.getCode());
if(StringEnum.ALI_PAY_SUCCESS.getCode().equals(tradeStatus) || StringEnum.ALI_PAY_FINISHED.getCode().equals(tradeStatus)){ if(StringEnum.ALI_PAY_SUCCESS.getCode().equals(tradeStatus) || StringEnum.ALI_PAY_FINISHED.getCode().equals(tradeStatus)){
String refundFee = params.get("refund_fee"); String refundFee = params.get("refund_fee");
@ -598,14 +603,14 @@ public class OrderController {
* @param request * @param request
* @throws Exception * @throws Exception
*/ */
@PostMapping("alipayRefund/rolBack")
@PostMapping("alipayRefund/rolBack/{businessId}")
@Deprecated @Deprecated
public String alipayRefundNotify(HttpServletRequest request) throws Exception {
public String alipayRefundNotify(@PathVariable String businessId, HttpServletRequest request) throws Exception {
log.info("进入支付宝退款回调"); log.info("进入支付宝退款回调");
Map<String, String> params = PayUtil.getAlipayResultParams(request); Map<String, String> params = PayUtil.getAlipayResultParams(request);
log.info("支付宝退款回调信息:"+params); log.info("支付宝退款回调信息:"+params);
if(!EmptyUtils.isEmpty(params) && PayUtil.signAlipayVerified(params)){
CereBusinessAlipay businessAlipay = businessAlipayService.getByBusinessId(Long.valueOf(businessId));
if(!EmptyUtils.isEmpty(params) && PayUtil.signAlipayVerified(businessAlipay.getPublicKey(), params)){
String orderNo = params.get("out_trade_no"); String orderNo = params.get("out_trade_no");
log.info("支付宝退款回调out_trade_no="+orderNo); log.info("支付宝退款回调out_trade_no="+orderNo);
//截取订单编号 //截取订单编号

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

@ -137,7 +137,7 @@ public class AliPayServiceImpl implements AliPayService {
AlipayClient client = new DefaultAlipayClient(AlipayConfig.URL, businessAlipay.getAppId(), businessAlipay.getPrivateKey(), AlipayConfig.FORMAT, AlipayConfig.CHARSET, businessAlipay.getPublicKey(), 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. //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称alipay.trade.create.
AlipayTradeCreateRequest request = new AlipayTradeCreateRequest(); AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();
request.setNotifyUrl(AlipayConfig.APP_NOTIFY_URL);
request.setNotifyUrl(AlipayConfig.APP_NOTIFY_URL + "/" + businessId);
//SDK已经封装掉了公共参数这里只需要传入业务参数 //SDK已经封装掉了公共参数这里只需要传入业务参数
/*request.setBizContent("{" + /*request.setBizContent("{" +
"\"out_trade_no\":\"" + outTradeNo + "\"," +// 可以随机生成订单号String outTradeNo = UUID.randomUUID().toString().replace("-", ""); "\"out_trade_no\":\"" + outTradeNo + "\"," +// 可以随机生成订单号String outTradeNo = UUID.randomUUID().toString().replace("-", "");
@ -179,7 +179,7 @@ public class AliPayServiceImpl implements AliPayService {
AlipayClient client = new DefaultAlipayClient(AlipayConfig.URL, businessAlipay.getAppId(), businessAlipay.getPrivateKey(), AlipayConfig.FORMAT, AlipayConfig.CHARSET, businessAlipay.getPublicKey(), AlipayConfig.SIGNTYPE); AlipayClient client = new DefaultAlipayClient(AlipayConfig.URL, businessAlipay.getAppId(), businessAlipay.getPrivateKey(), AlipayConfig.FORMAT, AlipayConfig.CHARSET, businessAlipay.getPublicKey(), AlipayConfig.SIGNTYPE);
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest(); AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
request.setNotifyUrl(AlipayConfig.REFUND_NOTIFY_URL);
request.setNotifyUrl(AlipayConfig.REFUND_NOTIFY_URL + "/" + businessId);
AlipayTradeRefundApplyModel model = new AlipayTradeRefundApplyModel(); AlipayTradeRefundApplyModel model = new AlipayTradeRefundApplyModel();
model.setTradeNo(transactionId); model.setTradeNo(transactionId);
model.setRefundAmount(refund.toString()); model.setRefundAmount(refund.toString());

20
cereshop-app/src/main/java/com/shop/cereshop/app/pay/alipay/service/impl/HuabeiPayServiceImpl.java

@ -18,12 +18,16 @@ import com.alipay.api.response.AlipayTradeCreateResponse;
import com.alipay.api.response.AlipayTradePrecreateResponse; import com.alipay.api.response.AlipayTradePrecreateResponse;
import com.alipay.api.response.AlipayTradeRefundResponse; import com.alipay.api.response.AlipayTradeRefundResponse;
import com.shop.cereshop.app.pay.alipay.service.HuabeiPayService; import com.shop.cereshop.app.pay.alipay.service.HuabeiPayService;
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.config.AlipayConfig;
import com.shop.cereshop.commons.constant.CoReturnFormat; import com.shop.cereshop.commons.constant.CoReturnFormat;
import com.shop.cereshop.commons.constant.WxPayEnum; 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.exception.CoBusinessException;
import com.shop.cereshop.commons.utils.RandomStringUtil; import com.shop.cereshop.commons.utils.RandomStringUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
@ -34,13 +38,18 @@ import java.util.Map;
@Slf4j(topic = "HuabeiPayServiceImpl") @Slf4j(topic = "HuabeiPayServiceImpl")
public class HuabeiPayServiceImpl implements HuabeiPayService { public class HuabeiPayServiceImpl implements HuabeiPayService {
@Autowired
private CereBusinessAlipayService businessAlipayService;
@Override @Override
public Map<String, String> gotoPay(String orderFormId, BigDecimal money, String openId, String ip, Integer type, Integer huabeiPeriod) throws CoBusinessException, Exception { 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 outTradeNo = "";
String subject = "通用下单"; String subject = "通用下单";
outTradeNo=orderFormId+"-"+ RandomStringUtil.getRandomCode(3,0)+"XCX"; 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. //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称alipay.trade.create.
AlipayTradeCreateRequest request = new AlipayTradeCreateRequest(); AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();
request.setNotifyUrl(AlipayConfig.APP_NOTIFY_URL); request.setNotifyUrl(AlipayConfig.APP_NOTIFY_URL);
@ -82,8 +91,9 @@ public class HuabeiPayServiceImpl implements HuabeiPayService {
@Override @Override
public Map<String, String> orderRefund(String outTradeNo, String transactionId, String outRefundNo, BigDecimal total, BigDecimal refund) throws CoBusinessException, Exception { public Map<String, String> orderRefund(String outTradeNo, String transactionId, String outRefundNo, BigDecimal total, BigDecimal refund) throws CoBusinessException, Exception {
Map<String, String> result = new HashMap<>(); 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);
String businessId = ContextUtil.getProject();
CereBusinessAlipay businessAlipay = businessAlipayService.getByBusinessId(Long.valueOf(businessId));
AlipayClient client = new DefaultAlipayClient(AlipayConfig.URL, businessAlipay.getAppId(), businessAlipay.getPrivateKey(), AlipayConfig.FORMAT, AlipayConfig.CHARSET, businessAlipay.getPublicKey(), AlipayConfig.SIGNTYPE);
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest(); AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
request.setNotifyUrl(AlipayConfig.REFUND_NOTIFY_URL); request.setNotifyUrl(AlipayConfig.REFUND_NOTIFY_URL);
AlipayTradeRefundApplyModel model = new AlipayTradeRefundApplyModel(); AlipayTradeRefundApplyModel model = new AlipayTradeRefundApplyModel();
@ -115,7 +125,9 @@ public class HuabeiPayServiceImpl implements HuabeiPayService {
@Override @Override
public String getOrderCollectionCode(String orderFormid, BigDecimal money, String ip, String tradeType) throws CoBusinessException, Exception { 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(); AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
request.setBizContent("{" + request.setBizContent("{" +
"\"out_trade_no\":\"" + orderFormid + "\"," + "\"out_trade_no\":\"" + orderFormid + "\"," +

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

@ -15,5 +15,5 @@ public interface CereBusinessAlipayService {
void update(CereBusinessAlipay businessAlipay) throws CoBusinessException; void update(CereBusinessAlipay businessAlipay) throws CoBusinessException;
CereBusinessAlipay getByBusinessId(Long businessId) throws CoBusinessException;
CereBusinessAlipay getByBusinessId(Long businessId);
} }

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

@ -34,7 +34,7 @@ public class CereBusinessAlipayServiceImpl implements CereBusinessAlipayService
} }
@Override @Override
public CereBusinessAlipay getByBusinessId(Long businessId) throws CoBusinessException {
public CereBusinessAlipay getByBusinessId(Long businessId) {
return cereBusinessAlipayDao.getByBusinessId(businessId); return cereBusinessAlipayDao.getByBusinessId(businessId);
} }
} }

11
cereshop-app/src/main/java/com/shop/cereshop/app/service/buyer/impl/CereBuyerUserServiceImpl.java

@ -31,6 +31,7 @@ import com.shop.cereshop.app.param.order.OrderGetAllParam;
import com.shop.cereshop.app.redis.service.api.UserRedisService; import com.shop.cereshop.app.redis.service.api.UserRedisService;
import com.shop.cereshop.app.service.activity.CereBuyerCouponService; import com.shop.cereshop.app.service.activity.CereBuyerCouponService;
import com.shop.cereshop.app.service.after.CereOrderAfterService; import com.shop.cereshop.app.service.after.CereOrderAfterService;
import com.shop.cereshop.app.service.balipay.CereBusinessAlipayService;
import com.shop.cereshop.app.service.buyer.*; import com.shop.cereshop.app.service.buyer.*;
import com.shop.cereshop.app.service.bwxpay.CereBusinessWxpayService; import com.shop.cereshop.app.service.bwxpay.CereBusinessWxpayService;
import com.shop.cereshop.app.service.cart.CereShopCartService; import com.shop.cereshop.app.service.cart.CereShopCartService;
@ -54,6 +55,7 @@ import com.shop.cereshop.commons.cache.constants.CacheKeyConstants;
import com.shop.cereshop.commons.constant.CoReturnFormat; import com.shop.cereshop.commons.constant.CoReturnFormat;
import com.shop.cereshop.commons.constant.CreditOptTypeEnum; import com.shop.cereshop.commons.constant.CreditOptTypeEnum;
import com.shop.cereshop.commons.constant.IntegerEnum; import com.shop.cereshop.commons.constant.IntegerEnum;
import com.shop.cereshop.commons.domain.balipay.CereBusinessAlipay;
import com.shop.cereshop.commons.domain.buyer.CereBuyerTrackReport; import com.shop.cereshop.commons.domain.buyer.CereBuyerTrackReport;
import com.shop.cereshop.commons.domain.buyer.CereBuyerUser; import com.shop.cereshop.commons.domain.buyer.CereBuyerUser;
import com.shop.cereshop.commons.domain.bwxpay.CereBusinessWxpay; import com.shop.cereshop.commons.domain.bwxpay.CereBusinessWxpay;
@ -185,6 +187,9 @@ public class CereBuyerUserServiceImpl implements CereBuyerUserService {
@Autowired @Autowired
private CereBusinessWxpayService businessWxpayService; private CereBusinessWxpayService businessWxpayService;
@Autowired
private CereBusinessAlipayService businessAlipayService;
@Override @Override
public CereBuyerUser findByToken(String token) { public CereBuyerUser findByToken(String token) {
Long buyerUserId = userRedisService.getBuyerUserIdByToken(token); Long buyerUserId = userRedisService.getBuyerUserIdByToken(token);
@ -270,7 +275,8 @@ public class CereBuyerUserServiceImpl implements CereBuyerUserService {
public BuyerUser alipayLogin(LoginParam param) throws CoBusinessException { public BuyerUser alipayLogin(LoginParam param) throws CoBusinessException {
BuyerUser user=null; BuyerUser user=null;
String time = TimeUtils.yyMMddHHmmss(); String time = TimeUtils.yyMMddHHmmss();
AlipayUserInfoShareResponse userInfoResponse = AlipayUtil.getBuyerId(param.getCode());
CereBusinessAlipay businessAlipay = businessAlipayService.getByBusinessId(Long.valueOf(ContextUtil.getProject()));
AlipayUserInfoShareResponse userInfoResponse = AlipayUtil.getBuyerId(businessAlipay.getAppId(), businessAlipay.getPrivateKey(), businessAlipay.getPublicKey(), param.getCode());
if (userInfoResponse == null || StringUtils.isBlank(userInfoResponse.getUserId())) { if (userInfoResponse == null || StringUtils.isBlank(userInfoResponse.getUserId())) {
throw new CoBusinessException(CoReturnFormat.ALI_APPLET_AUTH_ERROR); throw new CoBusinessException(CoReturnFormat.ALI_APPLET_AUTH_ERROR);
} }
@ -564,7 +570,8 @@ public class CereBuyerUserServiceImpl implements CereBuyerUserService {
if (StringUtils.isNotBlank(phone) && param.getEncrypted() != null && param.getEncrypted()) { if (StringUtils.isNotBlank(phone) && param.getEncrypted() != null && param.getEncrypted()) {
try { try {
//phone = "15622728105"; //phone = "15622728105";
JSONObject obj = PayUtil.decryptedData(phone);
CereBusinessAlipay businessAlipay = businessAlipayService.getByBusinessId(Long.valueOf(ContextUtil.getProject()));
JSONObject obj = PayUtil.decryptedData(businessAlipay.getPublicKey(), businessAlipay.getDecryKey(), phone);
log.info("decryptedData: " + obj.toJSONString()); log.info("decryptedData: " + obj.toJSONString());
if ("10000".equals(obj.getString("code"))) { if ("10000".equals(obj.getString("code"))) {
phone = obj.getString("mobile"); phone = obj.getString("mobile");

19
cereshop-app/src/main/java/com/shop/cereshop/app/service/product/impl/CereShopProductServiceImpl.java

@ -36,6 +36,7 @@ import com.shop.cereshop.app.param.product.ShareParam;
import com.shop.cereshop.app.param.product.SkuParam; import com.shop.cereshop.app.param.product.SkuParam;
import com.shop.cereshop.app.redis.service.api.StringRedisService; import com.shop.cereshop.app.redis.service.api.StringRedisService;
import com.shop.cereshop.app.service.activity.CerePlatformActivityService; import com.shop.cereshop.app.service.activity.CerePlatformActivityService;
import com.shop.cereshop.app.service.balipay.CereBusinessAlipayService;
import com.shop.cereshop.app.service.business.CereBusinessBuyerUserService; import com.shop.cereshop.app.service.business.CereBusinessBuyerUserService;
import com.shop.cereshop.app.service.buyer.CereBuyerCommentLikeService; import com.shop.cereshop.app.service.buyer.CereBuyerCommentLikeService;
import com.shop.cereshop.app.service.buyer.CereBuyerReceiveService; import com.shop.cereshop.app.service.buyer.CereBuyerReceiveService;
@ -71,6 +72,7 @@ import com.shop.cereshop.commons.cache.product.ProductBo;
import com.shop.cereshop.commons.constant.CoReturnFormat; import com.shop.cereshop.commons.constant.CoReturnFormat;
import com.shop.cereshop.commons.constant.IntegerEnum; import com.shop.cereshop.commons.constant.IntegerEnum;
import com.shop.cereshop.commons.constant.ParamEnum; import com.shop.cereshop.commons.constant.ParamEnum;
import com.shop.cereshop.commons.domain.balipay.CereBusinessAlipay;
import com.shop.cereshop.commons.domain.business.CereBusinessBuyerUser; import com.shop.cereshop.commons.domain.business.CereBusinessBuyerUser;
import com.shop.cereshop.commons.domain.buyer.CereBuyerCommentLike; import com.shop.cereshop.commons.domain.buyer.CereBuyerCommentLike;
import com.shop.cereshop.commons.domain.buyer.CereBuyerUser; import com.shop.cereshop.commons.domain.buyer.CereBuyerUser;
@ -244,6 +246,9 @@ public class CereShopProductServiceImpl implements CereShopProductService {
@Autowired @Autowired
private CereProductClassifyLangInfoService cereProductClassifyLangInfoService; private CereProductClassifyLangInfoService cereProductClassifyLangInfoService;
@Autowired
private CereBusinessAlipayService businessAlipayService;
/** /**
* 商品详情前缀 * 商品详情前缀
*/ */
@ -1181,7 +1186,8 @@ public class CereShopProductServiceImpl implements CereShopProductService {
String itemUrlSuffix = "?shopId="+param.getShopId()+"&productId="+param.getProductId()+"&skuId="+param.getSkuId()+"&salesId="+distributorId; String itemUrlSuffix = "?shopId="+param.getShopId()+"&productId="+param.getProductId()+"&skuId="+param.getSkuId()+"&salesId="+distributorId;
CereBusinessWxpay businessWxpay = businessWxpayService.getByBusinessId(Long.valueOf(user.getProject())); CereBusinessWxpay businessWxpay = businessWxpayService.getByBusinessId(Long.valueOf(user.getProject()));
String accessToken = WechatUtil.getAccessToken(businessWxpay.getAppId(), businessWxpay.getSecret()); String accessToken = WechatUtil.getAccessToken(businessWxpay.getAppId(), businessWxpay.getSecret());
return genPoster(env,itemPicUrl,shareHeadUrl,shareName,itemName,itemPrice,itemUrlSuffix,accessToken);
CereBusinessAlipay businessAlipay = businessAlipayService.getByBusinessId(Long.valueOf(ContextUtil.getProject()));
return genPoster(env,itemPicUrl,shareHeadUrl,shareName,itemName,itemPrice,itemUrlSuffix,accessToken, businessWxpay.getAppId(), businessAlipay.getPrivateKey(), businessAlipay.getPublicKey());
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -1417,7 +1423,8 @@ public class CereShopProductServiceImpl implements CereShopProductService {
CereBusinessWxpay businessWxpay = businessWxpayService.getByBusinessId(Long.valueOf(user.getProject())); CereBusinessWxpay businessWxpay = businessWxpayService.getByBusinessId(Long.valueOf(user.getProject()));
accessToken = WechatUtil.getAccessToken(businessWxpay.getAppId(), businessWxpay.getSecret()); accessToken = WechatUtil.getAccessToken(businessWxpay.getAppId(), businessWxpay.getSecret());
} }
String qrCodeBase64 = genPosterSimple(env,itemUrlSuffix,accessToken);
CereBusinessAlipay businessAlipay = businessAlipayService.getByBusinessId(Long.valueOf(user.getProject()));
String qrCodeBase64 = genPosterSimple(env,itemUrlSuffix,accessToken, businessAlipay.getAppId(), businessAlipay.getPrivateKey(),businessAlipay.getPublicKey());
ShareProduct result = new ShareProduct(); ShareProduct result = new ShareProduct();
result.setHeadImage(shareHeadUrl); result.setHeadImage(shareHeadUrl);
result.setName(shareName); result.setName(shareName);
@ -1597,7 +1604,7 @@ public class CereShopProductServiceImpl implements CereShopProductService {
return parent; return parent;
} }
private String genPosterSimple(int env, String itemUrlSuffix, String accessToken) throws Exception {
private String genPosterSimple(int env, String itemUrlSuffix, String accessToken, String appId, String privateKey, String publicKey) throws Exception {
BufferedImage qrCode = null; BufferedImage qrCode = null;
String result = null; String result = null;
if (env == 1 || env == 2) { if (env == 1 || env == 2) {
@ -1605,7 +1612,7 @@ public class CereShopProductServiceImpl implements CereShopProductService {
} else if (env == 3) { } else if (env == 3) {
qrCode = QRCodeUtil.createImage(goodsUrl + itemUrlSuffix, null, true); qrCode = QRCodeUtil.createImage(goodsUrl + itemUrlSuffix, null, true);
} else if (env == 4) { } else if (env == 4) {
String qrCodeUrl = AlipayUtil.generateQrCode("pages_category_page1/goodsModule/goodsDetails", itemUrlSuffix.substring(1));
String qrCodeUrl = AlipayUtil.generateQrCode("pages_category_page1/goodsModule/goodsDetails", appId, privateKey, publicKey, itemUrlSuffix.substring(1));
qrCode = ImageIO.read(new URL(qrCodeUrl)); qrCode = ImageIO.read(new URL(qrCodeUrl));
qrCode = qrCode.getSubimage(102, 134, 1336, 1336); qrCode = qrCode.getSubimage(102, 134, 1336, 1336);
} }
@ -1632,7 +1639,7 @@ public class CereShopProductServiceImpl implements CereShopProductService {
*/ */
private String genPoster(int env, String itemPicUrl, String shareHeadUrl, private String genPoster(int env, String itemPicUrl, String shareHeadUrl,
String shareName, String itemName, Double itemPrice, String shareName, String itemName, Double itemPrice,
String itemUrlSuffix, String accessToken) throws Exception {
String itemUrlSuffix, String accessToken, String appId, String privateKey, String publicKey) throws Exception {
int width = 640; int width = 640;
int height = 1052; int height = 1052;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
@ -1697,7 +1704,7 @@ public class CereShopProductServiceImpl implements CereShopProductService {
qrCode = QRCodeUtil.createImage(goodsUrl + itemUrlSuffix, null, true); qrCode = QRCodeUtil.createImage(goodsUrl + itemUrlSuffix, null, true);
} else if (env == 4) { } else if (env == 4) {
g2d.drawString("长按识别小程序", 30, baseHeight + 336); g2d.drawString("长按识别小程序", 30, baseHeight + 336);
String qrCodeUrl = AlipayUtil.generateQrCode("pages_category_page1/goodsModule/goodsDetails", itemUrlSuffix.substring(1));
String qrCodeUrl = AlipayUtil.generateQrCode("pages_category_page1/goodsModule/goodsDetails", appId, privateKey, publicKey, itemUrlSuffix.substring(1));
qrCode = ImageIO.read(new URL(qrCodeUrl)); qrCode = ImageIO.read(new URL(qrCodeUrl));
qrCode = qrCode.getSubimage(102, 134, 1336, 1336); qrCode = qrCode.getSubimage(102, 134, 1336, 1336);
} }

13
cereshop-app/src/main/java/com/shop/cereshop/app/service/shop/impl/CerePlatformShopServiceImpl.java

@ -19,6 +19,7 @@ import com.shop.cereshop.app.page.settlement.SettlementShop;
import com.shop.cereshop.app.page.shop.*; import com.shop.cereshop.app.page.shop.*;
import com.shop.cereshop.app.param.shop.ShopParam; import com.shop.cereshop.app.param.shop.ShopParam;
import com.shop.cereshop.app.param.shop.ShopPosterParam; import com.shop.cereshop.app.param.shop.ShopPosterParam;
import com.shop.cereshop.app.service.balipay.CereBusinessAlipayService;
import com.shop.cereshop.app.service.buyer.CereBuyerShopCouponService; import com.shop.cereshop.app.service.buyer.CereBuyerShopCouponService;
import com.shop.cereshop.app.service.bwxpay.CereBusinessWxpayService; import com.shop.cereshop.app.service.bwxpay.CereBusinessWxpayService;
import com.shop.cereshop.app.service.collect.CereBuyerCollectService; import com.shop.cereshop.app.service.collect.CereBuyerCollectService;
@ -31,6 +32,7 @@ import com.shop.cereshop.app.utils.WechatUtil;
import com.shop.cereshop.commons.cache.product.ProductBo; import com.shop.cereshop.commons.cache.product.ProductBo;
import com.shop.cereshop.commons.constant.CoReturnFormat; import com.shop.cereshop.commons.constant.CoReturnFormat;
import com.shop.cereshop.commons.constant.IntegerEnum; import com.shop.cereshop.commons.constant.IntegerEnum;
import com.shop.cereshop.commons.domain.balipay.CereBusinessAlipay;
import com.shop.cereshop.commons.domain.buyer.CereBuyerUser; import com.shop.cereshop.commons.domain.buyer.CereBuyerUser;
import com.shop.cereshop.commons.domain.bwxpay.CereBusinessWxpay; import com.shop.cereshop.commons.domain.bwxpay.CereBusinessWxpay;
import com.shop.cereshop.commons.domain.collect.CereBuyerCollect; import com.shop.cereshop.commons.domain.collect.CereBuyerCollect;
@ -92,6 +94,9 @@ public class CerePlatformShopServiceImpl implements CerePlatformShopService {
@Autowired @Autowired
private CereBusinessWxpayService businessWxpayService; private CereBusinessWxpayService businessWxpayService;
@Autowired
private CereBusinessAlipayService businessAlipayService;
/** /**
* 店铺页面前缀 * 店铺页面前缀
*/ */
@ -419,7 +424,9 @@ public class CerePlatformShopServiceImpl implements CerePlatformShopService {
} }
CereBusinessWxpay businessWxpay = businessWxpayService.getByBusinessId(Long.valueOf(user.getProject())); CereBusinessWxpay businessWxpay = businessWxpayService.getByBusinessId(Long.valueOf(user.getProject()));
String accessToken = WechatUtil.getAccessToken(businessWxpay.getAppId(), businessWxpay.getSecret()); String accessToken = WechatUtil.getAccessToken(businessWxpay.getAppId(), businessWxpay.getSecret());
return genPoster(env,param.getType(),shop.getShopId(),shareHeadUrl,shareName,shop.getShopBrief(),invitationCode,list,accessToken,param.getDistributorId());
CereBusinessAlipay businessAlipay = businessAlipayService.getByBusinessId(Long.valueOf(user.getProject()));
return genPoster(env,param.getType(),shop.getShopId(),shareHeadUrl,shareName,shop.getShopBrief(),invitationCode,list,accessToken,param.getDistributorId(),
businessAlipay.getAppId(), businessAlipay.getPrivateKey(), businessAlipay.getPublicKey());
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -440,7 +447,7 @@ public class CerePlatformShopServiceImpl implements CerePlatformShopService {
*/ */
private String genPoster(int env, Integer type, Long shopId, String shareHeadUrl, String shareName, private String genPoster(int env, Integer type, Long shopId, String shareHeadUrl, String shareName,
String shopBrief, String invitationCode, List<Product> productList, String shopBrief, String invitationCode, List<Product> productList,
String accessToken, Long distributorId) throws Exception {
String accessToken, Long distributorId, String appId, String privateKey, String publicKey) throws Exception {
int width = 640; int width = 640;
int height = 1220; int height = 1220;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
@ -603,7 +610,7 @@ public class CerePlatformShopServiceImpl implements CerePlatformShopService {
url = "pages_category_page1/distributionModule/recruit"; url = "pages_category_page1/distributionModule/recruit";
reqParam = "shopId=" + shopId + "&invitationCode=" + invitationCode; reqParam = "shopId=" + shopId + "&invitationCode=" + invitationCode;
} }
String qrCodeUrl = AlipayUtil.generateQrCode(url, reqParam);
String qrCodeUrl = AlipayUtil.generateQrCode(url, appId, privateKey, publicKey, reqParam);
qrCode = ImageIO.read(new URL(qrCodeUrl)); qrCode = ImageIO.read(new URL(qrCodeUrl));
qrCode = qrCode.getSubimage(102, 134, 1336, 1336); qrCode = qrCode.getSubimage(102, 134, 1336, 1336);
} }

8
cereshop-app/src/main/java/com/shop/cereshop/app/utils/AlipayUtil.java

@ -25,8 +25,8 @@ import org.springframework.stereotype.Component;
@Component @Component
public class AlipayUtil { public class AlipayUtil {
public static AlipayUserInfoShareResponse getBuyerId(String authCode) {
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.URL, AlipayConfig.APPID, AlipayConfig.RSA_PRIVATE_KEY, AlipayConfig.FORMAT, AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.SIGNTYPE);
public static AlipayUserInfoShareResponse getBuyerId(String appId, String privateKey, String publicKey, String authCode) {
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.URL, appId, privateKey, AlipayConfig.FORMAT, AlipayConfig.CHARSET, publicKey, AlipayConfig.SIGNTYPE);
AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest(); AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
request.setCode(authCode);//这个就是第一步获取的auth_code request.setCode(authCode);//这个就是第一步获取的auth_code
request.setGrantType("authorization_code");//这个固定值,参考https://docs.open.alipay.com/api_9/alipay.system.oauth.token request.setGrantType("authorization_code");//这个固定值,参考https://docs.open.alipay.com/api_9/alipay.system.oauth.token
@ -45,8 +45,8 @@ public class AlipayUtil {
return null; return null;
} }
public static String generateQrCode(String url, String queryParam) throws CoBusinessException {
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.URL, AlipayConfig.APPID, AlipayConfig.RSA_PRIVATE_KEY, AlipayConfig.FORMAT, AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.SIGNTYPE);
public static String generateQrCode(String url,String appId, String privateKey, String publicKey, String queryParam) throws CoBusinessException {
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.URL, appId, privateKey, AlipayConfig.FORMAT, AlipayConfig.CHARSET, publicKey, AlipayConfig.SIGNTYPE);
AlipayOpenAppQrcodeCreateRequest request = new AlipayOpenAppQrcodeCreateRequest(); AlipayOpenAppQrcodeCreateRequest request = new AlipayOpenAppQrcodeCreateRequest();
AlipayOpenAppQrcodeCreateModel model = new AlipayOpenAppQrcodeCreateModel(); AlipayOpenAppQrcodeCreateModel model = new AlipayOpenAppQrcodeCreateModel();
model.setUrlParam(url); model.setUrlParam(url);

14
cereshop-business/src/main/java/com/shop/cereshop/business/controller/ActivitySignController.java

@ -13,6 +13,7 @@ import com.shop.cereshop.business.page.activity.ActivitySignDetail;
import com.shop.cereshop.business.page.activity.BondState; import com.shop.cereshop.business.page.activity.BondState;
import com.shop.cereshop.business.page.order.Product; import com.shop.cereshop.business.page.order.Product;
import com.shop.cereshop.business.param.activity.*; import com.shop.cereshop.business.param.activity.*;
import com.shop.cereshop.business.pay.balipay.CereBusinessAlipayService;
import com.shop.cereshop.business.pay.weixin.skd.HttpKit; import com.shop.cereshop.business.pay.weixin.skd.HttpKit;
import com.shop.cereshop.business.pay.weixin.skd.PaymentKit; import com.shop.cereshop.business.pay.weixin.skd.PaymentKit;
import com.shop.cereshop.business.redis.service.api.StringRedisService; import com.shop.cereshop.business.redis.service.api.StringRedisService;
@ -21,6 +22,7 @@ import com.shop.cereshop.business.utils.ContextUtil;
import com.shop.cereshop.commons.constant.IntegerEnum; import com.shop.cereshop.commons.constant.IntegerEnum;
import com.shop.cereshop.commons.constant.StringEnum; import com.shop.cereshop.commons.constant.StringEnum;
import com.shop.cereshop.commons.domain.activity.CereActivitySign; import com.shop.cereshop.commons.domain.activity.CereActivitySign;
import com.shop.cereshop.commons.domain.balipay.CereBusinessAlipay;
import com.shop.cereshop.commons.domain.business.CerePlatformBusinessUser; import com.shop.cereshop.commons.domain.business.CerePlatformBusinessUser;
import com.shop.cereshop.commons.domain.common.Page; import com.shop.cereshop.commons.domain.common.Page;
import com.shop.cereshop.commons.domain.shop.CereShopGroup; import com.shop.cereshop.commons.domain.shop.CereShopGroup;
@ -66,6 +68,9 @@ public class ActivitySignController {
@Value("${weixin.key}") @Value("${weixin.key}")
private String key; private String key;
@Autowired
private CereBusinessAlipayService businessAlipayService;
/** /**
* 营销活动管理查询 * 营销活动管理查询
* @param param * @param param
@ -144,15 +149,16 @@ public class ActivitySignController {
} }
/** /**
* 保证金微信扫码支付回调
* 保证金支付宝扫码支付回调
* @param request * @param request
* @throws Exception * @throws Exception
*/ */
@PostMapping(value={"alipay/rolBack"})
public String alipayProPayNotify(HttpServletRequest request) throws Exception {
@PostMapping(value={"alipay/rolBack/{businessId}"})
public String alipayProPayNotify(@PathVariable String businessId, HttpServletRequest request) throws Exception {
log.info("进入支付宝保证金支付回调"); log.info("进入支付宝保证金支付回调");
Map<String, String> params = PayUtil.getAlipayResultParams(request); Map<String, String> params = PayUtil.getAlipayResultParams(request);
if(!EmptyUtils.isEmpty(params) && PayUtil.signAlipayVerified(params)){
CereBusinessAlipay businessAlipay = businessAlipayService.getByBusinessId(Long.valueOf(businessId));
if(!EmptyUtils.isEmpty(params) && PayUtil.signAlipayVerified(businessAlipay.getPublicKey(), params)){
String tradeStatus = params.get(StringEnum.ALI_PAY_TRADE_STATUS.getCode()); String tradeStatus = params.get(StringEnum.ALI_PAY_TRADE_STATUS.getCode());
if(StringEnum.ALI_PAY_SUCCESS.getCode().equals(tradeStatus) || StringEnum.ALI_PAY_FINISHED.getCode().equals(tradeStatus)){ if(StringEnum.ALI_PAY_SUCCESS.getCode().equals(tradeStatus) || StringEnum.ALI_PAY_FINISHED.getCode().equals(tradeStatus)){
String orderNo = params.get("out_trade_no"); String orderNo = params.get("out_trade_no");

10
cereshop-commons/src/main/java/com/shop/cereshop/commons/utils/PayUtil.java

@ -69,9 +69,9 @@ public class PayUtil {
* @return * @return
* @throws AlipayApiException * @throws AlipayApiException
*/ */
public static boolean signAlipayVerified(Map<String, String> params) throws AlipayApiException {
public static boolean signAlipayVerified(String publicKey, Map<String, String> params) throws AlipayApiException {
// 调用SDK验证签名 // 调用SDK验证签名
return AlipaySignature.rsaCheckV1(params, AlipayConfig.ALIPAY_PUBLIC_KEY,
return AlipaySignature.rsaCheckV1(params, publicKey,
AlipayConfig.CHARSET, AlipayConfig.SIGNTYPE); AlipayConfig.CHARSET, AlipayConfig.SIGNTYPE);
} }
@ -79,7 +79,7 @@ public class PayUtil {
* 解密支付宝的数据 * 解密支付宝的数据
* @return * @return
*/ */
public static JSONObject decryptedData(String response) throws Exception {
public static JSONObject decryptedData(String publicKey, String decryptKey, String response) throws Exception {
//1. 获取验签和解密所需要的参数 //1. 获取验签和解密所需要的参数
Map<String, String> openapiResult = JSON.parseObject(response, Map<String, String> openapiResult = JSON.parseObject(response,
new TypeReference<Map<String, String>>() { new TypeReference<Map<String, String>>() {
@ -99,7 +99,7 @@ public class PayUtil {
signContent = "\"" + signContent + "\""; signContent = "\"" + signContent + "\"";
} }
try { try {
signCheckPass = AlipaySignature.rsaCheck(signContent, sign, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.CHARSET, AlipayConfig.SIGNTYPE);
signCheckPass = AlipaySignature.rsaCheck(signContent, sign, publicKey, AlipayConfig.CHARSET, AlipayConfig.SIGNTYPE);
} catch (AlipayApiException e) { } catch (AlipayApiException e) {
//验签异常, 日志 //验签异常, 日志
} }
@ -112,7 +112,7 @@ public class PayUtil {
String plainData = null; String plainData = null;
if (isDataEncrypted) { if (isDataEncrypted) {
try { try {
plainData = AlipayEncrypt.decryptContent(content, encryptType, AlipayConfig.DECRYPT_KEY, AlipayConfig.CHARSET);
plainData = AlipayEncrypt.decryptContent(content, encryptType, decryptKey, AlipayConfig.CHARSET);
} catch (AlipayApiException e) { } catch (AlipayApiException e) {
e.printStackTrace(); e.printStackTrace();
//解密异常, 记录日志 //解密异常, 记录日志

Loading…
Cancel
Save