baogutang-music/src/main/java/top/baogutang/music/client/AbstractOrderClient.java
2026-03-17 14:20:30 +08:00

69 lines
2.2 KiB
Java

package top.baogutang.music.client;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.domain.AlipayTradePrecreateModel;
import com.ijpay.alipay.AliPayApi;
import lombok.extern.slf4j.Slf4j;
import top.baogutang.music.dao.entity.OrderEntity;
import top.baogutang.music.domain.res.pay.OrderRes;
import top.baogutang.music.enums.PayChannel;
import top.baogutang.music.service.IOrderService;
import top.baogutang.music.service.IPayService;
import javax.annotation.Resource;
import java.math.BigDecimal;
/**
*
* @description:
*
* @author: N1KO
* @date: 2024/12/25 : 13:50
*/
@Slf4j
public abstract class AbstractOrderClient {
@Resource
private IPayService payService;
@Resource
private IOrderService orderService;
public abstract PayChannel getPayChannel();
public abstract BigDecimal getAmount();
public abstract String getNotifyUrl();
public OrderRes order(Long userId) {
// 1.创建订单
OrderEntity order = orderService.createOrder(userId, getPayChannel(), getAmount());
// 2.支付
AlipayTradePrecreateModel model = new AlipayTradePrecreateModel();
model.setSubject("N1KO MUSIC 会员");
model.setTotalAmount(order.getAmount().toString());
model.setTimeoutExpress("10m");
model.setOutTradeNo(order.getOrderNo());
model.setProductCode("FACE_TO_FACE_PAYMENT");
String qrCode;
try {
String resultStr = AliPayApi.tradePrecreatePayToResponse(model, getNotifyUrl())
.getBody();
JSONObject jsonObject = JSON.parseObject(resultStr);
qrCode = jsonObject.getJSONObject("alipay_trade_precreate_response").getString("qr_code");
} catch (Exception e) {
log.error("预下单失败:{}", e.getMessage(), e);
return null;
}
OrderRes orderRes = new OrderRes();
orderRes.setQrCode(qrCode);
orderRes.setUserId(userId);
orderRes.setOrderId(order.getId());
orderRes.setOrderNo(order.getOrderNo());
orderRes.setAmount(order.getAmount());
orderRes.setStatus(order.getStatus());
return orderRes;
}
}