Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
1a53f0a436
|
|
@ -49,7 +49,8 @@ public class ApiWxPayController extends BaseController {
|
|||
|
||||
@Autowired
|
||||
private IVipUserOrdersService vipUserOrdersService;
|
||||
|
||||
@Autowired
|
||||
private ISysUserService sysUserService;
|
||||
@Autowired
|
||||
private WxPayService wxService;
|
||||
@PostMapping("/notify/order")
|
||||
|
|
@ -110,6 +111,7 @@ public class ApiWxPayController extends BaseController {
|
|||
public <T> T createOrder(@RequestBody WxPayUnifiedOrderRequest request) throws WxPayException {
|
||||
request.setOutTradeNo( IdUtil.simpleUUID());
|
||||
request.setSpbillCreateIp( IpUtils.getIpAddr( ServletUtils.getRequest()));
|
||||
|
||||
VipUserOrders userOrders = new VipUserOrders();
|
||||
userOrders.setId(request.getOutTradeNo());
|
||||
userOrders.setVipUserId(Integer.parseInt(request.getOpenid()));
|
||||
|
|
@ -129,15 +131,32 @@ public class ApiWxPayController extends BaseController {
|
|||
* 接口地址:https://api.mch.weixin.qq.com/pay/unifiedorder
|
||||
*
|
||||
* @param request 请求对象,注意一些参数如appid、mchid等不用设置,方法内会自动从配置对象中获取到(前提是对应配置中已经设置)
|
||||
* 示例参数
|
||||
* {
|
||||
"body":"测试商品",
|
||||
"outTradeNo":"12344324242342342342554",
|
||||
"totalFee":1.01,
|
||||
"spbillCreateIp":"1.80.82.241",
|
||||
"notifyUrl":"http://www.baidu.com",
|
||||
"tradeType":"JSAPI",
|
||||
"productId":"13652b4a71df2f49e3647c55c8e31a88"
|
||||
"openid":''
|
||||
}
|
||||
返回
|
||||
{
|
||||
"codeUrl": "weixin://wxpay/bizpayurl?pr=pK0R74G"
|
||||
}
|
||||
*/
|
||||
@ApiOperation(value = "原生的统一下单接口")
|
||||
@PostMapping("/unifiedOrder")
|
||||
public WxPayUnifiedOrderResult unifiedOrder(@RequestBody WxPayUnifiedOrderRequest request) throws WxPayException {
|
||||
request.setOutTradeNo( IdUtil.simpleUUID());
|
||||
request.setSpbillCreateIp( IpUtils.getIpAddr( ServletUtils.getRequest()));
|
||||
request.setSignType( "MD5" );
|
||||
VipUserOrders userOrders = new VipUserOrders();
|
||||
userOrders.setId(request.getOutTradeNo());
|
||||
userOrders.setVipUserId(ShiroUtils.getUserId().intValue());
|
||||
SysUser sysUser = sysUserService.selectUserByLoginName( JwtUtil.getLoginName() );
|
||||
userOrders.setVipUserId(sysUser.getUserId().intValue());
|
||||
userOrders.setTrainCourseId(Integer.parseInt(request.getProductId()));
|
||||
userOrders.setPrice(new BigDecimal(request.getTotalFee().intValue()/100));
|
||||
//未支付订单
|
||||
|
|
|
|||
|
|
@ -79,6 +79,10 @@
|
|||
font-size: 24px;
|
||||
color: #e91c35;
|
||||
}
|
||||
.courseInfo-right .price-info-free {
|
||||
font-size: 24px;
|
||||
color: #3ab57f;
|
||||
}
|
||||
|
||||
|
||||
.courseInfo-right .button {
|
||||
|
|
@ -177,7 +181,8 @@
|
|||
安全测试基础课程
|
||||
</div>
|
||||
<div class="price">
|
||||
<span class="price-info"><span th:text="'¥'+${trainCourse.price}"></span></span>
|
||||
<span th:if="${trainCourse.price>0}" class="price-info"><span th:text="'¥'+${trainCourse.price}"></span></span>
|
||||
<span th:if="${trainCourse.price==0}" class="price-info-free"><span th:text="免费"></span></span>
|
||||
</div>
|
||||
<div class="button" th:if="${trainCourse.price>0 && !courseAuth}">
|
||||
<input type="button" onclick="shop()" class="hb-ui-btn" value="立刻购买">
|
||||
|
|
@ -257,7 +262,7 @@
|
|||
"outTradeNo":"12344324242342342342554",
|
||||
"totalFee":[[${trainCourse.price*100}]],
|
||||
"spbillCreateIp":"1.80.82.241",
|
||||
"notifyUrl":"http://ceshi4.yqhl.cc/api/v1/wx/pay/notify/order",
|
||||
//"notifyUrl":"http://ceshi4.yqhl.cc/api/v1/wx/pay/notify/order",
|
||||
"tradeType":"NATIVE",
|
||||
"productId":"[[${trainCourse.id}]]",
|
||||
"openid":userId
|
||||
|
|
|
|||
|
|
@ -2,10 +2,12 @@ package com.ruoyi.train.course.controller;
|
|||
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.ruoyi.common.base.AjaxResult;
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import com.ruoyi.framework.jwt.JwtUtil;
|
||||
import com.ruoyi.framework.web.base.BaseController;
|
||||
import com.ruoyi.framework.web.util.ShiroUtils;
|
||||
import com.ruoyi.system.domain.SysUser;
|
||||
import com.ruoyi.system.service.ISysConfigService;
|
||||
import com.ruoyi.system.service.ISysUserService;
|
||||
import com.ruoyi.train.course.domain.*;
|
||||
import com.ruoyi.train.course.service.ITrainCourseCategoryService;
|
||||
|
|
@ -26,84 +28,101 @@ import java.util.List;
|
|||
@RestController
|
||||
@RequestMapping("/api/v1")
|
||||
public class ApiTrainCourseController extends BaseController {
|
||||
@Autowired
|
||||
private ITrainCourseService trainCourseService;
|
||||
@Autowired
|
||||
private ITrainCourseUserService trainCourseUserService ;
|
||||
@Autowired
|
||||
private ITrainCourseCategoryService trainCourseCategoryService;
|
||||
@Autowired
|
||||
private ITrainCourseService trainCourseService;
|
||||
@Autowired
|
||||
private ITrainCourseUserService trainCourseUserService;
|
||||
@Autowired
|
||||
private ITrainCourseCategoryService trainCourseCategoryService;
|
||||
|
||||
@Autowired
|
||||
private ITrainCourseSectionService trainCourseSectionService;
|
||||
@Autowired
|
||||
private ITrainCourseSectionService trainCourseSectionService;
|
||||
|
||||
@Autowired
|
||||
private ISysUserService sysUserService;
|
||||
/**
|
||||
* 查询课程列表
|
||||
*/
|
||||
@GetMapping("/trainCourse/category")
|
||||
public AjaxResult list( TrainCourseCategory category) {
|
||||
List<TrainCourseCategory> trainCourseCategories = trainCourseCategoryService.selectCategoryList( category );
|
||||
AjaxResult success = success( "查询成功" );
|
||||
success.put( "data", trainCourseCategories );
|
||||
return success;
|
||||
}
|
||||
/**
|
||||
* 查询课程列表
|
||||
*/
|
||||
@GetMapping("/trainCourse/list")
|
||||
public AjaxResult list( TrainCourseVO trainCourse) {
|
||||
List<TrainCourseVO> list = trainCourseService.selectTrainCoursePage( trainCourse );
|
||||
AjaxResult success = success( "查询成功" );
|
||||
success.put( "data", list );
|
||||
return success;
|
||||
}
|
||||
/**
|
||||
* 查询我的课程列表
|
||||
*/
|
||||
@GetMapping("/trainCourse/myList")
|
||||
public AjaxResult myList( TrainCourseVO trainCourse) {
|
||||
SysUser sysUser = sysUserService.selectUserByLoginName( JwtUtil.getLoginName() );
|
||||
trainCourse.setUserId( sysUser.getUserId().intValue() );
|
||||
List<TrainCourseVO> list = trainCourseService.selectTrainCoursePage( trainCourse );
|
||||
AjaxResult success = success( "查询成功" );
|
||||
success.put( "data", list );
|
||||
return success;
|
||||
}
|
||||
/**
|
||||
* 查询课程详情
|
||||
*/
|
||||
@GetMapping("/trainCourse/{id}")
|
||||
public AjaxResult get(@PathVariable("id") Integer id) {
|
||||
TrainCourse trainCourse = trainCourseService.selectById( id );
|
||||
AjaxResult success = success( "查询成功" );
|
||||
success.put( "data", trainCourse );
|
||||
return success;
|
||||
}
|
||||
@Autowired
|
||||
private ISysUserService sysUserService;
|
||||
@Autowired
|
||||
private ISysConfigService configService;
|
||||
/**
|
||||
* 查询课程列表
|
||||
*/
|
||||
@GetMapping("/trainCourse/category")
|
||||
public AjaxResult list(TrainCourseCategory category) {
|
||||
List<TrainCourseCategory> trainCourseCategories = trainCourseCategoryService.selectCategoryList( category );
|
||||
AjaxResult success = success( "查询成功" );
|
||||
success.put( "data", trainCourseCategories );
|
||||
return success;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询课程章节列表详情
|
||||
*/
|
||||
@GetMapping("/trainCourse/{id}/section")
|
||||
public AjaxResult trainCourseSection(@PathVariable("id") Integer id) {
|
||||
TrainCourseSection trainCourseSection = new TrainCourseSection();
|
||||
trainCourseSection.setTrainCourseId( id );
|
||||
List<TrainCourseSection> trainCourseSections = trainCourseSectionService.selectTrainCourseSectionList( trainCourseSection );
|
||||
/**
|
||||
* 查询课程列表
|
||||
*/
|
||||
@GetMapping("/trainCourse/list")
|
||||
public AjaxResult list(TrainCourseVO trainCourse) {
|
||||
List<TrainCourseVO> list = trainCourseService.selectTrainCoursePage( trainCourse );
|
||||
AjaxResult success = success( "查询成功" );
|
||||
success.put( "data", list );
|
||||
return success;
|
||||
}
|
||||
|
||||
AjaxResult success = success( "查询成功" );
|
||||
success.put( "data", trainCourseSections );
|
||||
return success;
|
||||
}
|
||||
/**
|
||||
* 查询课程章节列表详情
|
||||
*/
|
||||
@GetMapping("/trainCourse/section/{id}")
|
||||
public AjaxResult trainCourseSectionInfo(@PathVariable("id") Integer id) {
|
||||
TrainCourseSection trainCourseSections = trainCourseSectionService.selectById( id );
|
||||
/**
|
||||
* 查询我的课程列表
|
||||
*/
|
||||
@GetMapping("/trainCourse/myList")
|
||||
public AjaxResult myList(TrainCourseVO trainCourse) {
|
||||
SysUser sysUser = sysUserService.selectUserByLoginName( JwtUtil.getLoginName() );
|
||||
trainCourse.setUserId( sysUser.getUserId().intValue() );
|
||||
List<TrainCourseVO> list = trainCourseService.selectTrainCoursePage( trainCourse );
|
||||
AjaxResult success = success( "查询成功" );
|
||||
success.put( "data", list );
|
||||
return success;
|
||||
}
|
||||
|
||||
AjaxResult success = success( "查询成功" );
|
||||
success.put( "data", trainCourseSections );
|
||||
return success;
|
||||
}
|
||||
/**
|
||||
* 查询课程详情
|
||||
*/
|
||||
@GetMapping("/trainCourse/{id}")
|
||||
public AjaxResult get(@PathVariable("id") Integer id) {
|
||||
TrainCourse trainCourse = trainCourseService.selectById( id );
|
||||
boolean courseAuth = false;
|
||||
String courseDays = configService.selectConfigByKey( "course.days" );
|
||||
String loginName = JwtUtil.getLoginName();
|
||||
if (StringUtils.isNotEmpty( loginName )) {
|
||||
SysUser sysUser = sysUserService.selectUserByLoginName( loginName );
|
||||
if (sysUser != null) {
|
||||
courseAuth = trainCourseUserService.authority( sysUser.getUserId(), id );
|
||||
}
|
||||
}
|
||||
AjaxResult success = success( "查询成功" );
|
||||
success.put( "data", trainCourse );
|
||||
success.put( "courseAuth", courseAuth );
|
||||
success.put( "courseDays", courseDays );
|
||||
return success;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询课程章节列表详情
|
||||
*/
|
||||
@GetMapping("/trainCourse/{id}/section")
|
||||
public AjaxResult trainCourseSection(@PathVariable("id") Integer id) {
|
||||
TrainCourseSection trainCourseSection = new TrainCourseSection();
|
||||
trainCourseSection.setTrainCourseId( id );
|
||||
List<TrainCourseSection> trainCourseSections = trainCourseSectionService.selectTrainCourseSectionList( trainCourseSection );
|
||||
|
||||
AjaxResult success = success( "查询成功" );
|
||||
success.put( "data", trainCourseSections );
|
||||
return success;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询课程章节列表详情
|
||||
*/
|
||||
@GetMapping("/trainCourse/section/{id}")
|
||||
public AjaxResult trainCourseSectionInfo(@PathVariable("id") Integer id) {
|
||||
TrainCourseSection trainCourseSections = trainCourseSectionService.selectById( id );
|
||||
|
||||
AjaxResult success = success( "查询成功" );
|
||||
success.put( "data", trainCourseSections );
|
||||
return success;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ public class WxPayConfiguration {
|
|||
payConfig.setSubAppId(StringUtils.trimToNull(this.properties.getSubAppId()));
|
||||
payConfig.setSubMchId(StringUtils.trimToNull(this.properties.getSubMchId()));
|
||||
payConfig.setKeyPath(StringUtils.trimToNull(this.properties.getKeyPath()));
|
||||
|
||||
payConfig.setNotifyUrl(StringUtils.trimToNull(this.properties.getNotifyUrl()));
|
||||
// 可以指定是否使用沙箱环境
|
||||
payConfig.setUseSandboxEnv(false);
|
||||
|
||||
|
|
|
|||
|
|
@ -40,6 +40,10 @@ public class WxPayProperties {
|
|||
* apiclient_cert.p12文件的绝对路径,或者如果放在项目中,请以classpath:开头指定
|
||||
*/
|
||||
private String keyPath;
|
||||
/**
|
||||
* 支付成功回调地址
|
||||
*/
|
||||
private String notifyUrl;
|
||||
|
||||
public String getAppId() {
|
||||
return this.appId;
|
||||
|
|
@ -89,6 +93,14 @@ public class WxPayProperties {
|
|||
this.keyPath = keyPath;
|
||||
}
|
||||
|
||||
public String getNotifyUrl() {
|
||||
return notifyUrl;
|
||||
}
|
||||
|
||||
public void setNotifyUrl(String notifyUrl) {
|
||||
this.notifyUrl = notifyUrl;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return ToStringBuilder.reflectionToString(this,
|
||||
|
|
|
|||
|
|
@ -11,9 +11,10 @@ wechat:
|
|||
token: 111
|
||||
aesKey: 111
|
||||
pay:
|
||||
appId: wxf9fcc68ce428cfb6 #wxd67baf702dad665c #微信公众号或者小程序等的appid #wx6b73f1161cbfd5f3
|
||||
appId: wxd67baf702dad665c #wxd67baf702dad665c #微信公众号或者小程序等的appid #wx6b73f1161cbfd5f3
|
||||
mchId: 1518812711 #微信支付商户号 #1518466961
|
||||
mchKey: nantongjunruanquanjishu888888888 #微信支付商户密钥 #nantonghanhaixinxijishuyouxian88
|
||||
subAppId: #服务商模式下的子商户公众账号ID
|
||||
subMchId: #服务商模式下的子商户号
|
||||
keyPath: # p12证书的位置,可以指定绝对路径,也可以指定类路径(以classpath:开头)
|
||||
keyPath: # p12证书的位置,可以指定绝对路径,也可以指定类路径(以classpath:开头)
|
||||
notifyUrl: http://ceshi4.yqhl.cc/api/v1/wx/pay/notify/order
|
||||
Loading…
Reference in New Issue