一、需求分析
一些课程为收费课程,课程详情页面会有立即支付按钮,支付后才能观看。
支付后需要弹出微信二维码和一些订单号信息。
二、数据库表单设计
- 两张表
- 订单表(t_order):点击立即支付之后就会生成订单表的一行记录
- 支付记录表(t_Pay_Log):支付后生成支付记录表的一行记录
三、controller层接口
按照支付的流程,controller一共五个接口(只介绍重要的接口)
接口一:
- 点击立即购买按钮,根据课程id,在订单表中生成一个记录,并返回这个记录的订单号。
//1 生成订单的方法(点击付费课程的立即购买时)
@PostMapping("/createOrder/{courseId}")
public R saveOrder(@PathVariable String courseId, HttpServletRequest request) {//通过JWT工具类获取前端请求中的token从而获取用户id
//创建订单,返回订单号
String orderNo =
orderService.createOrders(courseId, JwtUtils.getMemberIdByJwtToken(request));
return R.ok().data("orderId",orderNo);//后面支付时需要订单号
}
- 注意有一个JWT工具类,解析request请求头中的token,从而得到用户ID
- 查看orderService实现类的createOrders方法:
@Service
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
@Autowired
private EduClient eduClient;
@Autowired
private UcenterClient ucenterClient;
//1 生成订单的方法(点击付费课程的立即购买时)
@Override
public String createOrders(String courseId, String memberId) {
//通过远程调用根据用户id获取用户信息
UcenterMemberOrder userInfoOrder = ucenterClient.getUserInfoOrder(memberId);
//通过远程调用根据课程id获取课信息
CourseWebVoOrder courseInfoOrder = eduClient.getCourseInfoOrder(courseId);
//创建Order对象,向order对象里面设置需要数据
Order order = new Order();
order.setOrderNo(OrderNoUtil.getOrderNo());//订单号(也可以用UUID生成,面试重点!!)
order.setCourseId(courseId); //课程id
order.setCourseTitle(c