微信支付系列(二)之订单的创建

一.创建订单需获取商品id和用户id
1.生成一个订单号,订单号要唯一
2.商品信息和用户信息需要远程RPC调用
3.将订单保存到数据库中
4.返回订单号给前端

二.具体代码实现
1.用户id可以根据客服端传来的token取出
2.需用到一个工具类JwtUtils

public class JwtUtils {
	public static final String SUBJECT = "guli";
	//秘钥
	public static final String APPSECRET = "guli";
	public static final long EXPIRE = 1000 * 60 * 30;  //过期时间,毫秒,30分钟

	/**
	 * 根据token,获取token里面主体内容
	 * @param request
	 * @return
	 */
	public static String getMemberIdByJwtToken(HttpServletRequest request) {
		String jwtToken = request.getHeader("token");
		if(StringUtils.isEmpty(jwtToken)) return "";

		Claims claims = Jwts.parser().setSigningKey(APPSECRET).parseClaimsJws(jwtToken).getBody();
//        Jws<Claims> claimsJws = Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);
//        Claims claims = claimsJws.getBody();
		return (String)claims.get("id");
	}


}

3.工具类中有一个getMemberIdByJwtToken方法,其中HttpServletRequest可以获取到客服端传来的token
token中包含userId,如果token为空,则返回一个空,否则拿到JWT三要素中的主体claims ,通过claims取到userId

4.通过商品id和userId创建订单

@RestController
@RequestMapping("/order")
@CrossOrigin
public class EduOrderController {
    @Autowired
    private EduOrderService orderService;

    //1.根据商品id下订单
    @GetMapping("createOrder/{courseId}")
    //传入商品id和用户id
    public RetVal createOrder(@PathVariable String courseId, HttpServletRequest request) {
        //通过工具类拿到userId
        String userId = JwtUtils.getMemberIdByJwtToken(request);
        //根据传入商品id和用户id创建订单
        String orderNo = orderService.createOrder(courseId, userId);
        //将生成的订单号返回
        return RetVal.success().data("orderNo", orderNo);
    }

5.生成订单号需用到一个工具类OrderNoUtil

public class OrderNoUtil {

    /**
     * 获取订单号
     * @return
     */
    public static String getOrderNo() {
        //拿到当前时间
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        String newDate = sdf.format(new Date());
        String result = "";
        //用随机数生成
        Random random = new Random();
        for (int i = 0; i < 3; i++) {
            result += random.nextInt(10);
        }
        return newDate + result;
    }

}

6.创建createOrder,进入service层


    @Autowired
    private EduPayLogService payLogService;

    @Override
    public String createOrder(String courseId, String userId) {
        //创建一个订单
        EduOrder order = new EduOrder();
        //通过OrderNoUtil工具类获取到订单号
        String orderNo = OrderNoUtil.getOrderNo();
        //将订单号和商品id放进订单中
        order.setOrderNo(orderNo);
        order.setCourseId(courseId);
        //具体看数据库订单表中需要的数据
        //商品信息需要通过远程RPC的形式从其他微服务中查询
        //查寻到后放进订单中
        //这里就直接写入假数据,仅供参考
        order.setCourseTitle("潮流新品紧身连衣裙包臀性感2020年秋季夏新款修身显瘦裙子短款气质小个子吊带女夏香槟);
        order.setCourseCover("http://img10.360buyimg.com/imgzone/jfs/t1/125022/5/8461/11118d239de7a1.jpg");
        //用户个人信息需要通过远程RPC的形式从其他微服务中查询
        order.setTeacherName("张三");
        order.setMemberId(userId);
        order.setNickName("一只独狼");
        order.setMobile("13177567651");
        order.setTotalFee(new BigDecimal(0.01));
        order.setPayType(1);
        order.setStatus(0);
        //添加订单到数据库中
        baseMapper.insert(order);
        //将订单号返回
        return orderNo;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值