| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- package com.izouma.jiashanxia.service;
- import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
- import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
- import com.github.binarywang.wxpay.constant.WxPayConstants;
- import com.github.binarywang.wxpay.exception.WxPayException;
- import com.github.binarywang.wxpay.service.WxPayService;
- import com.izouma.jiashanxia.domain.OrderInfo;
- import com.izouma.jiashanxia.domain.User;
- import com.izouma.jiashanxia.exception.BusinessException;
- import com.izouma.jiashanxia.repo.OrderInfoRepo;
- import com.izouma.jiashanxia.repo.UserRepo;
- import com.izouma.jiashanxia.utils.JsonUtils;
- import com.izouma.jiashanxia.utils.SnowflakeIdWorker;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.core.env.Environment;
- import org.springframework.stereotype.Service;
- import java.math.BigDecimal;
- import java.util.Arrays;
- @Service
- @Slf4j
- public class ConsumptionService {
- @Autowired
- private UserRepo userRepo;
- @Autowired
- private OrderInfoRepo orderInfoRepo;
- @Value("${wx.pay.notifyUrl}")
- private String wxNotifyUrl;
- @Autowired
- private Environment environment;
- @Autowired
- private WxPayService wxPayService;
- /*
- 微信支付
- */
- public WxPayMpOrderResult payOrder(Long userId, Long orderId) {
- User user = userRepo.findById(userId).orElseThrow(new BusinessException("用户不存在"));
- OrderInfo orders = orderInfoRepo.findById(orderId).orElseThrow(new BusinessException("订单错误"));
- String body = orders.getName();
- WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest();
- request.setBody(body);
- //订单号
- request.setOutTradeNo(String.valueOf(new SnowflakeIdWorker(1, 1).nextId()));
- //分为单位
- request.setTotalFee(orders.getPrice().multiply(BigDecimal.valueOf(100)).intValue());
- if (Arrays.stream(environment.getActiveProfiles()).noneMatch(s -> s.equals("prod"))) {
- request.setTotalFee(1);
- }
- request.setOpenid(user.getOpenId());
- request.setNotifyUrl(wxNotifyUrl);
- request.setSpbillCreateIp("180.102.110.170");
- request.setTradeType(WxPayConstants.TradeType.JSAPI);
- request.setSignType("MD5");
- request.setAttach(new JsonUtils.Builder()
- .add("type", "member")
- .add("orderId", orderId)
- .add("userId", userId)
- .add("amount", orders.getPrice())
- .build());
- try {
- return wxPayService.createOrder(request);
- } catch (WxPayException e) {
- log.info("微信支付异常", e);
- throw new BusinessException(e.getMessage());
- }
- }
- }
|