• java对接支付宝支付


    java对接支付宝支付演示

    现在有不少的项目都需要对接支付,这里主要是进行讲解对接支付宝H5支付
    废话不多说 上代码
    引入支付宝官方的sdk

     <!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-easysdk -->
            <dependency>
                <groupId>com.alipay.sdk</groupId>
                <artifactId>alipay-easysdk</artifactId>
                <version>2.2.0</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java -->
            <dependency>
                <groupId>com.alipay.sdk</groupId>
                <artifactId>alipay-sdk-java</artifactId>
                <version>4.10.124.ALL</version>
            </dependency>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    编写调用支付的方法

     @RequestMapping("/test")
        public void doPost(HttpServletRequest httpRequest,
                           HttpServletResponse httpResponse) throws ServletException, IOException {
    
            //商户号
            String APP_ID="";
            //私钥
            String APP_PRIVATE_KEY="";
            //编码
            String CHARSET="UTF-8";
            //公钥
            String ALIPAY_PUBLIC_KEY="";
            //我是沙箱环境 所有请求地址是沙箱版
            AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipaydev.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2"); //获得初始化的AlipayClient
            AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();//创建API对应的request
            //这里主要是设置回调 也就是支付成功之后你要做什么操作的地址
            alipayRequest.setReturnUrl("http://domain.com/CallBack/return_url.jsp");
            alipayRequest.setNotifyUrl("http://domain.com/CallBack/notify_url.jsp");//在公共参数中设置回跳和通知地址
            /**
             * @description:
             * @author: hwk
             * @date: 2022/6/14 16:34
             * @param: out_trade_no 订单编号
             * total_amount 付款金额
             * subject 商品名称
             * product_code 支付方式 如手机网站 pc网站 APP支付等
             **/
           JSONObject jsonObject = new JSONObject();
            jsonObject.put("out_trade_no", "264484811515156");
            jsonObject.put("total_amount", "66");
            jsonObject.put("subject", "测试支付");
            jsonObject.put("product_code", "QUICK_WAP_WAY");
            alipayRequest.setBizContent(jsonObject.toJSONString());
            String form="";
            try {
                form = alipayClient.pageExecute(alipayRequest).getBody();
            } catch (AlipayApiException e) {
                e.printStackTrace();
            }
            //因为我不会写前端 所以直接输出测试 如果在正式环境中 建议直接return 返回的from表单
            httpResponse.setContentType("text/html;charset=" + CHARSET);
            httpResponse.getWriter().write(form);//直接将完整的表单html输出到页面
            httpResponse.getWriter().flush();
            httpResponse.getWriter().close();
        }
        //支付回调
        @RequestMapping("/test1")
        public void aliPayNotify() {
                Map<String, String> params = getAllRequestParam(request);
                String tradeStatus = params.get("trade_status");
                if ("TRADE_SUCCESS".equals(tradeStatus)) {
                    System.out.println("支付成功");
                }else {
                    System.out.println("支付失败");
                }
        }
    
    
        private Map<String, String> getAllRequestParam(final HttpServletRequest request) {
            Map<String, String> res = new HashMap<>(8);
            Enumeration<?> temp = request.getParameterNames();
            while (temp.hasMoreElements()) {
                String en = (String) temp.nextElement();
                String value = request.getParameter(en);
                res.put(en, value);
            }
            return res;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68

    入参正式支付的时候 可以用string json等接收 我这里只是演示

    成功演示图
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    讲解一下实际支付的时候所需要的参数吧

    除去appid 公钥 私钥什么的
    你正常支付所需要的参数无非 就是商品的id(主要是用于根据商品id查询商品的名称价格等后续调用支付的时候需要)、购买人
    然后查询到商品的详情 set到对应的参数里面 去调用支付宝sdk 来生成from表单
    你们可以在回调里面进行支付成功之后的一些操作
    比如说:购买的是会员 然后在支付成功之后去给他进行开通会员或者续费会员
    有一点要提醒你们 发起支付前创建的订单一定要是未支付 在回调里面判断用户是否成功
    如果有用户主动查询是否支付成功的操作 建议根据订单号先去数据库查询是否等于支付成功 如果不等于去官方给的接口去查是否支付成功 这样做的好处就是有的时候回调慢了一点 用户主动去查询如果是支付成功不会造成返回支付失败

  • 相关阅读:
    SpringBoot-将Bean放入容器的五种方式
    windows操作系统部署Moodle3.9修改大文件上传限制
    Springboot毕设项目会议管理系统95p57(java+VUE+Mybatis+Maven+Mysql)
    使用 Google Breakpad 来助力解决程序崩溃
    Go for A Tour of Go 20230924 Day4
    C++的动态分派在HotSpot VM中的重要应用
    主流的分布式调度框架、Elastic-job简介、功能和常用介绍
    运筹优化算法常用求解器汇总
    RCTF 2024 WEB wp
    python基础语法(三)
  • 原文地址:https://blog.csdn.net/jiandanyou/article/details/125281374