package cc.mrbird.febs.pay.service.impl;
|
|
import cc.mrbird.febs.common.exception.FebsException;
|
import cc.mrbird.febs.common.utils.AppContants;
|
import cc.mrbird.febs.common.utils.LoginUserUtil;
|
import cc.mrbird.febs.common.utils.MallUtils;
|
import cc.mrbird.febs.pay.model.AliPayPassbackModel;
|
import cc.mrbird.febs.pay.properties.AliPayProperties;
|
import cc.mrbird.febs.pay.service.IPayService;
|
import cc.mrbird.febs.video.dto.VipBuyDto;
|
import cc.mrbird.febs.video.entity.DataDictionaryCustom;
|
import cc.mrbird.febs.video.entity.VideoMemberEntity;
|
import cc.mrbird.febs.video.entity.VideoVipOrderInfoEntity;
|
import cc.mrbird.febs.video.mapper.DataDictionaryCustomMapper;
|
import cc.mrbird.febs.video.mapper.VideoMemberMapper;
|
import cc.mrbird.febs.video.mapper.VideoVipOrderInfoMapper;
|
import com.alibaba.fastjson.JSONObject;
|
import com.alipay.api.AlipayApiException;
|
import com.alipay.api.domain.AlipayTradeAppPayModel;
|
import com.alipay.api.response.AlipayTradeAppPayResponse;
|
import com.ijpay.alipay.AliPayApi;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.util.Date;
|
import java.util.Map;
|
|
/**
|
* @author wzy
|
* @date 2021-09-27
|
**/
|
@Slf4j
|
@Service
|
public class PayServiceImpl implements IPayService {
|
|
@Resource
|
private AliPayProperties aliPayProperties;
|
@Resource
|
private DataDictionaryCustomMapper dataDictionaryCustomMapper;
|
|
@Resource
|
private VideoVipOrderInfoMapper videoVipOrderInfoMapper;
|
|
@Resource
|
private VideoMemberMapper videoMemberMapper;
|
|
@Value("${spring.profiles.active}")
|
private String active;
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public String aliPay(VipBuyDto vipBuyDto) {
|
VideoMemberEntity loginUser = LoginUserUtil.getLoginUser();
|
|
DataDictionaryCustom data = dataDictionaryCustomMapper.selectDataByTypeAndCode(AppContants.DIC_VIP_COST, vipBuyDto.getType());
|
if (data == null) {
|
throw new FebsException("参数错误");
|
}
|
|
VideoVipOrderInfoEntity vipOrderInfo = new VideoVipOrderInfoEntity();
|
vipOrderInfo.setOrderNo(MallUtils.getOrderNum());
|
vipOrderInfo.setPayType(VideoVipOrderInfoEntity.PAY_TYPE_ALIPAY);
|
vipOrderInfo.setStatus(VideoVipOrderInfoEntity.PAY_STATUS_WAIT);
|
vipOrderInfo.setMemberId(loginUser.getId());
|
vipOrderInfo.setGoodsType(vipBuyDto.getType());
|
vipOrderInfo.setAmount(new BigDecimal(data.getValue()));
|
videoVipOrderInfoMapper.insert(vipOrderInfo);
|
|
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
|
model.setSubject("会员支付");
|
model.setBody(data.getDescription());
|
model.setOutTradeNo(vipOrderInfo.getOrderNo());
|
model.setTimeoutExpress("15m");
|
|
if ("dev".equals(active) || "test".equals(active)) {
|
model.setTotalAmount("0.01");
|
} else {
|
model.setTotalAmount(vipOrderInfo.getAmount().toString());
|
}
|
|
AliPayPassbackModel passbackModel = new AliPayPassbackModel();
|
passbackModel.setOrderId(vipOrderInfo.getId());
|
passbackModel.setMemberId(vipOrderInfo.getMemberId());
|
model.setPassbackParams(JSONObject.toJSONString(passbackModel));
|
|
model.setProductCode("QUICK_MSECURITY_PAY");
|
AlipayTradeAppPayResponse resp = null;
|
try {
|
resp = AliPayApi.appPayToResponse(model, aliPayProperties.getNoticeUrl());
|
} catch (AlipayApiException e) {
|
log.error("支付宝支付异常", e);
|
throw new FebsException("支付宝支付异常");
|
}
|
return resp.getBody();
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void aliCallback(Map<String, String> params) {
|
String modelStr = params.get("passback_params");
|
|
AliPayPassbackModel passback = JSONObject.parseObject(modelStr, AliPayPassbackModel.class);
|
|
VideoVipOrderInfoEntity orderInfo = videoVipOrderInfoMapper.selectById(passback.getOrderId());
|
if (orderInfo.getPayType() != 1) {
|
return;
|
}
|
|
VideoMemberEntity member = videoMemberMapper.selectById(orderInfo.getMemberId());
|
|
orderInfo.setStatus(VideoVipOrderInfoEntity.PAY_STATUS_PAY);
|
orderInfo.setPayTime(new Date());
|
orderInfo.setPayTraderNo(params.get("trade_no"));
|
videoVipOrderInfoMapper.updateById(orderInfo);
|
}
|
}
|