美文网首页
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 支付 订单提交

    ---------支付逻辑 支付平台给网站加密规则(唯一密钥),网站通过秘钥加密客户端给的普通数据形成加密后的字符...

  • 移动端八大电商支付/订单页面布局分析

    一、流程对比 1.提交订单直接进入支付页面 2.提交订单后先选择支付方式,再进入支付页面 3. 放弃支付/支付支付...

  • 8、每日百万交易的支付系统,如何设置JVM堆内存大小

    首先用户在商城系统提交支付一个订单的请求,接着商城系统把这个请求提交给支付系统,支付系统就会生成一个支付订单,此时...

  • PC 支付流程

    主后端操作支付 :创建订单->提交订单->获取支付的微信二维码或者支付宝链接 ->扫码支付 ->后端监听改变订单状...

  • 支付宝支付流程。

    1.流程:1.app下订单提交给后台服务器生成订单信息,带有签名。2.提交上述返回数据到支付宝,唤起支付。3.支付...

  • ios中支付宝使用

    1)用cocoapods导入支付宝sdk:pod 'AlipaySDK-iOS' 2)生成订单,向后台提交订单 3...

  • 2018-10-21 问题汇总

    图面和交互类问题 1、活动详情页,商家模块对齐 2、提交订单页,确认支付 3、提交订单页,光标获取到电话、联系人字...

  • 《电商产品经理宝典》读书笔记(二):订单管理

    一、订单基础信息 1. 订单状态 (1)待付款用户刚提交订单,尚未付款,等待用户支付。由于待付款状态会锁定库存,所...

  • 服务端如何防止订单重复支付?

    如图是一个简化的下单流程,首先是提交订单,然后是支付。 支付的话,一般是走支付网关(支付中心),然后支付中心与第三...

  • 支付宝pc支付集成

    支付宝初步集成(采用struts集成)调用流程 1.pc端支付原理简介:客户端提交订单后,点击确认付款,支付宝根据...

网友评论

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

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