From 9808d236e4f7094493697bfede3795cfeb12826c Mon Sep 17 00:00:00 2001 From: wuchunlei Date: Thu, 16 Jan 2025 09:10:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Estripe=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 8 +- .../java/com/peanut/config/ShiroConfig.java | 2 + .../controller/OrderController.java | 26 ++- .../modules/common/dao/PayStripeOrderDao.java | 9 + .../modules/common/entity/PayStripeOrder.java | 37 ++++ .../common/service/PayStripeOrderService.java | 7 + .../impl/PayStripeOrderServiceImpl.java | 13 ++ .../mq/Consumer/OrderCancelConsumer.java | 59 +++++- .../modules/pay/stripe/StripeConfig.java | 133 +++++++++++++ .../modules/pay/stripe/StripeController.java | 181 ++++++++++++++++++ 10 files changed, 462 insertions(+), 13 deletions(-) create mode 100644 src/main/java/com/peanut/modules/common/dao/PayStripeOrderDao.java create mode 100644 src/main/java/com/peanut/modules/common/entity/PayStripeOrder.java create mode 100644 src/main/java/com/peanut/modules/common/service/PayStripeOrderService.java create mode 100644 src/main/java/com/peanut/modules/common/service/impl/PayStripeOrderServiceImpl.java create mode 100644 src/main/java/com/peanut/modules/pay/stripe/StripeConfig.java create mode 100644 src/main/java/com/peanut/modules/pay/stripe/StripeController.java diff --git a/pom.xml b/pom.xml index ce1d5c1..cd0ba79 100644 --- a/pom.xml +++ b/pom.xml @@ -38,7 +38,7 @@ 4.4 2.7.0 2.9.9 - 2.8.5 + 2.10.1 1.2.79 5.7.22 1.18.4 @@ -56,6 +56,12 @@ + + + com.stripe + stripe-java + 28.2.0 + com.github.promeg diff --git a/src/main/java/com/peanut/config/ShiroConfig.java b/src/main/java/com/peanut/config/ShiroConfig.java index 5256f93..8773ed5 100644 --- a/src/main/java/com/peanut/config/ShiroConfig.java +++ b/src/main/java/com/peanut/config/ShiroConfig.java @@ -69,6 +69,8 @@ public class ShiroConfig { filterMap.put("/pay/payNotify","anon"); // 微信回调接口 filterMap.put("/pay/refundNotify","anon"); // 微信退款回调接口 filterMap.put("/pay/paypal/receivePaypalStatus","anon"); // paypal回调接口 + filterMap.put("/pay/stripe/callback","anon"); // stripe回调接口 + filterMap.put("/pay/stripe/transfer","anon"); // stripe中转接口 filterMap.put("/weChat/**","anon"); filterMap.put("/book/baseArea/getAllBaseArea","anon");//登录前获取全部区域 // filterMap.put("/book/bookchaptercontent/**","anon"); diff --git a/src/main/java/com/peanut/modules/bookAbroad/controller/OrderController.java b/src/main/java/com/peanut/modules/bookAbroad/controller/OrderController.java index b3f38d7..1601296 100644 --- a/src/main/java/com/peanut/modules/bookAbroad/controller/OrderController.java +++ b/src/main/java/com/peanut/modules/bookAbroad/controller/OrderController.java @@ -2,10 +2,10 @@ package com.peanut.modules.bookAbroad.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; -import com.github.promeg.pinyinhelper.Pinyin; import com.peanut.common.utils.R; import com.peanut.common.utils.ShiroUtils; import com.peanut.config.Constants; +import com.peanut.config.DelayQueueConfig; import com.peanut.modules.book.service.BuyOrderService; import com.peanut.modules.book.service.TransactionDetailsService; import com.peanut.modules.book.service.UserEbookBuyService; @@ -16,6 +16,8 @@ import com.peanut.modules.common.entity.UserEbookBuyEntity; import com.peanut.modules.common.service.BookService; import com.peanut.modules.common.service.MyUserService; import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.core.MessagePostProcessor; +import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RequestBody; @@ -41,6 +43,8 @@ public class OrderController { private TransactionDetailsService transactionDetailsService; @Autowired private UserEbookBuyService userEbookBuyService; + @Autowired + private RabbitTemplate rabbitTemplate; //海外读书下单 @RequestMapping("/placeOrder") @@ -71,13 +75,6 @@ public class OrderController { } buyOrder.setRealMoney(totalPrice); String bookName = bookEntity.getName(); - char[] cs = bookEntity.getName().toCharArray(); - for (int i = 0; i < cs.length; i++) { - if (Pinyin.isChinese(cs[i])){ - bookName = Pinyin.toPinyin(bookEntity.getName(), " ").toLowerCase(); - break; - } - } buyOrder.setRemark("Purchase the e-book '"+bookName+"'"); buyOrder.setOrderStatus("0"); buyOrder.setOrderType("abroadBook"); @@ -101,9 +98,22 @@ public class OrderController { return R.error(500, "Insufficient Balance!"); } } + rabbitTemplate.convertAndSend( + DelayQueueConfig.ORDER_TO_BE_PAY_EXCHANGE, + DelayQueueConfig.ORDER_TO_BE_PAY_ROUTING_KEY, + buyOrder.getOrderId(), + messagePostProcessor() + ); Map result = new HashMap<>(); result.put("orderSn", buyOrder.getOrderSn()); return R.ok(result); } + private MessagePostProcessor messagePostProcessor() { + return message -> { + //设置有效期30分钟 + message.getMessageProperties().setExpiration(String.valueOf(30 * 60 * 1000)); + return message; + }; + } } diff --git a/src/main/java/com/peanut/modules/common/dao/PayStripeOrderDao.java b/src/main/java/com/peanut/modules/common/dao/PayStripeOrderDao.java new file mode 100644 index 0000000..f264d6c --- /dev/null +++ b/src/main/java/com/peanut/modules/common/dao/PayStripeOrderDao.java @@ -0,0 +1,9 @@ +package com.peanut.modules.common.dao; + +import com.github.yulichang.base.MPJBaseMapper; +import com.peanut.modules.common.entity.PayStripeOrder; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface PayStripeOrderDao extends MPJBaseMapper { +} diff --git a/src/main/java/com/peanut/modules/common/entity/PayStripeOrder.java b/src/main/java/com/peanut/modules/common/entity/PayStripeOrder.java new file mode 100644 index 0000000..fa6eff6 --- /dev/null +++ b/src/main/java/com/peanut/modules/common/entity/PayStripeOrder.java @@ -0,0 +1,37 @@ +package com.peanut.modules.common.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +//paypal支付实体 +@Data +@TableName("pay_stripe_order") +public class PayStripeOrder implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId + private Integer id; + //用户Id + private Integer userId; + //订单Id + private Integer orderId; + //订单编号 + private String orderSn; + //创建订单时间 + private Date createTime; + //创建订单时的sessionId,用于查询订单状态 + private String sessionId; + //(chargeId)支付完成后的回调id,用于退款 + private String stripeId; + //金额 + private String amount; + //付款时间 + private Date payTime; + //回调数据 + private String callbackData; + +} diff --git a/src/main/java/com/peanut/modules/common/service/PayStripeOrderService.java b/src/main/java/com/peanut/modules/common/service/PayStripeOrderService.java new file mode 100644 index 0000000..fa0f62a --- /dev/null +++ b/src/main/java/com/peanut/modules/common/service/PayStripeOrderService.java @@ -0,0 +1,7 @@ +package com.peanut.modules.common.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.peanut.modules.common.entity.PayStripeOrder; + +public interface PayStripeOrderService extends IService { +} diff --git a/src/main/java/com/peanut/modules/common/service/impl/PayStripeOrderServiceImpl.java b/src/main/java/com/peanut/modules/common/service/impl/PayStripeOrderServiceImpl.java new file mode 100644 index 0000000..a60ab8c --- /dev/null +++ b/src/main/java/com/peanut/modules/common/service/impl/PayStripeOrderServiceImpl.java @@ -0,0 +1,13 @@ +package com.peanut.modules.common.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.peanut.modules.common.dao.PayStripeOrderDao; +import com.peanut.modules.common.entity.PayStripeOrder; +import com.peanut.modules.common.service.PayStripeOrderService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Slf4j +@Service("payStripeOrderService") +public class PayStripeOrderServiceImpl extends ServiceImpl implements PayStripeOrderService { +} diff --git a/src/main/java/com/peanut/modules/mq/Consumer/OrderCancelConsumer.java b/src/main/java/com/peanut/modules/mq/Consumer/OrderCancelConsumer.java index 8f5033e..dccfa68 100644 --- a/src/main/java/com/peanut/modules/mq/Consumer/OrderCancelConsumer.java +++ b/src/main/java/com/peanut/modules/mq/Consumer/OrderCancelConsumer.java @@ -3,16 +3,20 @@ package com.peanut.modules.mq.Consumer; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.peanut.config.Constants; import com.peanut.config.DelayQueueConfig; +import com.peanut.modules.book.service.*; import com.peanut.modules.common.dao.BuyOrderProductDao; import com.peanut.modules.common.dao.ShopProductDao; -import com.peanut.modules.common.entity.BuyOrder; -import com.peanut.modules.common.entity.BuyOrderProduct; -import com.peanut.modules.common.entity.ShopProduct; -import com.peanut.modules.book.service.BuyOrderService; +import com.peanut.modules.common.entity.*; import com.peanut.modules.common.service.CouponService; +import com.peanut.modules.common.service.PayStripeOrderService; +import com.peanut.modules.pay.stripe.StripeConfig; +import com.stripe.model.PaymentIntent; +import com.stripe.model.checkout.Session; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.Arrays; +import java.util.Date; import java.util.List; /** @@ -31,6 +35,20 @@ public class OrderCancelConsumer { ShopProductDao shopProductDao; @Autowired CouponService couponService; + @Autowired + private PayStripeOrderService payStripeOrderService; + @Autowired + private StripeConfig stripeConfig; + @Autowired + private UserEbookBuyService userEbookBuyService; + @Autowired + private BookBuyConfigService bookBuyConfigService; + @Autowired + private MyUserService userService; + @Autowired + private TransactionDetailsService transactionDetailsService; + @Autowired + private PayPaymentOrderService payPaymentOrderService; @RabbitListener(queues = DelayQueueConfig.ORDER_CANCEL_DEAD_LETTER_QUEUE) public void orderConsumer(String orderId) { @@ -39,6 +57,39 @@ public class OrderCancelConsumer { return; } if(Constants.ORDER_STATUS_TO_BE_PAID.equals(buyOrder.getOrderStatus())){ + if ("5".equals(buyOrder.getPaymentMethod())){ + //查询订单,是否已完成但未收到回调 + PayStripeOrder payStripeOrder = payStripeOrderService.getOne(new LambdaQueryWrapper() + .eq(PayStripeOrder::getOrderSn,buyOrder.getOrderSn())); + if (payStripeOrder != null) { + Session session = stripeConfig.queryOrderSession(payStripeOrder.getSessionId()); + if (session != null&&"complete".equals(session.getStatus())){ + payStripeOrder.setStripeId(session.getPaymentIntent()); + PaymentIntent intent = stripeConfig.queryOrderIntent(session.getPaymentIntent()); + payStripeOrder.setAmount(intent.getAmount()+""); + payStripeOrder.setPayTime(new Date(intent.getCreated()*1000)); + payStripeOrder.setCallbackData(intent.toString()); + payStripeOrderService.updateById(payStripeOrder); + if ("abroadBook".equals(buyOrder.getOrderType())){ + userEbookBuyService.addBookForUser(buyOrder.getUserId(), Arrays.asList(buyOrder.getAbroadBookId())); + } + if ("point".equals(buyOrder.getOrderType())){ + BookBuyConfigEntity bookBuyConfigEntity = bookBuyConfigService.getById(buyOrder.getProductId()); + MyUserEntity userEntity = userService.getById(buyOrder.getUserId()); + String money = bookBuyConfigEntity.getMoney(); + //更新账户余额 + userService.rechargeHSPoint(userEntity,Integer.valueOf(money)); + //插入虚拟币消费记录 + transactionDetailsService.rechargeRecord(userEntity,money,payStripeOrder.getId(),"StripePay",buyOrder.getOrderSn()); + //插入花生币充值记录 + payPaymentOrderService.insertDetail(userEntity,bookBuyConfigEntity,payStripeOrder.getId().toString()); + } + buyOrder.setOrderStatus("3"); + buyOrderService.updateById(buyOrder); + return; + } + } + } buyOrder.setOrderStatus(Constants.ORDER_STATUS_OUT_OF_TIME); //回滚优惠卷 if (buyOrder.getCouponId()!=null&&buyOrder.getCouponId()!=0){ diff --git a/src/main/java/com/peanut/modules/pay/stripe/StripeConfig.java b/src/main/java/com/peanut/modules/pay/stripe/StripeConfig.java new file mode 100644 index 0000000..2ffcc59 --- /dev/null +++ b/src/main/java/com/peanut/modules/pay/stripe/StripeConfig.java @@ -0,0 +1,133 @@ +package com.peanut.modules.pay.stripe; + +import com.peanut.modules.common.entity.BuyOrder; +import com.stripe.Stripe; +import com.stripe.model.Event; +import com.stripe.model.PaymentIntent; +import com.stripe.model.Price; +import com.stripe.model.checkout.Session; +import com.stripe.net.Webhook; +import com.stripe.param.PaymentIntentCreateParams; +import com.stripe.param.PriceCreateParams; +import com.stripe.param.checkout.SessionCreateParams; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.util.IOUtils; +import org.springframework.stereotype.Component; +import javax.servlet.http.HttpServletRequest; +import java.io.InputStream; +import java.math.BigDecimal; +import java.nio.charset.StandardCharsets; + +@Component +@Slf4j +public class StripeConfig { + + private String apiKey = "sk_test_51QgdjVPKgQFCEmmSh73AmFpze4tU6bIbjXrcmN9RMwYOuMMKAwRvP6OAHdLZMwCbQDWka3iqrZMj0JpyFzpe6w5o00Val258i6"; + private String endpointSecret = "whsec_nLR7C84EILXloWGc8wD9WZd4fTAscm5z"; + //4242 4242 4242 4242 + + public Session createOrder(BuyOrder buyOrder,String successUrl,String cancelUrl){ + try{ + Stripe.apiKey = apiKey; + PriceCreateParams priceParams = + PriceCreateParams.builder() + .setCurrency("usd") + .setUnitAmount(buyOrder.getRealMoney().multiply(new BigDecimal(100)).longValue())//金额,单位为分所以*100 + .setProductData( + PriceCreateParams.ProductData.builder().setName(buyOrder.getRemark()).build() + ) + .build(); + Price price = Price.create(priceParams); + // 生成付款link + SessionCreateParams sessionParams = + SessionCreateParams.builder() + .setMode(SessionCreateParams.Mode.PAYMENT) + .addPaymentMethodType(SessionCreateParams.PaymentMethodType.CARD) + .setSuccessUrl(successUrl) + .setCancelUrl(cancelUrl) + .setClientReferenceId(buyOrder.getOrderSn()) + .setPaymentIntentData(SessionCreateParams.PaymentIntentData.builder() + .putMetadata("orderSn", buyOrder.getOrderSn()).build())// 构建付款成功后需要用到的参数 + .addLineItem( + SessionCreateParams.LineItem.builder() + .setPrice(price.getId()) + .setQuantity(1L).build() + ) + .build(); + Session session = Session.create(sessionParams); + log.info(">>>>>>>>>>>stripe下单返回的信息是 result = {}", session.toString()); + return session; + }catch (Exception e) { + log.error(">>>>>>>>>>:stripe创建订单网络连接失败 reason = {}", e.getMessage()); + e.printStackTrace(); + return null; + } + } + + public PaymentIntent createPaymentIntent(){ + try{ + Stripe.apiKey = apiKey; + PaymentIntentCreateParams params = + PaymentIntentCreateParams.builder() + .setAmount(2000L) + .setCurrency("usd") + .setAutomaticPaymentMethods( + PaymentIntentCreateParams.AutomaticPaymentMethods.builder() + .setEnabled(true) + .build() + ) + .build(); + PaymentIntent paymentIntent = PaymentIntent.create(params); + log.info(">>>>>>>>>>>stripeSession查询的信息是 result = {}", paymentIntent.toJson()); + return paymentIntent; + }catch (Exception e) { + log.error(">>>>>>>>>>:stripeSession查询失败 reason = {}", e.getMessage()); + e.printStackTrace(); + return null; + } + } + + public Session queryOrderSession(String stripeSessionId){ + try{ + Stripe.apiKey = apiKey; + Session session = Session.retrieve(stripeSessionId); + log.info(">>>>>>>>>>>stripeSession查询的信息是 result = {}", session.toJson()); + return session; + }catch (Exception e) { + log.error(">>>>>>>>>>:stripeSession查询失败 reason = {}", e.getMessage()); + e.printStackTrace(); + return null; + } + } + + public PaymentIntent queryOrderIntent(String stripeIntentId){ + try{ + Stripe.apiKey = apiKey; + PaymentIntent intent = PaymentIntent.retrieve(stripeIntentId); + log.info(">>>>>>>>>>>stripeIntent查询的信息是 result = {}", intent.toJson()); + return intent; + }catch (Exception e) { + log.error(">>>>>>>>>>:stripeIntent查询失败 reason = {}", e.getMessage()); + e.printStackTrace(); + return null; + } + } + + public Event callback(HttpServletRequest request){ + try{ + Stripe.apiKey = apiKey; + InputStream inputStream = request.getInputStream(); + byte[] bytes = IOUtils.toByteArray(inputStream); + String payload = new String(bytes, StandardCharsets.UTF_8); + String sigHeader = request.getHeader("Stripe-Signature"); + Event event = Webhook.constructEvent(payload, sigHeader, endpointSecret); + log.info(">>>>>>>>>>>stripe回调的信息是 result = {}", event.toJson()); + return event; + }catch (Exception e) { + log.error(">>>>>>>>>>:stripe回调失败 reason = {}", e.getMessage()); + e.printStackTrace(); + return null; + } + } + +} diff --git a/src/main/java/com/peanut/modules/pay/stripe/StripeController.java b/src/main/java/com/peanut/modules/pay/stripe/StripeController.java new file mode 100644 index 0000000..0a684d6 --- /dev/null +++ b/src/main/java/com/peanut/modules/pay/stripe/StripeController.java @@ -0,0 +1,181 @@ +package com.peanut.modules.pay.stripe; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.peanut.common.utils.R; +import com.peanut.modules.book.service.*; +import com.peanut.modules.common.entity.BookBuyConfigEntity; +import com.peanut.modules.common.entity.BuyOrder; +import com.peanut.modules.common.entity.MyUserEntity; +import com.peanut.modules.common.entity.PayStripeOrder; +import com.peanut.modules.common.service.PayStripeOrderService; +import com.stripe.Stripe; +import com.stripe.model.*; +import com.stripe.model.checkout.Session; +import com.stripe.param.PaymentIntentCreateParams; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import javax.servlet.http.HttpServletRequest; +import java.util.Arrays; +import java.util.Date; +import java.util.Map; + +/** + * stripe支付 + */ +@RestController +@RequestMapping("/pay/stripe") +@Slf4j +public class StripeController { + @Autowired + private StripeConfig stripeConfig; + @Autowired + private BuyOrderService buyOrderService; + @Autowired + private PayStripeOrderService payStripeOrderService; + @Autowired + private UserEbookBuyService userEbookBuyService; + @Autowired + private BookBuyConfigService bookBuyConfigService; + @Autowired + private MyUserService userService; + @Autowired + private TransactionDetailsService transactionDetailsService; + @Autowired + private PayPaymentOrderService payPaymentOrderService; + + @RequestMapping("/createOrder") + public R createOrder(@RequestBody Map params){ + int pso = payStripeOrderService.count(new LambdaQueryWrapper() + .eq(PayStripeOrder::getOrderSn,params.get("orderSn"))); + if (pso > 0) { + return R.error("An order already exists, please place a new order."); + } + BuyOrder buyOrder = buyOrderService.getOne(new LambdaQueryWrapper() + .eq(BuyOrder::getOrderSn,params.get("orderSn"))); + if (!"0".equals(buyOrder.getOrderStatus())){ + return R.error("Abnormal order status"); + } + if ("point".equals(buyOrder.getOrderType())){ + buyOrder.setRemark("Recharge Virtual Coin"); + } + Session session = stripeConfig.createOrder( + buyOrder, + params.get("successUrl").toString(), + params.get("cancelUrl").toString()); + if (session != null) { + PayStripeOrder payStripeOrder = new PayStripeOrder(); + payStripeOrder.setOrderId(buyOrder.getOrderId()); + payStripeOrder.setOrderSn(buyOrder.getOrderSn()); + payStripeOrder.setUserId(buyOrder.getUserId()); + payStripeOrder.setCreateTime(new Date()); + payStripeOrder.setSessionId(session.getId()); + payStripeOrderService.save(payStripeOrder); + return R.ok().put("id",session.getId()).put("url",session.getUrl()); + }else { + return R.error("failed"); + } + } + + @RequestMapping("/createPaymentIntent") + public R createPaymentIntent(){ + PaymentIntent paymentIntent = stripeConfig.createPaymentIntent(); + return R.ok().put("clientSecret",paymentIntent.getClientSecret()); + } + + @RequestMapping("/queryOrderSession") + public R queryOrderSession(@RequestBody Map params){ + Session session = stripeConfig.queryOrderSession(params.get("stripeSessionId").toString()); + return R.ok().put("url",session.toString()); + } + + @RequestMapping("/queryOrderIntent") + public R queryOrderIntent(@RequestBody Map params){ + PaymentIntent intent = stripeConfig.queryOrderIntent(params.get("stripeIntentId").toString()); + return R.ok().put("url",intent.toString()); + } + + @RequestMapping("/callback") + @Transactional + public void callback(HttpServletRequest request){ + Event event = stripeConfig.callback(request); + if ("payment_intent.succeeded".equals(event.getType())){ + StripeObject eventObj = event.getDataObjectDeserializer().getObject().get(); + PaymentIntent intent = (PaymentIntent) eventObj; + Map metaData = intent.getMetadata();//自定义传入的参数 + String orderSn = metaData.get("orderSn");//自定义订单号 + PayStripeOrder payStripeOrder = payStripeOrderService.getOne(new LambdaQueryWrapper() + .eq(PayStripeOrder::getOrderSn,orderSn)); + payStripeOrder.setStripeId(intent.getId()); + payStripeOrder.setAmount(intent.getAmount()+""); + payStripeOrder.setPayTime(new Date(intent.getCreated()*1000)); + payStripeOrder.setCallbackData(intent.toString()); + payStripeOrderService.updateById(payStripeOrder); + BuyOrder buyOrder = buyOrderService.getById(payStripeOrder.getOrderId()); + if ("abroadBook".equals(buyOrder.getOrderType())){ + userEbookBuyService.addBookForUser(buyOrder.getUserId(), Arrays.asList(buyOrder.getAbroadBookId())); + } + if ("point".equals(buyOrder.getOrderType())){ + BookBuyConfigEntity bookBuyConfigEntity = bookBuyConfigService.getById(buyOrder.getProductId()); + MyUserEntity userEntity = userService.getById(buyOrder.getUserId()); + String money = bookBuyConfigEntity.getMoney(); + //更新账户余额 + userService.rechargeHSPoint(userEntity,Integer.valueOf(money)); + //插入虚拟币消费记录 + transactionDetailsService.rechargeRecord(userEntity,money,payStripeOrder.getId(),"Stripe",buyOrder.getOrderSn()); + //插入花生币充值记录 + payPaymentOrderService.insertDetail(userEntity,bookBuyConfigEntity,payStripeOrder.getId().toString()); + } + buyOrder.setOrderStatus("3"); + buyOrderService.updateById(buyOrder); + } + } + + @RequestMapping("/transfer") + public String transfer(String paymentStatus){ + String res = "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "Title\n" + + "\n" + + "\n" + + "

3s后自动跳转页面

\n" + + "

关闭页面

\n" + + "" + + "\n" + + "\n" + + "\n" + + "\n"; + return res; + } + + +}