微信支付回调

This commit is contained in:
zhujj 2019-01-25 15:03:57 +08:00
parent bc6328c38e
commit fd71a1ac61
5 changed files with 63 additions and 35 deletions

View File

@ -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";
} }
// 系统首页 // 系统首页

View File

@ -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);
} }

View File

@ -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 );

View File

@ -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) {

View File

@ -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);
} }