JavaWeb-仿小米商场(8) 订单支付[沙箱支付]

本文介绍了如何在JavaWeb项目中实现仿小米商场的订单支付功能,特别是通过支付宝沙箱支付进行模拟用户支付的流程。在用户点击支付按钮后,订单数据会被存储到数据库,并在支付成功后可通过我的订单页面查看。文章详细阐述了从功能逻辑分析到后端接口实现,包括OrderServlet、OrderDaoImpl和OrderServiceImpl的编写,以及沙箱支付的链接修改和PayServlet代码实现。
摘要由CSDN通过智能技术生成

JavaWeb-仿小米商场(8) 订单支付[沙箱支付],用户订单列表

1 功能描述

接上篇 JavaWeb - 仿小米商城(7):创建订单

实现点击支付宝支付按钮完成对应支付操作 通过使用支付宝沙箱支付模拟用户支付,沙箱支付的逻辑可

参考博客:https://blog.csdn.net/hhb442/article/details/123304287

支付提示界面:当点击提交页面,此时将订单数据存储到数据表中

在这里插入图片描述

支付成功可以通过我的订单查看订单

在这里插入图片描述

2 提交订单功能分析

2.1 功能逻辑抽象

商品购物车点击生成订单时,先判断用户是否登录,如果用户没有登录,则需要用户先完成登录 ,获取到用户对象,然后从购物车session中取得购物车数据,根据购物车数据创建订单对象和订单详情列表list集合

商品购物车是面向数据库中的 tb_order表和订单详情表tb_orderDetail,在订单预览界面添加数据到数据库中对应的表,

购物车建立对应的 CartServlet 类、CartService 接口和实现类、CartDao 接口和实现类。

订单建立对应的 OrderServlet 类、OrderService 接口和实现类、OrderDao 接口和实现类。

订单详情对应的 OrderDetailServlet 类、OrderDetailService 接口和实现类、OrderDetailDao 接口和实现类。

提示:好需要创建辅助的vo类

订单列表的显示需要一个vo类,其中包含订单信息和地址信息以及用户信息

OrderView : oid uid orderTime userName telphon address totalMoney ostate

GoodOrdersDetailVo: pid pimg pname star pubdate, price num money

3.1 沙箱支付实现

3.1.1 修改支付宝按钮链接

在这里插入图片描述

3.1.2沙箱支付PayServlet代码:

@WebServlet("/pay.do")
public class PayServlet extends BaseServlet {
   
    //appid
    private final String APP_ID = "2021000119697423";
    //应用私钥
    private final String APP_PRIVATE_KEY = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDnSxnNeuFy7ChdPC04Ak3QfqIqyd27nAewaFc6D9dism9wfYlxKovTLQBjaqO+AAwjvo/24+VvpD6Ku5Oj+zG9FG0J6veR7AAMKcuaPimDWO8Yv7y1P12MBCH3cxNhikdgE5JVCVDtU/av+AKVdOs4hFmyOS0httTjaoBIhKTlESLFs6d3sOeCY2bIXiV0l+FRVoJHs5OkXkjALnm+1mdRycZtz8Igjf80hhfVbdnOuhbnEVUN7VoTkd43KLuirDjEx/G8CbolW1yGYhCUJs7nYxzpVlUvIeCwRS6JRFQ7N8OWR7wzsAtdVoElc05Mt1IMECTm4WFzAi+x8VLwX42XAgMBAAECggEAKEAkjGK/Cy3X1GndgKq9+fOfqwyYPsbne6acz2jkVbOxuwTNv1jlHmntcF+lgTIm6q2GBjQgwG33yFLeXaIgRMRiOWCfltBYLcW0PfJlbQs0CL2NTIlrcSti8dof3FChHTIqvAuz/qkm+/aQFIxVRu+ZYG+c0AouQClPi88xlv8wtd9E5ZHk9iWwc2KEfiROk+pOSkaCQxK3TV14qP/WJfMHQmySB8hHeQZ67TdOuJpdbskIDi/g0UrrzPX7DjJMdv+GIggMBOQ3Jf6w/w25TYRxOuXnnYEVBJJMt5NVpE84OCr+6rHzGNp4N+cubY7fSLGLN5QwCrjeRoEQlTnyIQKBgQD33XH2dHXgBF/vEboYXHzFE2fHU+5sxXHqrI5dYC7foPDcFxqC7cz4+D/MXxwATqdKyOwjbKK4i6xAaGrTBBYjW2Nu1BfBi3zLUZUF+GUzLYLOhPKrGyybmO3DGHgIxlQGgCR60oKGbNxxX1MPoh4H5ogn9FQqz+ANDrGeFRqccQKBgQDu4mvIj/k6LM+JMouK5A60LQh4uPzfubU1YTR1M50clPcOWteI2+y+d8IhzwWw1GE5UMvQ+K0rjJ3Uwj6AzSeFUn9mKY07Ihz3jn/7xvMBLYw0o3uaYPpl+5c6YDWEoqNlSlIN09Bk73Q5Vgrp00PF1d+H16bgyD00oZpGe0buhwKBgBHY+S7E3gP+bKX7QcolRrquFgftTDq60OQT/sBMf7OMlCtU4ozQ8LRws69UneCLyVICO7alSOY+8G1G14JQRgPPvc4qKXe/QoIlYrSmWSshOM0EF7EoaMLfdSdaKLKBDWXWbkoFxG5HgmwLcCCtDLqG6ADwf+sBQuHN0A5Q+LSRAoGBALG5dqMSqkNjz0utdS/yGBZoYqMeTdRNH8oE9bg0nDEFiwD9CNnjdTEHfEEW+o7ikyrHN7vTJ1L9HPeLRGEjQMHp7KqfQ1m5OX/cXs985pH7xxHqhy0F9YUmNw7RQT/amGHld0KeUa6mj/uQTjJEYWmwgstX3+ngT9j2WgcR9GXFAoGBAIgjeJQjPbqql3grItUxM+3zPsYywR2U7HDxb/WbWDfgC+FIzTUOVFg4kZmMDvkCvZVrGccY9c8ItN64JC9n5zvUpGFRihAuHOGl5VuzUfhtXsMhAyKdf6NXTdurk35ioX91oJlWN4AdxjGyOxzKr0oSTjs6km3qLjWuKb4tSae4";
    private final String CHARSET = "UTF-8";
    // 支付宝公钥
    private final String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs4aFo85tjgc0Sn/OxeHn0GeiAcxrom1MFAVgK7mTj+gXMzXk1NUg97E/a/UfhOGQ5xWxMAbMQGDKuseRycpo8KxUl6vQKFSrsPM+hM0G80YFgpIf4iaWC1qj4AsfOEBxUQBbdIlF1Ibt2dlIddqVe7Qfge+fI4rxixOhnE2yAlSZajwsHqZL6MagPSMYCnD3qZXGEZQOsH2lDqlH1aoijFI4LzqoEnL1QYBOVOKO8SIcud9f2Aw6t8I/fuBKAyDoOS7MAm8ISRxi6Lal6De95A4dvdWBBQgF9GDNH2UE0MWA0hDDDIFtpvrPMcXkN7qvRWBKqReZbSIkorDo0MM+dwIDAQAB";   //这是沙箱接口路径,正式路径为https://openapi.alipay.com/gateway.do
    private final String GATEWAY_URL = "https://openapi.alipaydev.com/gateway.do";
    private final String FORMAT = "JSON";
    //签名方式
    private final String SIGN_TYPE = "RSA2";
    //支付宝异步通知路径,付款完毕后会异步调用本项目的方法,必须为公网地址
    // private final String NOTIFY_URL = "http://127.0.0.1/notifyUrl";
    //支付宝同步通知路径,也就是当付款完毕后跳转本项目的页面,可以不是公网地址
    private final String RETURN_URL = "http://localhost:8080/pay.do?action=returnUrl";


