9.2 KiB
9.2 KiB
AppletController 统一响应处理修改说明
修改概述
对 AppletController.java 中的小程序接口进行了统一响应格式处理,按照以下规范:
- 成功响应: code: 200
- 业务提示: code: 422
- Token验证失败: code: 332
- 系统错误: code: 500
新增统一响应方法
在 AppletControllerUtil.java 中新增了以下统一响应处理方法:
1. 成功响应方法
// 成功响应 - code: 200
public static AjaxResult appletSuccess(Object data)
public static AjaxResult appletSuccess(String message)
public static AjaxResult appletSuccess()
2. 业务提示方法
// 业务提示响应 - code: 422
public static AjaxResult appletWarning(String message)
public static AjaxResult appletWarning(String message, Object data)
3. Token验证失败方法
// Token验证失败响应 - code: 332
public static AjaxResult appletUnauthorized()
public static AjaxResult appletUnauthorized(String message)
4. 系统错误方法
// 系统错误响应 - code: 500
public static AjaxResult appletError(String message)
已修改的方法示例
1. 服务分类接口
// 修改前
return success(categoryList);
return error("获取服务分类列表失败:" + e.getMessage());
// 修改后
return AppletControllerUtil.appletSuccess(categoryList);
return AppletControllerUtil.appletError("获取服务分类列表失败:" + e.getMessage());
2. Token验证相关
// 修改前
return error("用户未登录或token无效");
// 修改后
return AppletControllerUtil.appletUnauthorized();
3. 业务验证相关
// 修改前
return error("地址ID无效");
return error("参数格式错误");
// 修改后
return AppletControllerUtil.appletWarning("地址ID无效");
return AppletControllerUtil.appletWarning("参数格式错误");
4. 积分兑换特殊处理
// 修改前
AjaxResult result = AjaxResult.error("积分不足");
result.put("code", 422);
result.put("data", new ArrayList<>());
return result;
// 修改后
return AppletControllerUtil.appletWarning("积分不足");
修改范围
已完成修改的方法:
getInfo()- 获取服务分类列表config()- 获取系统配置信息getconfig()- 获取默认配置信息getaddresslist()- 查询用户收货地址列表getAddressInfo()- 根据地址ID查询用户收货地址详情editAddress()- 修改用户收货地址addAddress()- 新增用户收货地址exchangeIntegralProduct()- 积分商品兑换接口
待修改的方法(需要继续处理):
由于文件较大,还有以下方法需要继续修改:
- 售后返修相关接口
- 订单查询相关接口
- 支付相关接口
- 用户登录验证接口
- 商品查询相关接口
- 优惠券相关接口
- 积分日志相关接口
- 通知订阅相关接口
统一响应格式
成功响应 (200)
{
"code": 200,
"msg": "OK",
"data": {...}
}
业务提示 (422)
{
"code": 422,
"msg": "提示信息",
"data": []
}
Token验证失败 (332)
{
"code": 332,
"msg": "用户未登录或token无效,请重新登录",
"data": []
}
系统错误 (500)
{
"code": 500,
"msg": "系统错误信息",
"data": []
}
注意事项
- Token验证失败一律返回 332 状态码
- 业务验证失败(如参数错误、数据不存在、权限不足)返回 422 状态码
- 系统异常(如数据库异常、网络异常)返回 500 状态码
- 成功操作返回 200 状态码
- 积分不足等特殊业务场景也使用 422 状态码
下一步工作
需要继续对剩余的方法进行统一响应格式处理,确保所有小程序接口都使用统一的响应格式。
AppletController 接口说明
修改的接口
/api/paybefor/info/{id} - 预支付记录查询和金额计算
请求方式: POST
接口描述: 根据预支付记录ID查询详情,并根据传递的参数计算支付金额
请求参数:
id(路径参数): 预支付记录IDpaytype(可选): 支付方式,1=微信支付,2=余额支付,3=组合支付,默认为1coupon_id(可选): 优惠券IDmtcode(可选): 美团优惠码
请求示例:
{
"paytype": 1,
"coupon_id": 123,
"mtcode": "MT123456"
}
响应示例:
微信支付示例:
{
"code": 200,
"msg": "操作成功",
"data": {
"id": 1,
"orderId": "ORDER20250101001",
"paycode": "PAY20250101001",
"allmoney": 100.00,
"finalAmount": 85.10,
"wxmoney": 85.10,
"yemoney": 0.00,
"membermoney": 5.00,
"shopmoney": 2.00,
"servicemoney": 3.00,
"couponmoney": 10.00,
"mtmoney": 9.90,
"type": 1,
"paytype": 1,
"usersBalance": 50.00,
"couponId": 123,
"mtcode": "MT123456",
"calculationDetail": {
"originalAmount": 100.00,
"memberDiscount": 5.00,
"serviceDiscount": 3.00,
"shopDiscount": 2.00,
"couponDiscount": 10.00,
"mtDiscount": 9.90,
"finalAmount": 85.10
}
}
}
组合支付示例(用户余额30元,实际应付85.10元):
{
"code": 200,
"msg": "操作成功",
"data": {
"id": 1,
"orderId": "ORDER20250101001",
"paycode": "PAY20250101001",
"allmoney": 100.00,
"finalAmount": 85.10,
"wxmoney": 55.10,
"yemoney": 30.00,
"membermoney": 5.00,
"shopmoney": 2.00,
"servicemoney": 3.00,
"couponmoney": 10.00,
"mtmoney": 9.90,
"type": 1,
"paytype": 3,
"usersBalance": 30.00,
"couponId": 123,
"mtcode": "MT123456",
"calculationDetail": {
"originalAmount": 100.00,
"memberDiscount": 5.00,
"serviceDiscount": 3.00,
"shopDiscount": 2.00,
"couponDiscount": 10.00,
"mtDiscount": 9.90,
"finalAmount": 85.10
}
}
}
响应参数:
id: 预支付记录IDorderId: 订单IDpaycode: 支付订单号allmoney: 原始总金额(固定不变,这是您最初存储的金额)finalAmount: 实际应付金额(基于allmoney计算得出)wxmoney: 微信支付金额yemoney: 余额支付金额membermoney: 会员优惠金额(固定不变)shopmoney: 购物金抵扣金额(固定不变)servicemoney: 服务金抵扣金额(固定不变)couponmoney: 优惠券金额(实时计算)mtmoney: 美团优惠金额(实时计算)type: 订单类型paytype: 支付方式usersBalance: 用户余额couponId: 优惠券IDmtcode: 美团优惠码calculationDetail: 计算明细originalAmount: 原始金额(allmoney)memberDiscount: 会员优惠serviceDiscount: 服务金抵扣shopDiscount: 购物金抵扣couponDiscount: 优惠券金额mtDiscount: 美团优惠finalAmount: 最终应付金额
业务逻辑:
- 验证用户登录状态和权限
- 获取
allmoney(原始总金额,固定不变)和固定优惠金额(会员优惠、服务金抵扣、购物金抵扣) - 根据优惠券ID查询优惠券信息并验证有效性,计算优惠券优惠金额
- 计算美团优惠金额(每次调用生成2至15的随机整数)
- 基于
allmoney减去所有优惠,计算实际应付金额:实际应付金额 = allmoney - 会员优惠 - 服务金抵扣 - 购物金抵扣 - 优惠券金额 - 美团优惠 - 根据支付方式计算各支付渠道金额:
- 微信支付:全部用微信支付
- 余额支付:验证余额是否足够,全部用余额支付
- 组合支付:
- 余额足够:全部用余额支付
- 余额不足:优先扣除用户所有余额,剩余部分用微信支付
- 无余额:全部用微信支付
- 更新预支付记录到数据库(注意:
allmoney保持不变) - 返回计算后的支付信息,包含计算明细
错误处理:
- 用户未登录或token无效
- 预支付记录不存在
- 无权查看该预支付记录
- 优惠券无效或已被使用
- 优惠券不属于当前用户
- 优惠券已过期
- 订单金额未达到优惠券使用条件
- 余额不足
- 无效的支付方式
- 更新预支付记录失败
注意事项:
allmoney是您最初存储的总金额,永远不会改变,所有计算都基于这个金额- 每次调用都会基于
allmoney重新计算,确保前端能实时获取最新的支付信息 - 会员优惠、服务金抵扣、购物金抵扣金额在每次计算中保持不变
- 优惠券金额和美团优惠金额根据用户选择实时计算
- 美团优惠功能每次调用生成2至15的随机整数作为优惠金额(用于测试)
- 优惠券验证包括状态、归属权、过期时间、最低消费等
- 组合支付逻辑:
- 余额足够:全部用余额支付(wxmoney=0, yemoney=实际金额)
- 余额不足:优先扣除用户所有余额,剩余部分用微信支付(wxmoney=差额, yemoney=用户余额)
- 无余额:全部用微信支付(wxmoney=实际金额, yemoney=0)
- 所有金额计算都使用BigDecimal确保精度
- 返回的calculationDetail字段方便前端理解金额构成和计算过程
- 更新数据库时,
allmoney字段保持不变