课程支付功能(生成订单接口1) | 学习笔记

简介: 简介:快速学习课程支付功能(生成订单接口1)

开发者学堂课程【微服务+全栈在线教育实战项目演练(SpringCloud Alibaba+SpringBoot):课程支付功能(生成订单接口1)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/667/detail/11488


课程支付功能(生成订单接口1)

 

内容介绍:

一、 分析所需要的接口

二、 生成订单的接口

三、 根据订单 id 查询订单信息


一、 分析所需要的接口

使用代码生成器在 service-order 模块生成相关代码

image.png

首先,分析做课程支付的接口有那些?

1. 生成订单的接口,在订单表中加入一条数据

点立即购买,生成订单。

image.png

2. 根据订单 id 查询订单信息

在订单页面中,根据订单 id 查询订单信息。

 image.png

3.生成微信支付的二维码

点去支付,生成支付的二维码

image.png

4.查询订单支付状态接口

查询状态看订单是否成功,如果支付成功则回到课程详情页面,如果支付不成功则等待支付成功后,再跳转回课程详情页面。

 image.png

 

二、 生成订单的接口

1.点击“立即购买”,会生成课程的订单,跳转到订单页面

image.png

2.点立即购买,生成一个订单,向订单表中添加一条记录。

image.png

3.在表中加入订单号、课程 id、课程名称、课程封面、讲师名称这些值加入到表中。

image.png

3. 在这个过程中,会用到之前学的远程调用的技术点。

首先我们有一个课程的模块,在这个模块中,我们要做一个生成订单的功能,但是需要有课程信息的相关值,但是课程信息在课程表中,所以需要用到远程调用。在课程模块写一个根据课程id返回课程信息的接口,在 order 模块远程调用,得到课程信息。

在生成订单中,除了课程信息外,还需要其他的数据,这时还需要使用到远程调用。根据用户 id 查询出用户信息,从 ucenter 中调用所需要的信息。

image.png

代码示例:

#返回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 查询订单信息

打开这个接口

image.png

代码示例:

//根据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 查询订单信息、生成微信支付的二维码、查询订单支付状态接口,最后把过程做了一个详细的分析。

相关文章
|
10月前
|
存储 前端开发 区块链
基于区块链的慈善捐赠平台:透明与信任的未来
基于区块链的慈善捐赠平台:透明与信任的未来
510 24
|
机器学习/深度学习 人工智能 缓存
《主动式智能导购AI助手构建》解决方案深度评测
《主动式智能导购AI助手构建》解决方案利用先进的人工智能技术,旨在提升零售行业的顾客购物体验和优化销售流程。本文基于实际部署经验,从部署引导、实践原理、大模型应用及生产环境部署四个方面对该方案进行了深入评测,探讨了其优势与改进空间,为企业提供参考。
363 10
|
12月前
|
存储 缓存 负载均衡
从零到一:分布式缓存技术初探
分布式缓存通过将数据存储在多个节点上,利用负载均衡算法提高访问速度、降低数据库负载并增强系统可用性。常见产品有Redis、Memcached等。其优势包括性能扩展、高可用性、负载均衡和容错性,适用于页面缓存、应用对象缓存、状态缓存、并行处理、事件处理及极限事务处理等多种场景。
715 1
|
微服务 中间件 Nacos
01.【微服务架构】服务注册与发现:AP和CP,你选哪个?-- 面试准备+基本模型
【5月更文挑战第2天】面试准备应涵盖公司所使用的注册中心类型及其优缺点,了解其集群规模、QPS和机器性能。准备故障排查及优化案例。若公司未采用微服务,可熟悉ZooKeeper、Nacos或etcd的基本特性以讨论注册中心概念。面试时,可将话题引导至服务注册与发现,如被问及特定中间件,阐述为何选择它并讨论优缺点。当涉及微服务高可用性时,可强调服务注册与发现的作用。基础模型部分,需解释服务上线和下线流程,提及注册数据和分组功能,并举例说明。最后,简述服务注册与发现的高可用挑战。
395 8
|
前端开发 索引 Python
【已解决】Flask项目报错TypeError: tuple indices must be integers or slices, not str
【已解决】Flask项目报错TypeError: tuple indices must be integers or slices, not str
|
SQL 资源调度 数据库连接
Hive怎么调整优化Tez引擎的查询?在Tez上优化Hive查询的指南
在Tez上优化Hive查询,包括配置参数调整、理解并行化机制以及容器管理。关键步骤包括YARN调度器配置、安全阀设置、识别性能瓶颈(如mapper/reducer任务和连接操作),理解Tez如何动态调整mapper和reducer数量。例如,`tez.grouping.max-size` 影响mapper数量,`hive.exec.reducers.bytes.per.reducer` 控制reducer数量。调整并发和容器复用参数如`hive.server2.tez.sessions.per.default.queue` 和 `tez.am.container.reuse.enabled`
1431 0
|
XML 监控 druid
SpringBoot整合Druid数据源并配置监控
SpringBoot整合Druid数据源并配置监控
1752 1
|
网络协议 Java 关系型数据库
如何公网远程访问本地WebSocket服务端
如何公网远程访问本地WebSocket服务端
152 0
|
SQL 搜索推荐 关系型数据库
Windows 系统彻底卸载 SQL Server 通用方法
Windows 系统彻底卸载 SQL Server 通用方法
1640 0
Windows 系统彻底卸载 SQL Server 通用方法
|
SQL 监控 关系型数据库
MySQL 8.0不再担心被垃圾SQL搞爆内存
MySQL 8.0.28开始,新增一个特性,支持监控统计并限制各个连接(会话)的内存消耗,避免大量用户连接因为执行垃圾SQL消耗过多内存,造成可能被OOM kill的风险。 首先,需要先设置系统选项 global_connection_memory_tracking = 1,之后可以通过系统状态变量 Global_connection_memory 查看当前所有连接消耗的内存总量:
923 0