69 lines
2.2 KiB
Java
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;
|
|
}
|
|
}
|