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

本文介绍了如何在JavaWeb项目中实现仿小米商城的订单支付功能,重点是支付宝的沙箱支付。在功能描述中,支付流程包括创建订单后跳转至支付页面,使用沙箱环境进行模拟支付。在沙箱支付功能分析部分,讨论了在pom文件中添加依赖。代码实现部分详细阐述了前端和后端的修改,包括PayServlet、OrderServiceImpl和OrderDaoImpl的编写,以及前端orderList.html的修改。
摘要由CSDN通过智能技术生成

JavaWeb–仿小米商城(8): 订单支付[沙箱支付]

源码链接:https://pan.baidu.com/s/1_EmCT3Xmfqx94Fp5ygGRgg
提取码:yaoy

1 功能描述

订单创建后进入支付页面,整合支付宝沙箱支付

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

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

在这里插入图片描述

支付宝支付:一般开发中使用沙箱做模拟支付,点击支付支付跳转到支付宝沙箱支付界面

在这里插入图片描述

支付过程提示

在这里插入图片描述

使用沙箱app扫码支付成功后跳转到支付成功提示界面

订单列表界面:支付成功可以通过点击我的订单查看订单列表

订单详情界面:通过点击订单列表中订单详情按钮打开该订单的详情信息界面

2 沙箱支付功能分析

2.1 在pom文件中添加依赖

<!-- 支付宝沙箱支付 -->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.16.2.ALL</version>
</dependency>

3 代码实现

3.1 前端

3.1.1 修改链接地址

orderSuccess.html文件中

3.2 后端

3.2.1 PayServlet

在 PayServlet类中首先设置如下私有属性

APP_ID (appId,从沙箱管理页面获得) APP_PRIVATE_KEY (应用私钥,最开始在密钥工具生成而 来) ALIPAY_PUBLIC_KEY (支付宝公钥,上一步骤获得) GATEWAY_URL (支付宝网关地址,在开发 平台沙箱管理页面中获得) SIGN_TYPE (签名类型) NOTIFY_URL (异步回调地址,须是公网IP,后 面再解释) RETURN_URL (同步回调地址,可以是私网IP)

@WebServlet("/pay.do")
public class PayServlet extends BaseServlet{
   
    //appid
    private final String APP_ID = "2021000119697433";
    //应用私钥
    private final String APP_PRIVATE_KEY = "MIIEvQIBADANBgkqhkiG";
    private final String CHARSET = "UTF-8";
    // 支付宝公钥
    private final String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEF";
    //这是沙箱接口路径,正式路径为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 request
     * @param response
     * @return
     */
    public String alipay(HttpServletRequest request, HttpServletResponse response){
   
        String dona_id=request.getParameter("oid");
        String money=request.getParameter("omoney");
        Float dona_money=0f;
        if(money!=null) {
   
            dona_money = Float.parseFloat(money);

            //把dona_id项目id 放在session中
            HttpSession session=request.getSession();
            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();
            }
            return Constants.REDIRECT + "/error.html";
        }
        return null;
    }


    /**
     * 支付宝的异步通知路径
     * @param request
     * @param response
     * @return
     */
    public String returnUrl(HttpServletRequest request, HttpServletResponse response){
   
        try {
   
            // 获取支付宝GET过来反馈信息
            Map<String, String> params = new HashMap<String, String>();
            Map<String, String[]> requestParams = request.getParameterMap();
            for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext(); ) {
   
                String name = (String) iter.next();
                String[] values = (String
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值