微信支付接口开发详流程
1.支付接口分析
引入依赖
<dependencies> <dependency> <groupId>com.github.wxpay</groupId> <artifactId>wxpay-sdk</artifactId> <version>0.0.3</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> </dependency> </dependencies>
创建订单相关表
2. 开发创建订单接口
1.编写订单controller
@RestController @RequestMapping("/orderservice/order") @CrossOrigin public class TOrderController { @Autowired private TOrderService orderService; //根据课程id和用户id创建订单,返回订单id @PostMapping("createOrder/{courseId}") public R save(@PathVariable String courseId, HttpServletRequest request) { String orderId = orderService.saveOrder(courseId, JwtUtils.getMemberIdByJwtToken(request)); return R.ok().data("orderId", orderId); } }
2.编写订单OrderServiceImpl
//创建订单实现类 @Override public String saveOrder(String courseId, String memberId) { //远程调用课程服务,根据课程id获取课程信息 CourseInfoForm courseDto = eduClient.getCourseInfoDto(courseId); //远程调用用户服务,根据用户id获取用户信息 UcenterMember ucenterMember = ucenterClient.getInfo(memberId); //创建订单 Order order = new Order(); order.setOrderNo(OrderNoUtil.getOrderNo()); order.setCourseId(courseId); order.setCourseTitle(courseDto.getTitle()); order.setCourseCover(courseDto.getCover()); order.setTeacherName("test"); order.setTotalFee(courseDto.getPrice()); order.setMemberId(memberId); order.setMobile(ucenterMember.getMobile()); order.setNickname(ucenterMember.getNickname()); order.setStatus(0); order.setPayType(1); baseMapper.insert(order); return order.getOrderNo(); }
3. 开发根据订单id查询订单详情接口
controller
@GetMapping("getOrder/{orderId}") public R get(@PathVariable String orderId) { QueryWrapper<Order> wrapper = new QueryWrapper<>(); wrapper.eq("order_no", orderId); Order order = orderService.getOne(wrapper); return R.ok().data("item", order); }
4. 开发生成二维码接口
controller
/** * 生成二维码 * * @return */ @GetMapping("/createNative/{orderNo}") public R createNative(@PathVariable String orderNo) { Map map = payService.createNative(orderNo); return R.ok().data(map); }
service实现
5. 开发查询订单支付状态接口
@GetMapping("/queryPayStatus/{orderNo}") public R queryPayStatus(@PathVariable String orderNo) { //调用查询接口 Map<String, String> map = payService.queryPayStatus(orderNo); if (map == null) { //出错 return R.error().message("支付出错"); } if (map.get("trade_state").equals("SUCCESS")) { //如果成功 //更改订单状态 //payService.updateOrderStatus(map); return R.ok().message("支付成功"); } return R.ok().code(25000).message("支付中"); }
service实现
上一篇:
通过多线程提高代码的执行效率例子