|
@@ -1,8 +1,6 @@
|
|
package com.ruoyi.wx.web.controller;
|
|
package com.ruoyi.wx.web.controller;
|
|
|
|
|
|
|
|
|
|
-import cn.hutool.core.date.DateField;
|
|
|
|
-import cn.hutool.core.date.DateUtil;
|
|
|
|
import com.github.binarywang.wxpay.bean.notify.OriginNotifyResponse;
|
|
import com.github.binarywang.wxpay.bean.notify.OriginNotifyResponse;
|
|
import com.github.binarywang.wxpay.bean.notify.SignatureHeader;
|
|
import com.github.binarywang.wxpay.bean.notify.SignatureHeader;
|
|
import com.github.binarywang.wxpay.bean.notify.WxPayNotifyV3Result;
|
|
import com.github.binarywang.wxpay.bean.notify.WxPayNotifyV3Result;
|
|
@@ -35,12 +33,10 @@ import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDate;
|
|
-import java.time.LocalDateTime;
|
|
|
|
import java.time.ZoneId;
|
|
import java.time.ZoneId;
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
-import java.util.Objects;
|
|
|
|
import java.util.concurrent.locks.ReentrantLock;
|
|
import java.util.concurrent.locks.ReentrantLock;
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -131,7 +127,7 @@ public class WxPayController {
|
|
WxPayUnifiedOrderV3Request request = new WxPayUnifiedOrderV3Request();
|
|
WxPayUnifiedOrderV3Request request = new WxPayUnifiedOrderV3Request();
|
|
request.setDescription("购买会员");
|
|
request.setDescription("购买会员");
|
|
// 商品订单号
|
|
// 商品订单号
|
|
- String orderNo = "ORDER_" + System.currentTimeMillis();
|
|
|
|
|
|
+ String orderNo = "ORDER_" + (System.currentTimeMillis() + 1);
|
|
request.setOutTradeNo(orderNo);
|
|
request.setOutTradeNo(orderNo);
|
|
// 订单金额
|
|
// 订单金额
|
|
WxPayUnifiedOrderV3Request.Amount amount = new WxPayUnifiedOrderV3Request.Amount();
|
|
WxPayUnifiedOrderV3Request.Amount amount = new WxPayUnifiedOrderV3Request.Amount();
|
|
@@ -142,31 +138,32 @@ public class WxPayController {
|
|
} else if (StringUtils.isNotEmpty(dto.getDiscount())) {
|
|
} else if (StringUtils.isNotEmpty(dto.getDiscount())) {
|
|
total = total.multiply(new BigDecimal(dto.getDiscount()).divide(new BigDecimal(10)));
|
|
total = total.multiply(new BigDecimal(dto.getDiscount()).divide(new BigDecimal(10)));
|
|
}
|
|
}
|
|
- log.info("用户:{},支付总金额为:{}, 订单Id为:{}", dto.getOpenId(), amount, orderNo);
|
|
|
|
amount.setTotal(total.intValue() * 100);
|
|
amount.setTotal(total.intValue() * 100);
|
|
request.setAmount(amount);
|
|
request.setAmount(amount);
|
|
|
|
+ log.info("用户:{},支付总金额为:{}, 订单Id为:{}", dto.getOpenId(), amount, orderNo);
|
|
WxPayUnifiedOrderV3Request.Payer payer = new WxPayUnifiedOrderV3Request.Payer();
|
|
WxPayUnifiedOrderV3Request.Payer payer = new WxPayUnifiedOrderV3Request.Payer();
|
|
payer.setOpenid(dto.getOpenId());
|
|
payer.setOpenid(dto.getOpenId());
|
|
request.setPayer(payer);
|
|
request.setPayer(payer);
|
|
WxPayUnifiedOrderV3Result.JsapiResult orderV3 = this.wxPayService.createOrderV3(TradeTypeEnum.JSAPI, request);
|
|
WxPayUnifiedOrderV3Result.JsapiResult orderV3 = this.wxPayService.createOrderV3(TradeTypeEnum.JSAPI, request);
|
|
|
|
+ log.info("支付内容:{}", orderV3);
|
|
WxRecharge wxRecharge = new WxRecharge();
|
|
WxRecharge wxRecharge = new WxRecharge();
|
|
wxRecharge.setPoints(dto.getPoints());
|
|
wxRecharge.setPoints(dto.getPoints());
|
|
- wxRecharge.setPrice(total.divide(new BigDecimal(100)));
|
|
|
|
|
|
+ wxRecharge.setPrice(total);
|
|
wxRecharge.setPayTime(new Date());
|
|
wxRecharge.setPayTime(new Date());
|
|
WxUser wxUser = wxUserService.selectWxUSerByOpenid(dto.getOpenId());
|
|
WxUser wxUser = wxUserService.selectWxUSerByOpenid(dto.getOpenId());
|
|
wxRecharge.setUserId(wxUser.getId());
|
|
wxRecharge.setUserId(wxUser.getId());
|
|
wxRecharge.setUserName(wxUser.getUsername());
|
|
wxRecharge.setUserName(wxUser.getUsername());
|
|
|
|
+ wxRecharge.setPayStat("1");
|
|
|
|
+ wxRecharge.setOrderNo(orderNo);
|
|
|
|
+ wxRecharge.setVipLv(dto.getVipLv());
|
|
wxRechargeService.insertWxRecharge(wxRecharge);
|
|
wxRechargeService.insertWxRecharge(wxRecharge);
|
|
- wxUser.setUserLevel(dto.getVipLv());
|
|
|
|
- wxUser.setVipStartTime(null == wxUser.getVipStartTime() ? LocalDate.now(ZoneId.of("Asia/Shanghai")) : wxUser.getVipStartTime());
|
|
|
|
- wxUser.setVipEndTime(defDate(wxUser.getVipStartTime(), dto.getVipLv()));
|
|
|
|
- wxUserService.updateWxUser(wxUser);
|
|
|
|
Map<String, Object> resultMap = new HashMap<>();
|
|
Map<String, Object> resultMap = new HashMap<>();
|
|
resultMap.put("appId", orderV3.getAppId());
|
|
resultMap.put("appId", orderV3.getAppId());
|
|
resultMap.put("timeStamp", orderV3.getTimeStamp());
|
|
resultMap.put("timeStamp", orderV3.getTimeStamp());
|
|
resultMap.put("nonceStr", orderV3.getNonceStr());
|
|
resultMap.put("nonceStr", orderV3.getNonceStr());
|
|
resultMap.put("packageValue", orderV3.getPackageValue());
|
|
resultMap.put("packageValue", orderV3.getPackageValue());
|
|
resultMap.put("signType", orderV3.getSignType());
|
|
resultMap.put("signType", orderV3.getSignType());
|
|
|
|
+ resultMap.put("paySign", orderV3.getPaySign());
|
|
resultMap.put("outTradeNo", orderNo);
|
|
resultMap.put("outTradeNo", orderNo);
|
|
return AjaxResult.success(resultMap);
|
|
return AjaxResult.success(resultMap);
|
|
}
|
|
}
|
|
@@ -202,7 +199,17 @@ public class WxPayController {
|
|
try {
|
|
try {
|
|
// 解析支付结果通知
|
|
// 解析支付结果通知
|
|
WxPayNotifyV3Result result = wxPayService.parseOrderNotifyV3Result(notifyData, signatureHeader);
|
|
WxPayNotifyV3Result result = wxPayService.parseOrderNotifyV3Result(notifyData, signatureHeader);
|
|
- // TODO 此处根据返回结果处理订单信息
|
|
|
|
|
|
+ String orderNo = result.getResult().getOutTradeNo();
|
|
|
|
+ WxRecharge wxRecharge = wxRechargeService.selectWxRechargeByOrderId(orderNo);
|
|
|
|
+ wxRecharge.setPayStat("2");
|
|
|
|
+ wxRechargeService.updateWxRecharge(wxRecharge);
|
|
|
|
+ log.info("查询支付信息:{}", wxRecharge);
|
|
|
|
+ WxUser wxUser = wxUserService.selectWxUserById(wxRecharge.getUserId());
|
|
|
|
+ wxUser.setVipLv(wxRecharge.getVipLv());
|
|
|
|
+ wxUser.setVipStartTime(null == wxUser.getVipStartTime() ? LocalDate.now(ZoneId.of("Asia/Shanghai")) : wxUser.getVipStartTime());
|
|
|
|
+ wxUser.setVipEndTime(defDate(null == wxUser.getVipEndTime() ? wxUser.getVipStartTime() : wxUser.getVipEndTime(), wxUser.getVipLv()));
|
|
|
|
+ log.info("用户信息:{}", wxUser);
|
|
|
|
+ wxUserService.updateWxUser(wxUser);
|
|
log.debug("支付成功 ---> orderNo:" + result.getResult().getOutTradeNo());
|
|
log.debug("支付成功 ---> orderNo:" + result.getResult().getOutTradeNo());
|
|
// 返回成功(无需数据,系统状态码为200即可)
|
|
// 返回成功(无需数据,系统状态码为200即可)
|
|
return AjaxResult.success();
|
|
return AjaxResult.success();
|