开发者学堂课程【微服务+全栈在线教育实战项目演练(SpringCloud Alibaba+SpringBoot):课程支付功能(生成订单接口1)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/667/detail/11488
课程支付功能(生成订单接口1)
内容介绍:
一、 分析所需要的接口
二、 生成订单的接口
三、 根据订单 id 查询订单信息
一、 分析所需要的接口
使用代码生成器在 service-order 模块生成相关代码
首先,分析做课程支付的接口有那些?
1. 生成订单的接口,在订单表中加入一条数据
点立即购买,生成订单。
2. 根据订单 id 查询订单信息
在订单页面中,根据订单 id 查询订单信息。
3.生成微信支付的二维码
点去支付,生成支付的二维码
4.查询订单支付状态接口
查询状态看订单是否成功,如果支付成功则回到课程详情页面,如果支付不成功则等待支付成功后,再跳转回课程详情页面。
二、 生成订单的接口
1.点击“立即购买”,会生成课程的订单,跳转到订单页面
2.点立即购买,生成一个订单,向订单表中添加一条记录。
3.在表中加入订单号、课程 id、课程名称、课程封面、讲师名称这些值加入到表中。
3. 在这个过程中,会用到之前学的远程调用的技术点。
首先我们有一个课程的模块,在这个模块中,我们要做一个生成订单的功能,但是需要有课程信息的相关值,但是课程信息在课程表中,所以需要用到远程调用。在课程模块写一个根据课程id返回课程信息的接口,在 order 模块远程调用,得到课程信息。
在生成订单中,除了课程信息外,还需要其他的数据,这时还需要使用到远程调用。根据用户 id 查询出用户信息,从 ucenter 中调用所需要的信息。
代码示例:
#返回json的全局时间格式
spring.jackson.date-format=yyyy-11N-dd HH :mm :ss
spring.jackson.time-zone=GMT+8
#配置mapper xml文件的路径
mybatis-plus .mapper-locations=
classpath:cam /atguigu/eduorder/mapper /xoml/*.xml
#mybatis日志
mybatis-plus.configuration.log-impl=
ong. apache.ibatis.logging.stdcut.StdOutImpl
#nacos服务地址
spring.cloud.nacos .discovery.server-addr=127.0.0.1:8848
#开启熔断机制
feign.hystrix.enabled-true
#设置hystrix超时时间,默认1308ms
hystrix.cammand. def ault.execution
.isolation.thread.timeoutInMilliseconds=3008
@RestController
@RequestMapping(" / eduorder/order)
@CrossOrigin
public class OrderController {
@Autowired
private OrderService orderService;
//生成订单的方法
@PostMapping("createOrder/ {coursed}")
public R saveOrder(@PathVariable String courseId,HttpServletRequest request){
//创建订单,返回订单号
String orderNo= = orderService.createOrders
(courseId,JwtUtils.getMemberIdByJwtToken(request));
return R.ok().data("orderId" , orderNo) ;
@Service
public class OrderServiceImpl extends
ServiceImpl<OrderMapper,Order> implements OrderService {
//1生成订单的方法
@Override
public String createOrders(String courseld,String memberIdByJwtToken){
//通过远程调用根据用户id获取用户信息
//通过远程调用根据课程id获取课信息
return null;
}
三、 根据订单 id 查询订单信息
打开这个接口
代码示例:
//根据token获取用户信息
@GetMapping("getMemberInfo")
public R getMemberInfo(HttpServletRequest request) {
//调用jwt工具类的方法。根据request对象获取头信息,返回用户id
String memberId =
JwtUtils.getMemberIdByJwtToken(request) ;
//查询数据库根据用户id获取用户信息
UcenterMember member =
memberService.getById(memberId) ;
return R.ok() . data("userInfo" , member) ;
//根据用户id获取用户信息
@PostMapping(" getUserInfoOrder/{id})
public UcenterMemberOrder getUserInfoOrder(@PathVariable String id){
UcenterMember member = memberService. getById(id);
//把member对象里面值复制给UcenterMemberOrder对象
UcenterMemberOrder ucenterMemberOrder =
new UcenterMemberOrder() ;
BeanUtils.copyProperties(member, ucenterMemberOrder);
return ucenterMemberOrder;
//根据课程id查询课程信息
@PostMappingc"getCourselnfoOrderliid}
public CoursewebvoOrder getCourselnfoorder(@PathVariable String id) {
Coursewebvo courselnfo =
courseService.getBaseCourselnfo(id);
CourseWebVoOrder courseWebvoOrder =
newcoursewebVoOrderQ;
BeanUtils.copyProperties(courselnfo,coursewebvoOrder)
return courseWebvoOrder;}
#微信开放平台appid
wx. open. app_id=-wxed9954c01bb89b47
#微信开放平台appsecret
wx. open. app_secret=a7482517235173ddb4083788de60b90e
#徼信开放平台重定向url
wx. open. redirect_ur1=http://guli.shop/ api/ucenter/wx/callback
#返回json的全局时间格式
spring.jackson. date-format=
yyyy-MM-dd HH:mm: ssspring.jackson.time-zone=GMT+8
#配置mapper xml文件的路径
mybatis-plus.mapper-locations=
classpath:comatguigu/educenter/mapper/xml/*.xml
# nacos服务地址
spring.cloud. nacos.discovery.server-addr=127.0.0.1:8848
#mybatis日志
mybatis-plus.configuration. log-impl=org. apache. ibatis. logging.stdout.StdOutImpl
在 service-order 中就通过远程调用的方式,来调取相关信息,最后添加到数据库。首先,这三个服务在注册中心都需要进行注册,加上nacos地址,在启动类上加上一个注解。
在edu中也加上注册地址,在 order 里,在启动类上加一个注解。其次还有一个Enable Discover Client 注解。
通过 order 调用这两个服务,首先我们要创建两个 interface,一个是 edu 一个是 ucenter,在里面指定调用服务名称和调用接口的地址,最终实现远程调用。
本节课的小结:这节课主要分析了所需要做的接口,分别有生成订单的接口、根据订单 id 查询订单信息、生成微信支付的二维码、查询订单支付状态接口,最后把过程做了一个详细的分析。