美文网首页
day31 支付 订单提交

day31 支付 订单提交

作者: 路人爱早茶 | 来源:发表于2017-10-26 23:19 被阅读0次

    ---------支付逻辑

    • 支付平台给网站加密规则(唯一密钥),网站通过秘钥加密客户端给的普通数据形成加密后的字符串(hmac码),之后网站让客户端带着同样的普通数据和加密后的普通数据(hmac码)去找支付平台,支付平台使用给网站的密钥加密普通数据和携带的hmac码比较,一样则数据没有被串改
      支付平台支付成功后,给客户端和网站同时发消息支付成功(客户端和第三方平台同时调用网站的支付成功接口servlet)
    在线支付.png
    • 在支付成功后需要更新订单购买状态,需要写在第三方访问成功的代码下(callbackservlet)

    -------------------购买页

    • p2p:拍拍贷,陆金所,温商贷,玖富理财,360金融,点融网
    • 支付平台:国付宝,连连支付(最好用?),易宝支付
    • js提交表单,js中获得表单元素
    <script type="text/javascript">
        function confirmOrder(){
            //提交表单
            $("#orderForm").submit();
        }
    </script>
    
    • jsp中post提交参数时候可以用一个隐藏域
    <form id="orderForm" class="form-horizontal" action="${pageContext.request.contextPath }/product" method="post"
                        style="margin-top: 5px; margin-left: 150px;">
                    <!-- method的名字 通过表单提交 -->
                    <input type="hidden" name="method" value="confirmOrder">
                    <!-- 传递订单oid -->
                    <input type="hidden" name="oid" value="${order.oid }">
    
    • 提交订单要判断登没登录,没登录跳转登录并且return否则之后代码还会执行
    订单的业务操作.png
    -------------------封装order和将购物车中item取出导入到order中的list
    //提交订单
        public void submitOrder(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            HttpSession session = request.getSession();
            //判断用户是否已经登录 未登录下面代码不执行
            User user = (User) session.getAttribute("user");
            if(user==null){
                //没有登录
            response.sendRedirect(request.getContextPath()+"/login.jsp");
                return;
            }
        //目的:封装好一个Order对象 传递给service层
            Order order = new Order();
            //1、private String oid;//该订单的订单号
            String oid = CommonsUtils.getUUID();
            order.setOid(oid);
            //2、private Date ordertime;//下单时间
            order.setOrdertime(new Date());
            //3、private double total;//该订单的总金额
            //获得session中的购物车
            Cart cart = (Cart) session.getAttribute("cart");
            double total = cart.getTotal();
            order.setTotal(total);
        //4、private int state;//订单支付状态 1代表已付款 0代表未付款
            order.setState(0);
            //5、private String address;//收货地址
            order.setAddress(null);
            //6、private String name;//收货人
            order.setName(null);
            //7、private String telephone;//收货人电话
            order.setTelephone(null);
            //8、private User user;//该订单属于哪个用户
            order.setUser(user);
            //9、该订单中有多少订单项List<OrderItem> orderItems = new ArrayList<OrderItem>();
            //获得购物车中的购物项的集合map
            Map<String, CartItem> cartItems = cart.getCartItems();
            for(Map.Entry<String, CartItem> entry : cartItems.entrySet()){
                //取出每一个购物项
                CartItem cartItem = entry.getValue();
                //创建新的订单项
                OrderItem orderItem = new OrderItem();
                //1)private String itemid;//订单项的id
                orderItem.setItemid(CommonsUtils.getUUID());
                //2)private int count;//订单项内商品的购买数量
                orderItem.setCount(cartItem.getBuyNum());
                //3)private double subtotal;//订单项小计
                orderItem.setSubtotal(cartItem.getSubtotal());
                //4)private Product product;//订单项内部的商品
                orderItem.setProduct(cartItem.getProduct());
                //5)private Order order;//该订单项属于哪个订单
                orderItem.setOrder(order);
                //将该订单项添加到订单的订单项集合中
                order.getOrderItems().add(orderItem);
            }
            //order对象封装完毕
            //传递数据到service层
            ProductService service = new ProductService();
            service.submitOrder(order);
            session.setAttribute("order", order);
            //页面跳转      response.sendRedirect(request.getContextPath()+"/order_info.jsp");
        }
    ----------------在service需使用事务确保订单和订单项同时进入数据库
    
    • 购物车可修改所以用map对应pid,订单不可修改所以用list也可以
    • 分装对象如果没有表结构时候按照功能封装,如果有表则按照表结构封装
    订单分析2.png

    相关文章

      网友评论

          本文标题:day31 支付 订单提交

          本文链接:https://www.haomeiwen.com/subject/xzghpxtx.html