    /**
     * 支付方法
     *
     * @param req
     * @param resp
     * @return
     */
    public String alipay(HttpServletRequest req, HttpServletResponse resp) {
   
        String dona_id = req.getParameter("oid");
        HttpSession session = req.getSession();
        String money = req.getParameter("money");
        System.out.println(money);
        Float dona_money = Float.parseFloat(money);
        //把dona_id项目id 放在session中
        session.setAttribute("dona_id", dona_id);

        //生成订单号(支付宝的要求?)
        String time = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
        String user = UUID.randomUUID().toString().replace("-", "").toUpperCase();

        String OrderNum = time + user;

        //调用封装好的方法(给支付宝接口发送请求)
        try {
   
            return sendRequestToAlipay(OrderNum, dona_money, "xiaomi_shop");
        } catch (AlipayApiException e) {
   
            e.printStackTrace();
        }
       
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!要在JavaWeb中使用支付沙箱支付,您需要按照以下步骤进行操作: 1. 注册支付开发者账号:访问支付宝开放平台(https://open.alipay.com/platform/home.htm)并注册一个开发者账号。 2. 创建应用:登录支付宝开放平台,创建一个新应用,获取应用的AppID、私钥和公钥等信息。 3. 导入SDK:下载支付宝的Java SDK,并将其导入到您的JavaWeb项目中。 4. 配置沙箱环境:在您的项目中,配置沙箱环境的相关信息,包括AppID、商户私钥、支付宝公钥等。 5. 实现支付功能:编写Java代码实现支付功能,包括生成订单、调起支付支付页面、接收支付结果等。 下面是一个简单的示例代码,演示如何使用支付沙箱支付: ```java import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.request.AlipayTradePagePayRequest; import com.alipay.api.response.AlipayTradePagePayResponse; public class AlipayUtil { // 支付宝网关 private static final String ALIPAY_GATEWAY = "https://openapi.alipaydev.com/gateway.do"; // 应用的AppID private static final String APP_ID = "YOUR_APP_ID"; // 商户私钥 private static final String PRIVATE_KEY = "YOUR_PRIVATE_KEY"; // 支付宝公钥 private static final String ALIPAY_PUBLIC_KEY = "ALIPAY_PUBLIC_KEY"; public static String createOrder(String orderNo, String amount) throws AlipayApiException { // 初始化AlipayClient AlipayClient alipayClient = new DefaultAlipayClient(ALIPAY_GATEWAY, APP_ID, PRIVATE_KEY, "json", "UTF-8", ALIPAY_PUBLIC_KEY, "RSA2"); // 创建支付请求对象 AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); // 设置回调地址 request.setReturnUrl("YOUR_RETURN_URL"); // 设置异步通知地址 request.setNotifyUrl("YOUR_NOTIFY_URL"); // 设置订单信息 request.setBizContent("{\"out_trade_no\":\"" + orderNo + "\"," + "\"total_amount\":\"" + amount + "\"," + "\"subject\":\"Iphone6 16G\"," + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}"); // 发起支付请求 AlipayTradePagePayResponse response = alipayClient.pageExecute(request); // 返回支付页面的HTML代码 return response.getBody(); } } ``` 请注意,以上代码中的密钥等敏感信息需要替换为您自己的实际信息。另外,您还需要根据您的业务需求来实现订单生成、支付结果处理等相关逻辑。 希望以上信息对您有所帮助!如有任何疑问,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值