|
|
@@ -1,11 +1,18 @@
|
|
|
package com.izouma.nineth.service;
|
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.alipay.api.AlipayApiException;
|
|
|
+import com.alipay.api.AlipayClient;
|
|
|
+import com.alipay.api.request.AlipayTradeWapPayRequest;
|
|
|
+import com.izouma.nineth.config.AlipayProperties;
|
|
|
import com.izouma.nineth.domain.Collection;
|
|
|
import com.izouma.nineth.domain.Order;
|
|
|
import com.izouma.nineth.domain.User;
|
|
|
import com.izouma.nineth.domain.UserAddress;
|
|
|
import com.izouma.nineth.dto.PageQuery;
|
|
|
import com.izouma.nineth.enums.OrderStatus;
|
|
|
+import com.izouma.nineth.enums.PayMethod;
|
|
|
import com.izouma.nineth.exception.BusinessException;
|
|
|
import com.izouma.nineth.repo.CollectionRepo;
|
|
|
import com.izouma.nineth.repo.OrderRepo;
|
|
|
@@ -13,21 +20,27 @@ import com.izouma.nineth.repo.UserAddressRepo;
|
|
|
import com.izouma.nineth.repo.UserRepo;
|
|
|
import com.izouma.nineth.utils.JpaUtils;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
+import org.springframework.core.env.Environment;
|
|
|
import org.springframework.data.domain.Page;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import javax.transaction.Transactional;
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.util.Arrays;
|
|
|
import java.util.Optional;
|
|
|
+import java.util.UUID;
|
|
|
|
|
|
@Service
|
|
|
@AllArgsConstructor
|
|
|
public class OrderService {
|
|
|
|
|
|
- private OrderRepo orderRepo;
|
|
|
- private CollectionRepo collectionRepo;
|
|
|
- private UserAddressRepo userAddressRepo;
|
|
|
- private UserRepo userRepo;
|
|
|
+ private OrderRepo orderRepo;
|
|
|
+ private CollectionRepo collectionRepo;
|
|
|
+ private UserAddressRepo userAddressRepo;
|
|
|
+ private UserRepo userRepo;
|
|
|
+ private Environment env;
|
|
|
+ private AlipayClient alipayClient;
|
|
|
+ private AlipayProperties alipayProperties;
|
|
|
|
|
|
public Page<Order> all(PageQuery pageQuery) {
|
|
|
return orderRepo.findAll(JpaUtils.toSpecification(pageQuery, Order.class), JpaUtils.toPageRequest(pageQuery));
|
|
|
@@ -76,4 +89,41 @@ public class OrderService {
|
|
|
return orderRepo.save(order);
|
|
|
|
|
|
}
|
|
|
+
|
|
|
+ public Object pay(Long id, PayMethod payMethod) throws AlipayApiException {
|
|
|
+ Order order = orderRepo.findByIdAndDelFalse(id).orElseThrow(new BusinessException("订单不存在"));
|
|
|
+ if (order.getStatus() != OrderStatus.NOT_PAID) {
|
|
|
+ throw new BusinessException("订单状态错误");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (payMethod == PayMethod.ALIPAY) {
|
|
|
+ JSONObject bizContent = new JSONObject();
|
|
|
+ bizContent.put("notifyUrl", alipayProperties.getNotifyUrl());
|
|
|
+ bizContent.put("returnUrl", alipayProperties.getReturnUrl());
|
|
|
+ bizContent.put("out_trade_no", UUID.randomUUID().toString());
|
|
|
+ bizContent.put("total_amount", order.getTotalPrice().stripTrailingZeros().toPlainString());
|
|
|
+ bizContent.put("disable_pay_channels", "pcredit,creditCard");
|
|
|
+ if (Arrays.stream(env.getActiveProfiles()).noneMatch(s -> s.equals("prod"))) {
|
|
|
+ // 测试环境设为1分
|
|
|
+ bizContent.put("total_amount", "0.01");
|
|
|
+ }
|
|
|
+ bizContent.put("subject", order.getName());
|
|
|
+ bizContent.put("product_code", "QUICK_WAP_PAY");
|
|
|
+ JSONObject body = new JSONObject();
|
|
|
+ body.put("action", "payOrder");
|
|
|
+ body.put("userId", order.getUserId());
|
|
|
+ body.put("orderId", order.getId());
|
|
|
+ bizContent.put("body", body.toJSONString());
|
|
|
+
|
|
|
+ AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();
|
|
|
+ alipayRequest.setReturnUrl(alipayProperties.getReturnUrl());
|
|
|
+ alipayRequest.setNotifyUrl(alipayProperties.getNotifyUrl());
|
|
|
+ alipayRequest.setBizContent(JSON.toJSONString(bizContent));
|
|
|
+
|
|
|
+ String html = alipayClient.pageExecute(alipayRequest).getBody();
|
|
|
+ return html;
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
}
|