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; } }