点餐系统,项目注意点(微信支付)

1、创建新订单(在高并发的情况下,减库存会出现问题)超卖,采用Redis的锁来解决

  • 商品价格一定要去自己的数据库去查询,不能有前端传来
  • 在创建新订单前,确保库存充足,不能出现超卖的情况
  • 查询商品(单价,数量)
    1. 根据商品的product_id
    2. 如果为空则抛出异常,商品不存在
    3. 设置OrderDetail时,设置了6位id,要确保在高并发情况下,id不重复,要添加synchronized锁
    4. 在创建订单Service层,添加事务注解,确保下单成功,如果不成功则进行回滚
  • 计算总金额
  • 写入数据库(OrderMaster, OrderDetail) -> OrderDTO(包含前两个表的所有信息)
  • 扣库存

2、查询订单

  • 传入orderId,如果查询出orderMaster列表为空则直接抛出异常
  • 传入orderId,如果查询出orderDetail列表为空则直接抛出异常
  • 创建orderDTO。将orderMaster属性拷贝给orderDTO,并设置orderDetail;

3、查询订单列表(buyerOpenId) 前端不需要详情页,只需要订单主列表

  • 查询出来的orderMaster要转换为orderDTO
  • 需要判断查询订单的人是否是本人

4、取消订单(需要判断是本人)

订单状态(已取消,新订单,已完结)

  • 判断订单状态
    1. 如果订单状态是新订单则可以进行下不操作;
  • 修改订单状态
    1. 如果返回为空,则证明更新失败,要掏出异常
  • 返还库存(重点)
    1. 判断是否有商品(CollectionsUtils.isEmpty())
  • 如果已支付还需退款

5、完结订单

  • 判断订单状态
  • 修改订单状态

6、支付订单

  • 判断订单状态
  • 判断订单支付状态
  • 修改订单支付状态

7、微信特性(公众号支付)

微信支付开发文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
网页授权:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html
微信测试平台:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

目录

1 第一步:用户同意授权,获取code (code是换取access_token的票据。5分钟内有效)
2 第二步:通过code换取网页授权access_token(这一步可以拿到OppenID)
3 第三步:刷新access_token(如果需要)
4 第四步:拉取用户信息(需scope为 snsapi_userinfo)
5 附:检验授权凭证(access_token)是否有效

在这里插入图片描述

7.1、微信授权
  • 获取OpenID
    1. 手工方式
      • 在微信公众号设置,设置网页授权域名

      • 在这里插入图片描述

      • 编写重定向地址在这里插入图片描述

      • 用户同意授权后

        如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。

      • 通过code换取网页授权access_token(里面有OpenId)

      • 在这里插入图片描述

      • 传入微信公众号的appid和secret和第一步所获取的用户的code

总结

1、设置域名(白名单验证,将验证文件放在项目的根目录下,用到内网穿透工具)
2、获取code(scope两个方式,无感知,和用户感知的| base和userInfo)
3、用code换取access_token

  1. 第三方SDK Software Development Kit(软件开发工具包)
    1. sdk的位置:https://github.com/Wechat-Group/WxJava
    2. 微信支付授权:https://github.com/Wechat-Group/WxJava/wiki/MP_OAuth2%E7%BD%91%E9%A1%B5%E6%8E%88%E6%9D%83
7.2、微信支付(使用到统一下单接口和支付结果通知接口和退款接口)

在这里插入图片描述

  • 支付所使用的sdk:https://github.com/Pay-Group/best-pay-sdk

  • 在这里插入图片描述

  • 支付需要的有:商户号、商户密钥、商户证书路径,微信支付的异步通知的地址(很重要否则不能发起微信支付)

  • 生成用户订单

  • 调用统一用户下单API 返回预支付信息

  • 在这里插入图片描述

  • 生成JSAPI页面调用的支付参数并签名

  • 异步通知

    1. 验证签名
    2. 支付的状态
    3. 支付的金额
    4. 支付人(下单人==支付人)
  • 返回商家的处理结果(不返回的 话,微信一直会异步通知)==== 很重要

7.3、微信退款

在这里插入图片描述

  • 退款需要证书(双向证书)(商户平台那下载证书)
商家登录
  • 将token设置到redis,在登录的时候就去找redis要,k为固定前缀+token(uuid), v为openid,并设置过期时间
  • 将token设置到cookie

向从cookie查询token,然后再去redis查询对应的value

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210403165054154.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNTE4NDI1,size_16,color_FFFFFF,t_70

商家登出
  • 先从request中取出cookie的值,遍历cookies的数组
    *
    先删除redis中的,在删除cookie中的,将cookis中的过期时间设置为0就可以将其删除
AOP做权限管理

在这里插入图片描述
切入点之前的操作所出现的异常全部抛出,在定义一个异常处理类专门处理
@ControllerAdvice
在这里插入图片描述
@ControllerAdvice注解的作用:https://www.cnblogs.com/lenve/p/10748453.html

模板消息https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Interface.html

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值