package cc.mrbird.febs.pay.service.impl;
|
|
import cc.mrbird.febs.common.enumerates.OrderStatusEnum;
|
import cc.mrbird.febs.common.exception.FebsException;
|
import cc.mrbird.febs.mall.entity.MallMember;
|
import cc.mrbird.febs.mall.entity.MallOrderInfo;
|
import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
|
import cc.mrbird.febs.pay.model.BrandWCPayRequestData;
|
import cc.mrbird.febs.pay.model.JsApiPayBusiness;
|
import cc.mrbird.febs.pay.model.JsApiPayReqData;
|
import cc.mrbird.febs.pay.model.JsApiPayResData;
|
import cc.mrbird.febs.pay.service.IXcxCodePayService;
|
import cc.mrbird.febs.pay.util.WebUtil;
|
import cn.hutool.core.date.DateField;
|
import cn.hutool.core.date.DatePattern;
|
import cn.hutool.core.date.DateUtil;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.github.binarywang.wxpay.bean.order.WxPayAppOrderResult;
|
import com.github.binarywang.wxpay.bean.request.WxPayMicropayRequest;
|
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
|
import com.github.binarywang.wxpay.bean.result.WxPayMicropayResult;
|
import com.github.binarywang.wxpay.exception.WxPayException;
|
import com.github.binarywang.wxpay.service.WxPayService;
|
import lombok.RequiredArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.math.BigDecimal;
|
import java.util.Map;
|
|
@Slf4j
|
@Service
|
@RequiredArgsConstructor
|
public class xcxCodePayServiceImpl implements IXcxCodePayService {
|
|
private final MallOrderInfoMapper mallOrderInfoMapper;
|
private final WxPayService wxService;
|
|
@Override
|
public String pay(MallOrderInfo mallOrderInfo) {
|
WxPayMicropayRequest request = new WxPayMicropayRequest();
|
request
|
request.setAppid(wxPayProperties.getAppId());
|
request.setMchId(wxPayProperties.getMchId());
|
request.setNotifyUrl(wxPayProperties.getNoticeUrl());
|
request.setBody(orderInfo.getName());
|
request.setOutTradeNo(orderInfo.getOrderNo());
|
request.setTimeExpire(DateUtil.format(DateUtil.offset(new Date(), DateField.MINUTE, 15), DatePattern.PURE_DATETIME_PATTERN));
|
request.setSpbillCreateIp("127.0.0.1");
|
request.setTradeType("APP");
|
|
// if ("dev".equals(active) || "test".equals(active)) {
|
if ("dev".equals(active)) {
|
request.setTotalFee(1);
|
} else {
|
request.setTotalFee(orderInfo.getAmount().add(orderInfo.getCarriage()).multiply(new BigDecimal(100)).intValue());
|
}
|
|
try {
|
WxPayMicropayResult micropay = wxService.micropay(request);
|
return JSONObject.toJSONString(micropay);
|
} catch (WxPayException e) {
|
e.printStackTrace();
|
throw new FebsException("支付异常, 请检查");
|
}
|
return null;
|
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void payCallback(Map<String, String> params) {
|
String orderNo = params.get("out_trade_no");
|
LambdaQueryWrapper<MallOrderInfo> query = new LambdaQueryWrapper<>();
|
query.eq(MallOrderInfo::getOrderNo, orderNo);
|
MallOrderInfo orderInfo = mallOrderInfoMapper.selectOne(query);
|
if ("1".equals(orderInfo.getPayResult())) {
|
return;
|
}
|
orderInfo.setStatus(OrderStatusEnum.FINISH.getValue());
|
orderInfo.setPayResult("1");
|
orderInfo.setPayTime(DateUtil.date());
|
orderInfo.setPayTradeNo(params.get("transaction_id"));
|
mallOrderInfoMapper.updateById(orderInfo);
|
}
|
}
|