Merge remote-tracking branch 'origin/master'

This commit is contained in:
flower 2019-01-26 01:04:46 +08:00
commit 1a53f0a436
6 changed files with 137 additions and 81 deletions

View File

@ -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 请求对象注意一些参数如appidmchid等不用设置方法内会自动从配置对象中获取到前提是对应配置中已经设置
* 示例参数
* {
"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));
//未支付订单

View File

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

View File

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

View File

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

View File

@ -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,

View File

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