提交 5e1cd94f 作者: xiaowang

下单

上级 595f332f
......@@ -18,9 +18,9 @@ import com.wechat.pay.java.core.exception.ServiceException;
import com.wechat.pay.java.core.notification.NotificationConfig;
import com.wechat.pay.java.core.notification.NotificationParser;
import com.wechat.pay.java.core.notification.RequestParam;
import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction;
import com.wechat.pay.java.service.payments.jsapi.JsapiService;
import com.wechat.pay.java.service.payments.jsapi.model.*;
import com.wechat.pay.java.service.payments.model.Transaction;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
......@@ -54,44 +54,51 @@ public class WechatPayServiceImpl implements WechatPayService {
if (userSimpleInfo == null) {
throw new RuntimeException("服务器内部错误!");
}
Config config = wxConfigUtils.createConfig();
// 查询该订单是否已下单
WxPayLogDO wxPayLogDO = wechatPayDao.selectWxPayInfoByOrderNo(orderRequestParamsVO.getOrderNo());
if (wxPayLogDO != null && wxPayLogDO.getTradeState().equals(OrderPayStatus.SUCCESS.getStatus())) {
return ResultBody.error("订单已支付!");
} else if (wxPayLogDO != null) {
return ResultBody.error("请勿重复下单!");
} else if (wxPayLogDO == null) {
// 构建service
JsapiService jsapiService = new JsapiService.Builder().config(config).build();
// request.setXxx(val)设置所需参数,具体参数可见Request定义
PrepayRequest prepayRequest = new PrepayRequest();
Amount amount = new Amount();
amount.setTotal(orderRequestParamsVO.getAmount());
prepayRequest.setAmount(amount);
Payer payer = new Payer();
payer.setOpenid(userSimpleInfo.getOpenid());
prepayRequest.setPayer(payer);
prepayRequest.setAppid(userSystemConstant.getWxAppId());
prepayRequest.setMchid(userSystemConstant.getMchid());
prepayRequest.setDescription(orderRequestParamsVO.getDescription());
prepayRequest.setNotifyUrl(userSystemConstant.getNotifyUrl());
prepayRequest.setOutTradeNo(orderRequestParamsVO.getOrderNo());
// 调用下单方法,得到应答
PrepayResponse prepay = jsapiService.prepay(prepayRequest);
String prepayId = prepay.getPrepayId();
// 录入数据库记录数据
WxPayLogDO wxPrepayLogDO = new WxPayLogDO();
wxPrepayLogDO.setOrderPort(orderRequestParamsVO.getOrderPort());
wxPrepayLogDO.setOrderNo(orderRequestParamsVO.getOrderNo());
wxPrepayLogDO.setDescription(orderRequestParamsVO.getDescription());
wxPrepayLogDO.setUserAccountId(userAccountId);
wxPrepayLogDO.setAmount(orderRequestParamsVO.getAmount());
wxPrepayLogDO.setPrepayId(prepayId);
wxPrepayLogDO.setOpenId(userSimpleInfo.getOpenid());
wxPrepayLogDO.setTradeState(OrderPayStatus.WAIT.getStatus());
// 往数据库插入下单的日志信息
wechatPayDao.insertWxPayLog(wxPrepayLogDO);
Map<String, Object> map = getSignInfoMap(config, prepayId);
return ResultBody.success(map);
} else {
Map<String, Object> map = getSignInfoMap(config, wxPayLogDO.getPrepayId());
return ResultBody.success(map);
}
Config config = wxConfigUtils.createConfig();
// 构建service
JsapiService jsapiService = new JsapiService.Builder().config(config).build();
// request.setXxx(val)设置所需参数,具体参数可见Request定义
PrepayRequest prepayRequest = new PrepayRequest();
Amount amount = new Amount();
amount.setTotal(orderRequestParamsVO.getAmount());
prepayRequest.setAmount(amount);
Payer payer = new Payer();
payer.setOpenid(userSimpleInfo.getOpenid());
prepayRequest.setPayer(payer);
prepayRequest.setAppid(userSystemConstant.getWxAppId());
prepayRequest.setMchid(userSystemConstant.getMchid());
prepayRequest.setDescription(orderRequestParamsVO.getDescription());
prepayRequest.setNotifyUrl(userSystemConstant.getNotifyUrl());
prepayRequest.setOutTradeNo(orderRequestParamsVO.getOrderNo());
// 调用下单方法,得到应答
PrepayResponse prepay = jsapiService.prepay(prepayRequest);
String prepayId = prepay.getPrepayId();
// 录入数据库记录数据
WxPayLogDO wxPrepayLogDO = new WxPayLogDO();
wxPrepayLogDO.setOrderPort(orderRequestParamsVO.getOrderPort());
wxPrepayLogDO.setOrderNo(orderRequestParamsVO.getOrderNo());
wxPrepayLogDO.setDescription(orderRequestParamsVO.getDescription());
wxPrepayLogDO.setUserAccountId(userAccountId);
wxPrepayLogDO.setAmount(orderRequestParamsVO.getAmount());
wxPrepayLogDO.setPrepayId(prepayId);
wxPrepayLogDO.setOpenId(userSimpleInfo.getOpenid());
wxPrepayLogDO.setTradeState(OrderPayStatus.WAIT.getStatus());
// 往数据库插入下单的日志信息
wechatPayDao.insertWxPayLog(wxPrepayLogDO);
}
private Map<String, Object> getSignInfoMap(Config config, String prepayId) {
// 获取时间戳
String timeStamp = System.currentTimeMillis() / 1000 + "";
// 获取随机字符串
......@@ -114,7 +121,7 @@ public class WechatPayServiceImpl implements WechatPayService {
map.put("package", prepayPackage);
map.put("signType", signType);
map.put("paySign", sign);
return ResultBody.success(map);
return map;
}
@Override
......@@ -159,7 +166,7 @@ public class WechatPayServiceImpl implements WechatPayService {
wxPayLogDO.setBankType(transaction.getBankType());
wxPayLogDO.setAttach(transaction.getAttach());
wxPayLogDO.setSuccessTime(transaction.getSuccessTime());
wxPayLogDO.setWxNotifyOpenid(transaction.getPayer().getSpOpenid());
wxPayLogDO.setWxNotifyOpenid(transaction.getPayer().getOpenid());
wxPayLogDO.setWxNotifyTotal(transaction.getAmount().getTotal());
wxPayLogDO.setWxNotifyPayerTotal(transaction.getAmount().getPayerTotal());
wxPayLogDO.setTradeType(transaction.getTradeType().toString());
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论