ConsumptionService.java 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package com.izouma.jiashanxia.service;
  2. import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
  3. import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
  4. import com.github.binarywang.wxpay.constant.WxPayConstants;
  5. import com.github.binarywang.wxpay.exception.WxPayException;
  6. import com.github.binarywang.wxpay.service.WxPayService;
  7. import com.izouma.jiashanxia.domain.OrderInfo;
  8. import com.izouma.jiashanxia.domain.User;
  9. import com.izouma.jiashanxia.exception.BusinessException;
  10. import com.izouma.jiashanxia.repo.OrderInfoRepo;
  11. import com.izouma.jiashanxia.repo.UserRepo;
  12. import com.izouma.jiashanxia.utils.JsonUtils;
  13. import com.izouma.jiashanxia.utils.SnowflakeIdWorker;
  14. import lombok.extern.slf4j.Slf4j;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.beans.factory.annotation.Value;
  17. import org.springframework.core.env.Environment;
  18. import org.springframework.stereotype.Service;
  19. import java.math.BigDecimal;
  20. import java.util.Arrays;
  21. @Service
  22. @Slf4j
  23. public class ConsumptionService {
  24. @Autowired
  25. private UserRepo userRepo;
  26. @Autowired
  27. private OrderInfoRepo orderInfoRepo;
  28. @Value("${wx.pay.notifyUrl}")
  29. private String wxNotifyUrl;
  30. @Autowired
  31. private Environment environment;
  32. @Autowired
  33. private WxPayService wxPayService;
  34. /*
  35. 微信支付
  36. */
  37. public WxPayMpOrderResult payOrder(Long userId, Long orderId) {
  38. User user = userRepo.findById(userId).orElseThrow(new BusinessException("用户不存在"));
  39. OrderInfo orders = orderInfoRepo.findById(orderId).orElseThrow(new BusinessException("订单错误"));
  40. String body = orders.getName();
  41. WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest();
  42. request.setBody(body);
  43. //订单号
  44. request.setOutTradeNo(String.valueOf(new SnowflakeIdWorker(1, 1).nextId()));
  45. //分为单位
  46. request.setTotalFee(orders.getPrice().multiply(BigDecimal.valueOf(100)).intValue());
  47. if (Arrays.stream(environment.getActiveProfiles()).noneMatch(s -> s.equals("prod"))) {
  48. request.setTotalFee(1);
  49. }
  50. request.setOpenid(user.getOpenId());
  51. request.setNotifyUrl(wxNotifyUrl);
  52. request.setSpbillCreateIp("180.102.110.170");
  53. request.setTradeType(WxPayConstants.TradeType.JSAPI);
  54. request.setSignType("MD5");
  55. request.setAttach(new JsonUtils.Builder()
  56. .add("type", "member")
  57. .add("orderId", orderId)
  58. .add("userId", userId)
  59. .add("amount", orders.getPrice())
  60. .build());
  61. try {
  62. return wxPayService.createOrder(request);
  63. } catch (WxPayException e) {
  64. log.info("微信支付异常", e);
  65. throw new BusinessException(e.getMessage());
  66. }
  67. }
  68. }