Spring Boot中的微信支付(小程序)
前言
一、申请流程和步骤
-
搭建SpringBoot工程编写后台支付接口 发布部署接口服务项目 支付接口的封装 配置jwt或者openid的token派发
二、注册商家
2.1商户平台
2.2商户id
三、API私钥(支付密钥)
如图4-1所示:
五、配置回调地址
六、小程序获取APPID
注册成功后即可获得小程序唯一的APPID。如图6-2所示:
八、实战部分
8.1SpringBoot框架搭建
8.2微信支付相关接口
8.2.1小程序用户登录接口
具体的登录流程如图8-1所示:
此时调用服务端接口,请求参数如图8-2所示:
用户登录后的返回参数,如图8-3所示:
8.2.2统一下单接口
用户登录小程序后,在小程序页面拉起支付请求时,会调用统一的下单接口。
在拉起支付请求时,下单接口参数需要两部分:一是商户、小程序相关的openid,appid等,二是需要商品相关的价格,名称,数量等参数。
统一下单接口
8.2.3创建订单接口
创建订单接口
用户可以在商品页面对某个商品进行下单,此时需要创建该用户购买某个商品的订单。
该过程主要是通过接口去请求用户信息、商品信息等参数,经过逻辑判断(是否存在已购买的订单)后创建(数据库插入相关信息)新的订单,最后返回该订单的所需数据。
8.2.4取消订单接口
取消订单接口
该接口可以通过订单id来作为请求参数,首先判断数据库中是否存在该订单信息,接着对可以取消支付的订单类型进行限制,最后更新数据库表(订单、商品和声明周期)状态。
@ApiOperation(value = "取消订单") @RequestMapping(value = "/cancel/{orderId}",method = RequestMethod.PUT) public AjaxResult cancel(@PathVariable Long orderId){ //判断订单是否存在 SysOrders sysOrders = sysOrdersService.getById(orderId); if(sysOrders==null){ return AjaxResult.error("订单不存在"); } //只有未支付的订单能取消 if(!CommonConstants.NO.equals(sysOrders.getIsPay())){ return AjaxResult.error(MyReturnCode.ERR_70001.getCode(), MyReturnCode.ERR_70001.getMsg()); } sysOrdersService.orderCancel(sysOrders); return AjaxResult.success(); }
8.2.5订单详情接口
订单详情接口
当订单生成后,用户可以在页面查看该商品订单的详情。
该接口通过订单id即可从数据库获取详情信息,而该页面展示的数据由业务需求确定。
@ApiOperation(value = "订单详情") @RequestMapping(value = "/myOrderDetail/{orderId}",method = RequestMethod.GET) @ApiImplicitParams({@ApiImplicitParam(name = "orderId", value = "订单Id")}) public AjaxResult myOrderDetail(@PathVariable Long orderId){ //从数据库获取详情参数 SysOrderDetailResponse detailResponse = sysOrdersService.getDetail(orderId); return AjaxResult.success(detailResponse); }
订单详情逻辑
/** * 订单详情页面参数处理 * @param orderId * @return sysOrderDetailResponse */ @Override public SysOrderDetailResponse getDetail(Long orderId) { SysOrderDetailResponse sysOrderDetailResponse = orderMapper.getDetail(orderId); //对页面的手机号做处理 String phoneNum = sysOrderDetailResponse.getMobile(); sysOrderDetailResponse.setMobile(phoneNum.substring(0,3) + "****" + phoneNum.substring(7,phoneNum.length())); //根据订单状态不同,显示不同的数据 //计算剩余待支付时间并展示 return sysOrderDetailResponse; }
8.2.6支付回调接口
支付回调接口
其中,notifyOrder方法的作用是在支付成功后在数据库更新订单的状态。
notifyOrder(SysOrders sysOrders)方法
@Override @Transactional(rollbackFor = Exception.class) public void notifyOrder(SysOrders sysOrders) { //只有未支付订单能操作,即is_pay字段为0的订单 if(CommonConstants.NO.equals(sysOrders.getIsPay())) { //更新订单支付状态 sysOrders.setIsPay(CommonConstants.YES); sysOrders.setStatus(OrderInfoEnum.STATUS_1.getValue()); sysOrdersMapper.updateById(sysOrders); //更新商品表状态 //更新订单生命周期表 } }
上一篇:
uniapp开发微信小程序-2.页面制作