发表于: 2019-11-27 22:32:19
1 1069
今天完成的事情:
把之前的支付加上去,但是又没加微信那边的流程。今天又重新看了下支付。找到另一个博客的,比较完整
和我想的差不多,唯一就是往前端传的参数没太懂是哪些。
https://blog.csdn.net/u013021936/article/details/80240495
这是微信网站上写的demo。
我目前只知道这个prepay_id是后端与微信交互后返回来的。其他几个是不是也要从后端传。还是前端自己生成,获取
与微信交互的时候有个这个。用户的客户端IP,是我们的服务器IP吗?
只写了除与微信交互的代码。
/**
* 个人中心订单列表查询
*/
@GetMapping("/a/u/list/order")
public Map<String, Object> orderSelectList(HttpServletRequest request,
Integer status,
@RequestParam(value = "page", defaultValue = "1") Integer page,
@RequestParam(value = "size", defaultValue = "10") Integer size) {
HashMap<String, Object> result = new HashMap<>(16);
try {
long userId = JWTUtil.getUserIdFromToken(request);
log.info("查询用户{}第页{}共{}订单", userId, page, size);
StudyOrder order = new StudyOrder();
order.setCreateBy(userId);
order.setStatus(status);
PageHelper.startPage(page, size, "update_at desc");
List<StudyOrder> orderList = orderServer.selectSelective(order);
PageInfo<StudyOrder> pageInfo = new PageInfo<>(orderList);
Long total = pageInfo.getTotal();
result.put("total", total);
result.put("data", orderList);
result.put("code", SUCCESS.getCode());
result.put("msg", SUCCESS.getMsg());
} catch (Exception e) {
e.printStackTrace();
result.put("code", REQUEST_FAILED.getCode());
result.put("msg", REQUEST_FAILED.getMsg());
}
return result;
}
/**
* 订单查看,详细查询
*
* @param id 订单id
*/
@GetMapping("/a/u/study/order")
public Map<String, Object> orderSelectList(HttpServletRequest request, Long id) {
HashMap<String, Object> result = new HashMap<>(16);
try {
Long userId = JWTUtil.getUserIdFromToken(request);
log.info("用户{}查看订单{}", userId, id);
StudyOrder order = orderServer.selectByPrimaryKey(id);
/*判断是否为当前用户在查询*/
if (null != order) {
if (userId.equals(order.getCreateBy())) {
result.put("data", order);
result.put("code", SUCCESS.getCode());
result.put("msg", SUCCESS.getMsg());
} else {
result.put("code", USER_ERROR.getCode());
result.put("msg", USER_ERROR.getMsg());
}
} else {
result.put("data", null);
}
} catch (Exception e) {
e.printStackTrace();
result.put("code", REQUEST_FAILED.getCode());
result.put("msg", REQUEST_FAILED.getMsg());
}
return result;
}
/**
* 支付订单
*/
@PostMapping("/a/u/study/order")
public Map<String, Object> orderInsert(HttpServletRequest request, StudyOrder order) {
HashMap<String, Object> result = new HashMap<>(16);
try {
log.info("新增订单信息{}",order);
long userId = JWTUtil.getUserIdFromToken(request);
/*待支付10,已取消20,已完成30,跳过支付过程*/
order.setStatus(30);
order.setCreateBy(userId);
order.setUpdateBy(userId);
/*订单编号,当前时间年月日时分秒+四位全随机数*/
order.setNumber(DateUtil.dateFormat() + NumUtil.numAllRandom(4));
/*省略支付过程*/
/*1.发送请求参数至微信生成预支付订单返回prepay_id等*/
/*result.put("prepayId",prepayId);*/
orderServer.insertSelective(order);
result.put("code", SUCCESS.getCode());
result.put("msg", SUCCESS.getMsg());
result.put("id", order.getId());
} catch (Exception e) {
e.printStackTrace();
result.put("code", REQUEST_FAILED.getCode());
result.put("msg", REQUEST_FAILED.getMsg());
}
return result;
}
逻辑上唯一疑惑的是,微信这边是2个小时的订单支付时间,如果用户不支付了。后面在订单未关闭前再支付,用的是上一次获取的预支付信息参数,还是再走一边支付流程。
明天计划的事情:
把后台的接口加上
还有个问题,这边有个30分钟后关闭未支付订单的功能,用redis进行延迟队列,看了下,明天继续看。
遇到的问题:
今天测试的多点,BUG测了几个出来。还是那种从其他地方把代码复制过来, 改的不全的问题。如果能代码自动生成就爽了。
收获:
评论