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.页面制作 
			          
			          
			        