diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/controller/order/OrderController.java b/cereshop-app/src/main/java/com/shop/cereshop/app/controller/order/OrderController.java index d2d39ae..dca7ba1 100644 --- a/cereshop-app/src/main/java/com/shop/cereshop/app/controller/order/OrderController.java +++ b/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.WXPayUtil; 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.order.CereShopOrderService; 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.WxPayEnum; 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.common.Page; import com.shop.cereshop.commons.domain.dict.CerePlatformDict; @@ -77,6 +79,9 @@ public class OrderController { @Value("${weixin.key}") private String key; + @Autowired + private CereBusinessAlipayService businessAlipayService; + /** * 结算查询 * @param param / @@ -534,15 +539,15 @@ public class OrderController { * @param request * @throws Exception */ - @PostMapping("alipay/rolBack") + @PostMapping("alipay/rolBack/{businessId}") @ResponseBody - public String alipayNotify(HttpServletRequest request) { + public String alipayNotify(@PathVariable String businessId, HttpServletRequest request) { log.info("进入支付宝小程序支付回调"); Map< String , String > params = PayUtil.getAlipayResultParams(request); log.info("支付宝小程序回调信息:"+params); - + CereBusinessAlipay businessAlipay = businessAlipayService.getByBusinessId(Long.valueOf(businessId)); 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()); if(StringEnum.ALI_PAY_SUCCESS.getCode().equals(tradeStatus) || StringEnum.ALI_PAY_FINISHED.getCode().equals(tradeStatus)){ String refundFee = params.get("refund_fee"); @@ -598,14 +603,14 @@ public class OrderController { * @param request * @throws Exception */ - @PostMapping("alipayRefund/rolBack") + @PostMapping("alipayRefund/rolBack/{businessId}") @Deprecated - public String alipayRefundNotify(HttpServletRequest request) throws Exception { + public String alipayRefundNotify(@PathVariable String businessId, HttpServletRequest request) throws Exception { log.info("进入支付宝退款回调"); Map params = PayUtil.getAlipayResultParams(request); 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"); log.info("支付宝退款回调out_trade_no="+orderNo); //截取订单编号 diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/alipay/service/impl/AliPayServiceImpl.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/alipay/service/impl/AliPayServiceImpl.java index 234c656..9e07ebc 100644 --- a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/alipay/service/impl/AliPayServiceImpl.java +++ b/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); //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.create. AlipayTradeCreateRequest request = new AlipayTradeCreateRequest(); - request.setNotifyUrl(AlipayConfig.APP_NOTIFY_URL); + request.setNotifyUrl(AlipayConfig.APP_NOTIFY_URL + "/" + businessId); //SDK已经封装掉了公共参数,这里只需要传入业务参数。 /*request.setBizContent("{" + "\"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); AlipayTradeRefundRequest request = new AlipayTradeRefundRequest(); - request.setNotifyUrl(AlipayConfig.REFUND_NOTIFY_URL); + request.setNotifyUrl(AlipayConfig.REFUND_NOTIFY_URL + "/" + businessId); AlipayTradeRefundApplyModel model = new AlipayTradeRefundApplyModel(); model.setTradeNo(transactionId); model.setRefundAmount(refund.toString()); diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/alipay/service/impl/HuabeiPayServiceImpl.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/alipay/service/impl/HuabeiPayServiceImpl.java index 42eae91..bca573a 100644 --- a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/alipay/service/impl/HuabeiPayServiceImpl.java +++ b/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.AlipayTradeRefundResponse; 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.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; @@ -34,13 +38,18 @@ import java.util.Map; @Slf4j(topic = "HuabeiPayServiceImpl") public class HuabeiPayServiceImpl implements HuabeiPayService { + @Autowired + private CereBusinessAlipayService businessAlipayService; + @Override public Map 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); @@ -82,8 +91,9 @@ public class HuabeiPayServiceImpl implements HuabeiPayService { @Override public Map orderRefund(String outTradeNo, String transactionId, String outRefundNo, BigDecimal total, BigDecimal refund) throws CoBusinessException, Exception { Map 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(); request.setNotifyUrl(AlipayConfig.REFUND_NOTIFY_URL); AlipayTradeRefundApplyModel model = new AlipayTradeRefundApplyModel(); @@ -115,7 +125,9 @@ public class HuabeiPayServiceImpl implements HuabeiPayService { @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 + "\"," + diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/service/balipay/CereBusinessAlipayService.java b/cereshop-app/src/main/java/com/shop/cereshop/app/service/balipay/CereBusinessAlipayService.java index 085fc0f..0a922d0 100644 --- a/cereshop-app/src/main/java/com/shop/cereshop/app/service/balipay/CereBusinessAlipayService.java +++ b/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; - CereBusinessAlipay getByBusinessId(Long businessId) throws CoBusinessException; + CereBusinessAlipay getByBusinessId(Long businessId); } diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/service/balipay/impl/CereBusinessAlipayServiceImpl.java b/cereshop-app/src/main/java/com/shop/cereshop/app/service/balipay/impl/CereBusinessAlipayServiceImpl.java index 075b8c2..67709f7 100644 --- a/cereshop-app/src/main/java/com/shop/cereshop/app/service/balipay/impl/CereBusinessAlipayServiceImpl.java +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/service/balipay/impl/CereBusinessAlipayServiceImpl.java @@ -34,7 +34,7 @@ public class CereBusinessAlipayServiceImpl implements CereBusinessAlipayService } @Override - public CereBusinessAlipay getByBusinessId(Long businessId) throws CoBusinessException { + public CereBusinessAlipay getByBusinessId(Long businessId) { return cereBusinessAlipayDao.getByBusinessId(businessId); } } diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/service/buyer/impl/CereBuyerUserServiceImpl.java b/cereshop-app/src/main/java/com/shop/cereshop/app/service/buyer/impl/CereBuyerUserServiceImpl.java index 576f441..20624f6 100644 --- a/cereshop-app/src/main/java/com/shop/cereshop/app/service/buyer/impl/CereBuyerUserServiceImpl.java +++ b/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.service.activity.CereBuyerCouponService; 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.bwxpay.CereBusinessWxpayService; 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.CreditOptTypeEnum; 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.CereBuyerUser; import com.shop.cereshop.commons.domain.bwxpay.CereBusinessWxpay; @@ -185,6 +187,9 @@ public class CereBuyerUserServiceImpl implements CereBuyerUserService { @Autowired private CereBusinessWxpayService businessWxpayService; + @Autowired + private CereBusinessAlipayService businessAlipayService; + @Override public CereBuyerUser findByToken(String token) { Long buyerUserId = userRedisService.getBuyerUserIdByToken(token); @@ -270,7 +275,8 @@ public class CereBuyerUserServiceImpl implements CereBuyerUserService { public BuyerUser alipayLogin(LoginParam param) throws CoBusinessException { BuyerUser user=null; 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())) { 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()) { try { //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()); if ("10000".equals(obj.getString("code"))) { phone = obj.getString("mobile"); diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/service/product/impl/CereShopProductServiceImpl.java b/cereshop-app/src/main/java/com/shop/cereshop/app/service/product/impl/CereShopProductServiceImpl.java index 3a5335e..e19002e 100644 --- a/cereshop-app/src/main/java/com/shop/cereshop/app/service/product/impl/CereShopProductServiceImpl.java +++ b/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.redis.service.api.StringRedisService; 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.buyer.CereBuyerCommentLikeService; 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.IntegerEnum; 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.buyer.CereBuyerCommentLike; import com.shop.cereshop.commons.domain.buyer.CereBuyerUser; @@ -244,6 +246,9 @@ public class CereShopProductServiceImpl implements CereShopProductService { @Autowired 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; CereBusinessWxpay businessWxpay = businessWxpayService.getByBusinessId(Long.valueOf(user.getProject())); 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) { e.printStackTrace(); } @@ -1417,7 +1423,8 @@ public class CereShopProductServiceImpl implements CereShopProductService { CereBusinessWxpay businessWxpay = businessWxpayService.getByBusinessId(Long.valueOf(user.getProject())); 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(); result.setHeadImage(shareHeadUrl); result.setName(shareName); @@ -1597,7 +1604,7 @@ public class CereShopProductServiceImpl implements CereShopProductService { 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; String result = null; if (env == 1 || env == 2) { @@ -1605,7 +1612,7 @@ public class CereShopProductServiceImpl implements CereShopProductService { } else if (env == 3) { qrCode = QRCodeUtil.createImage(goodsUrl + itemUrlSuffix, null, true); } 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 = qrCode.getSubimage(102, 134, 1336, 1336); } @@ -1632,7 +1639,7 @@ public class CereShopProductServiceImpl implements CereShopProductService { */ private String genPoster(int env, String itemPicUrl, String shareHeadUrl, 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 height = 1052; 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); } else if (env == 4) { 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 = qrCode.getSubimage(102, 134, 1336, 1336); } diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/service/shop/impl/CerePlatformShopServiceImpl.java b/cereshop-app/src/main/java/com/shop/cereshop/app/service/shop/impl/CerePlatformShopServiceImpl.java index 5b4a733..81f3aa4 100644 --- a/cereshop-app/src/main/java/com/shop/cereshop/app/service/shop/impl/CerePlatformShopServiceImpl.java +++ b/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.param.shop.ShopParam; 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.bwxpay.CereBusinessWxpayService; 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.constant.CoReturnFormat; 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.bwxpay.CereBusinessWxpay; import com.shop.cereshop.commons.domain.collect.CereBuyerCollect; @@ -92,6 +94,9 @@ public class CerePlatformShopServiceImpl implements CerePlatformShopService { @Autowired private CereBusinessWxpayService businessWxpayService; + @Autowired + private CereBusinessAlipayService businessAlipayService; + /** * 店铺页面前缀 */ @@ -419,7 +424,9 @@ public class CerePlatformShopServiceImpl implements CerePlatformShopService { } CereBusinessWxpay businessWxpay = businessWxpayService.getByBusinessId(Long.valueOf(user.getProject())); 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) { e.printStackTrace(); } @@ -440,7 +447,7 @@ public class CerePlatformShopServiceImpl implements CerePlatformShopService { */ private String genPoster(int env, Integer type, Long shopId, String shareHeadUrl, String shareName, String shopBrief, String invitationCode, List productList, - String accessToken, Long distributorId) throws Exception { + String accessToken, Long distributorId, String appId, String privateKey, String publicKey) throws Exception { int width = 640; int height = 1220; 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"; 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 = qrCode.getSubimage(102, 134, 1336, 1336); } diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/utils/AlipayUtil.java b/cereshop-app/src/main/java/com/shop/cereshop/app/utils/AlipayUtil.java index 63efd4f..137b5b6 100644 --- a/cereshop-app/src/main/java/com/shop/cereshop/app/utils/AlipayUtil.java +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/utils/AlipayUtil.java @@ -25,8 +25,8 @@ import org.springframework.stereotype.Component; @Component 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(); request.setCode(authCode);//这个就是第一步获取的auth_code request.setGrantType("authorization_code");//这个固定值,参考https://docs.open.alipay.com/api_9/alipay.system.oauth.token @@ -45,8 +45,8 @@ public class AlipayUtil { 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(); AlipayOpenAppQrcodeCreateModel model = new AlipayOpenAppQrcodeCreateModel(); model.setUrlParam(url); diff --git a/cereshop-business/src/main/java/com/shop/cereshop/business/controller/ActivitySignController.java b/cereshop-business/src/main/java/com/shop/cereshop/business/controller/ActivitySignController.java index b8c44b0..2e0d51e 100644 --- a/cereshop-business/src/main/java/com/shop/cereshop/business/controller/ActivitySignController.java +++ b/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.order.Product; 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.PaymentKit; 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.StringEnum; 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.common.Page; import com.shop.cereshop.commons.domain.shop.CereShopGroup; @@ -66,6 +68,9 @@ public class ActivitySignController { @Value("${weixin.key}") private String key; + @Autowired + private CereBusinessAlipayService businessAlipayService; + /** * 营销活动管理查询 * @param param @@ -144,15 +149,16 @@ public class ActivitySignController { } /** - * 保证金微信扫码支付回调 + * 保证金支付宝扫码支付回调 * @param request * @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("进入支付宝保证金支付回调"); Map 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()); if(StringEnum.ALI_PAY_SUCCESS.getCode().equals(tradeStatus) || StringEnum.ALI_PAY_FINISHED.getCode().equals(tradeStatus)){ String orderNo = params.get("out_trade_no"); diff --git a/cereshop-commons/src/main/java/com/shop/cereshop/commons/utils/PayUtil.java b/cereshop-commons/src/main/java/com/shop/cereshop/commons/utils/PayUtil.java index cc8490d..5d953b3 100644 --- a/cereshop-commons/src/main/java/com/shop/cereshop/commons/utils/PayUtil.java +++ b/cereshop-commons/src/main/java/com/shop/cereshop/commons/utils/PayUtil.java @@ -69,9 +69,9 @@ public class PayUtil { * @return * @throws AlipayApiException */ - public static boolean signAlipayVerified(Map params) throws AlipayApiException { + public static boolean signAlipayVerified(String publicKey, Map params) throws AlipayApiException { // 调用SDK验证签名 - return AlipaySignature.rsaCheckV1(params, AlipayConfig.ALIPAY_PUBLIC_KEY, + return AlipaySignature.rsaCheckV1(params, publicKey, AlipayConfig.CHARSET, AlipayConfig.SIGNTYPE); } @@ -79,7 +79,7 @@ public class PayUtil { * 解密支付宝的数据 * @return */ - public static JSONObject decryptedData(String response) throws Exception { + public static JSONObject decryptedData(String publicKey, String decryptKey, String response) throws Exception { //1. 获取验签和解密所需要的参数 Map openapiResult = JSON.parseObject(response, new TypeReference>() { @@ -99,7 +99,7 @@ public class PayUtil { signContent = "\"" + signContent + "\""; } 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) { //验签异常, 日志 } @@ -112,7 +112,7 @@ public class PayUtil { String plainData = null; if (isDataEncrypted) { try { - plainData = AlipayEncrypt.decryptContent(content, encryptType, AlipayConfig.DECRYPT_KEY, AlipayConfig.CHARSET); + plainData = AlipayEncrypt.decryptContent(content, encryptType, decryptKey, AlipayConfig.CHARSET); } catch (AlipayApiException e) { e.printStackTrace(); //解密异常, 记录日志