微信支付回调
This commit is contained in:
parent
bc6328c38e
commit
fd71a1ac61
|
|
@ -25,7 +25,9 @@ public class SysIndexController extends BaseController
|
||||||
@GetMapping({"","/"})
|
@GetMapping({"","/"})
|
||||||
public String cmsindex(ModelMap mmap)
|
public String cmsindex(ModelMap mmap)
|
||||||
{
|
{
|
||||||
|
// 取身份信息
|
||||||
|
SysUser user = getSysUser();
|
||||||
|
mmap.put("user", user);
|
||||||
return "web";
|
return "web";
|
||||||
}
|
}
|
||||||
// 系统首页
|
// 系统首页
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,8 @@ import com.ruoyi.train.course.service.ITrainCourseUserService;
|
||||||
import com.ruoyi.vip.domain.VipUserOrders;
|
import com.ruoyi.vip.domain.VipUserOrders;
|
||||||
import com.ruoyi.vip.service.IVipUserOrdersService;
|
import com.ruoyi.vip.service.IVipUserOrdersService;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
|
@ -39,6 +41,8 @@ import java.util.List;
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/api/v1/wx/pay")
|
@RequestMapping("/api/v1/wx/pay")
|
||||||
public class ApiWxPayController extends BaseController {
|
public class ApiWxPayController extends BaseController {
|
||||||
|
|
||||||
|
private static final Logger log = LoggerFactory.getLogger( ApiWxPayController.class );
|
||||||
@Autowired
|
@Autowired
|
||||||
private ITrainCourseUserService trainCourseUserService ;
|
private ITrainCourseUserService trainCourseUserService ;
|
||||||
|
|
||||||
|
|
@ -49,7 +53,9 @@ public class ApiWxPayController extends BaseController {
|
||||||
private WxPayService wxService;
|
private WxPayService wxService;
|
||||||
@PostMapping("/notify/order")
|
@PostMapping("/notify/order")
|
||||||
public String parseOrderNotifyResult(@RequestBody String xmlData) throws WxPayException {
|
public String parseOrderNotifyResult(@RequestBody String xmlData) throws WxPayException {
|
||||||
|
|
||||||
final WxPayOrderNotifyResult notifyResult = this.wxService.parseOrderNotifyResult(xmlData);
|
final WxPayOrderNotifyResult notifyResult = this.wxService.parseOrderNotifyResult(xmlData);
|
||||||
|
log.debug("-------------------------------支付回调中----------------------------");
|
||||||
if (null != notifyResult && notifyResult.getReturnCode().equals("SUCCESS")) {
|
if (null != notifyResult && notifyResult.getReturnCode().equals("SUCCESS")) {
|
||||||
VipUserOrders userOrders = new VipUserOrders();
|
VipUserOrders userOrders = new VipUserOrders();
|
||||||
userOrders.setId(notifyResult.getOutTradeNo());
|
userOrders.setId(notifyResult.getOutTradeNo());
|
||||||
|
|
@ -101,12 +107,14 @@ public class ApiWxPayController extends BaseController {
|
||||||
request.setSpbillCreateIp( IpUtils.getIpAddr( ServletUtils.getRequest()));
|
request.setSpbillCreateIp( IpUtils.getIpAddr( ServletUtils.getRequest()));
|
||||||
VipUserOrders userOrders = new VipUserOrders();
|
VipUserOrders userOrders = new VipUserOrders();
|
||||||
userOrders.setId(request.getOutTradeNo());
|
userOrders.setId(request.getOutTradeNo());
|
||||||
userOrders.setVipUserId(ShiroUtils.getUserId().intValue());
|
userOrders.setVipUserId(Integer.parseInt(request.getOpenid()));
|
||||||
userOrders.setTrainCourseId(Integer.parseInt(request.getProductId()));
|
userOrders.setTrainCourseId(Integer.parseInt(request.getProductId()));
|
||||||
userOrders.setPrice(new BigDecimal(request.getTotalFee().intValue()/100));
|
userOrders.setPrice(new BigDecimal(request.getTotalFee().intValue()/100));
|
||||||
//未支付订单
|
//未支付订单
|
||||||
userOrders.setDelFlag("0");
|
userOrders.setDelFlag("0");
|
||||||
vipUserOrdersService.insert(userOrders);
|
vipUserOrdersService.insert(userOrders);
|
||||||
|
//零时存放我们自己的用户id,这儿清空
|
||||||
|
request.setOpenid(null);
|
||||||
return this.wxService.createOrder(request);
|
return this.wxService.createOrder(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ import com.ruoyi.common.utils.file.FileUtils;
|
||||||
import com.ruoyi.exam.domain.ExamPractice;
|
import com.ruoyi.exam.domain.ExamPractice;
|
||||||
import com.ruoyi.exam.service.IExamPracticeService;
|
import com.ruoyi.exam.service.IExamPracticeService;
|
||||||
import com.ruoyi.framework.web.util.ShiroUtils;
|
import com.ruoyi.framework.web.util.ShiroUtils;
|
||||||
|
import com.ruoyi.system.service.ISysConfigService;
|
||||||
import com.ruoyi.system.service.ISysUserService;
|
import com.ruoyi.system.service.ISysUserService;
|
||||||
import com.ruoyi.train.course.domain.TrainCourse;
|
import com.ruoyi.train.course.domain.TrainCourse;
|
||||||
import com.ruoyi.train.course.domain.TrainCourseCategory;
|
import com.ruoyi.train.course.domain.TrainCourseCategory;
|
||||||
|
|
@ -57,6 +58,9 @@ public class CmsController {
|
||||||
@Autowired
|
@Autowired
|
||||||
private IExamPracticeService examPracticeService;
|
private IExamPracticeService examPracticeService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ISysConfigService configService;
|
||||||
|
|
||||||
@RequestMapping({"", "/index", "/index.html"})
|
@RequestMapping({"", "/index", "/index.html"})
|
||||||
@GetMapping()
|
@GetMapping()
|
||||||
public String index(String parentIds, ModelMap map) {
|
public String index(String parentIds, ModelMap map) {
|
||||||
|
|
@ -108,11 +112,15 @@ public class CmsController {
|
||||||
ExamPractice examPractice = new ExamPractice();
|
ExamPractice examPractice = new ExamPractice();
|
||||||
examPractice.setTrainCourseId( id );
|
examPractice.setTrainCourseId( id );
|
||||||
List<ExamPractice> examPractices = examPracticeService.selectExamPracticeList( examPractice );
|
List<ExamPractice> examPractices = examPracticeService.selectExamPracticeList( examPractice );
|
||||||
|
|
||||||
|
boolean courseAuth=false;
|
||||||
|
String s = configService.selectConfigByKey( "course.days" );
|
||||||
if (ShiroUtils.getSysUser() != null) {
|
if (ShiroUtils.getSysUser() != null) {
|
||||||
boolean b = trainCourseUserService.authority( ShiroUtils.getSysUser().getUserId(), id );
|
courseAuth = trainCourseUserService.authority( ShiroUtils.getSysUser().getUserId(), id );
|
||||||
map.put( "user", ShiroUtils.getSysUser() );
|
|
||||||
map.put( "courseAuth",b);
|
|
||||||
}
|
}
|
||||||
|
map.put( "courseAuth",courseAuth);
|
||||||
|
map.put( "user", ShiroUtils.getSysUser() );
|
||||||
|
map.put( "courseDays", s );
|
||||||
map.put( "trainCourse", trainCourse );
|
map.put( "trainCourse", trainCourse );
|
||||||
map.put( "trainCourseSections", trainCourseSections );
|
map.put( "trainCourseSections", trainCourseSections );
|
||||||
map.put( "examPractices", examPractices );
|
map.put( "examPractices", examPractices );
|
||||||
|
|
|
||||||
|
|
@ -168,7 +168,9 @@
|
||||||
<div class="image" id="courseImage">
|
<div class="image" id="courseImage">
|
||||||
<div id="view_flv" style="display:none;"></div>
|
<div id="view_flv" style="display:none;"></div>
|
||||||
<div class="course-pro0"></div>
|
<div class="course-pro0"></div>
|
||||||
<img th:src="${trainCourse.cover}" class="course-cover" onerror="this.src='/sysimg/nopic.gif'" width="480" height="290">
|
<img th:if="${#strings.isEmpty(trainCourse.cover)}" th:src="@{/web/res/images/no_img.png}" th:alt="${trainCourse.name}" class="course-cover" width="480" height="290">
|
||||||
|
<img th:if="${not #strings.isEmpty(trainCourse.cover)}" th:src="${trainCourse.cover}" th:alt="${trainCourse.name}" class="course-cover" width="480" height="290">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="courseInfo-right">
|
<div class="courseInfo-right">
|
||||||
<div class="name" th:text="${trainCourse.name}">
|
<div class="name" th:text="${trainCourse.name}">
|
||||||
|
|
@ -177,9 +179,9 @@
|
||||||
<div class="price">
|
<div class="price">
|
||||||
<span class="price-info"><span th:text="'¥'+${trainCourse.price}"></span></span>
|
<span class="price-info"><span th:text="'¥'+${trainCourse.price}"></span></span>
|
||||||
</div>
|
</div>
|
||||||
<div class="button">
|
<div class="button" th:if="${trainCourse.price>0}">
|
||||||
<input type="button" onclick="shop()" class="hb-ui-btn" value="立刻购买">
|
<input type="button" onclick="shop()" class="hb-ui-btn" value="立刻购买">
|
||||||
<em>有效期:<span id="shixian">${config.getKey("course.days")}</span>(天)</em>
|
<em>有效期:<span id="shixian" th:text="${courseDays}"></span>(天)</em>
|
||||||
</div>
|
</div>
|
||||||
<div class="remark" th:text="${trainCourse.description}">
|
<div class="remark" th:text="${trainCourse.description}">
|
||||||
|
|
||||||
|
|
@ -241,32 +243,38 @@
|
||||||
|
|
||||||
});
|
});
|
||||||
function shop() {
|
function shop() {
|
||||||
var data={
|
var userId="[[${user.userId}]]";
|
||||||
"body":"[[${trainCourse.name}]]",
|
if(userId){
|
||||||
"outTradeNo":"12344324242342342342554",
|
var data={
|
||||||
"totalFee":[[${trainCourse.price*100}]],
|
"body":"[[${trainCourse.name}]]",
|
||||||
"spbillCreateIp":"1.80.82.241",
|
"outTradeNo":"12344324242342342342554",
|
||||||
"notifyUrl":"http://ceshi4.yqhl.cc/api/v1/wx/pay/notify/order",
|
"totalFee":[[${trainCourse.price*100}]],
|
||||||
"tradeType":"NATIVE",
|
"spbillCreateIp":"1.80.82.241",
|
||||||
"productId":"[[${trainCourse.id}]]"
|
"notifyUrl":"http://ceshi4.yqhl.cc/api/v1/wx/pay/notify/order",
|
||||||
};
|
"tradeType":"NATIVE",
|
||||||
$.ajax({
|
"productId":"[[${trainCourse.id}]]",
|
||||||
type: 'post',
|
"openid":userId
|
||||||
url: "/api/vi/wx/pay/createOrder",
|
};
|
||||||
contentType: "application/json",
|
$.ajax({
|
||||||
dataType : 'json',
|
type: 'post',
|
||||||
data:JSON.stringify(data),
|
url: "/api/v1/wx/pay/createOrder",
|
||||||
success: function (result) {
|
contentType: "application/json",
|
||||||
if(!result.code){
|
dataType : 'json',
|
||||||
alertPayQrcode(result.codeUrl)
|
data:JSON.stringify(data),
|
||||||
}else {
|
success: function (result) {
|
||||||
layer.msg('生成支付二维码失败',{
|
if(!result.code){
|
||||||
time: 2000, //20s后自动关闭
|
alertPayQrcode(result.codeUrl)
|
||||||
btn: ['明白了']
|
}else {
|
||||||
});
|
layer.msg('生成支付二维码失败',{
|
||||||
|
time: 2000, //20s后自动关闭
|
||||||
|
btn: ['明白了']
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
});
|
}else{
|
||||||
|
location.href="/web/user/login.html"
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
function alertPayQrcode(codeUrl) {
|
function alertPayQrcode(codeUrl) {
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package com.ruoyi.train.course.mapper;
|
||||||
|
|
||||||
import com.ruoyi.framework.web.base.MyMapper;
|
import com.ruoyi.framework.web.base.MyMapper;
|
||||||
import com.ruoyi.train.course.domain.TrainCourseUser;
|
import com.ruoyi.train.course.domain.TrainCourseUser;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
@ -25,9 +26,10 @@ public interface TrainCourseUserMapper extends MyMapper<TrainCourseUser>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 判断是否有权限
|
* 判断是否有权限
|
||||||
* @param userId
|
* @param vipUserId
|
||||||
* @param trainCourseId
|
* @param trainCourseId
|
||||||
|
* @param days 有效期
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<TrainCourseUser> authority(Long userId, Integer trainCourseId,Integer days);
|
List<TrainCourseUser> authority(@Param("vipUserId") Long vipUserId, @Param("trainCourseId") Integer trainCourseId, @Param("days") Integer days);
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue