中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java?Springboot整合支付寶接口的方法是什么

發布時間:2023-03-11 16:20:14 來源:億速云 閱讀:110 作者:iii 欄目:開發技術

本篇內容主要講解“Java Springboot整合支付寶接口的方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java Springboot整合支付寶接口的方法是什么”吧!

一、創建支付寶沙箱

跳轉 : 支付寶沙箱平臺

1、進入控制臺

Java?Springboot整合支付寶接口的方法是什么

2、創建小程序,編寫名稱和綁定商家即可

Java?Springboot整合支付寶接口的方法是什么

3、返回第一個頁面,往下滑進入沙箱

Java?Springboot整合支付寶接口的方法是什么

4、進行相關的配置,拿到AppID、應用公鑰、應用私鑰、支付寶公鑰

Java?Springboot整合支付寶接口的方法是什么

5、進入沙箱賬號先提前給虛擬賬號充值一些錢款(商家賬號和普通賬號)

Java?Springboot整合支付寶接口的方法是什么

二、使用內網穿透 nat app

跳轉 : nat app

1、注冊并登陸

這里不做展示

2、申請一個免費隧道

Java?Springboot整合支付寶接口的方法是什么

Java?Springboot整合支付寶接口的方法是什么

3、下載一個最新的客戶端

下載后解壓到不需要管理員權限的盤符,比如說E盤

Java?Springboot整合支付寶接口的方法是什么

4、打開所在目錄

Java?Springboot整合支付寶接口的方法是什么

5、在nat app中進行復制然后在創建的start.txt文件中進行修改

復制:

Java?Springboot整合支付寶接口的方法是什么

修改:

Java?Springboot整合支付寶接口的方法是什么

運行:

將start.txt修改為bat后運行得到網址

Java?Springboot整合支付寶接口的方法是什么

三、編寫java程序

1、引入依賴

<!-- 阿里支付-->
<dependency>
    <groupId>com.alipay.sdk</groupId>
    <artifactId>alipay-sdk-java</artifactId>
    <version>4.22.110.ALL</version>
</dependency>
<!-- 糊涂工具類-->
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.11</version>
</dependency>

2、編寫配置文件

## 支付寶配置
alipay:
  appId: 2021000122615995
  appPrivateKey: 這是在第一步中的應用私鑰,在查看里面,特別長的一串
  alipayPublicKey: 這是第一步中的支付寶公鑰
  notifyUrl: 這是第二步中運行start.bat后得到的網址 + /alipay/notify

3、編寫實體類(支付需要的參數)

@Data
public class AliPay {
    private String traceNo;   // 訂單編號
    private double totalAmount; // 總金額
    private String subject;  // 商品名稱
    private String alipayTraceNo;
}

4、編寫支付的配置類

@Data
@Component
@ConfigurationProperties(prefix = "alipay")
public class AlipayConfig {
	// 對應配置文件中的內容
    private String appId;
    private String appPrivateKey;
    private String alipayPublicKey;
    private String notifyUrl;

}

5、編寫支付的Controller

@RestController
@RequestMapping("/alipay")
public class AliPayController {

    private static final String GATEWAY_URL = "https://openapi.alipaydev.com/gateway.do";
    private static final String FORMAT = "JSON";
    private static final String CHARSET = "UTF-8";
    //簽名方式
    private static final String SIGN_TYPE = "RSA2";

    @Resource
    private AlipayConfig aliPayConfig;


    @GetMapping("/pay") // &subject=xxx&traceNo=xxx&totalAmount=xxx
    public void pay(AliPay aliPay, HttpServletResponse httpResponse) throws Exception {
        // 1. 創建Client,通用SDK提供的Client,負責調用支付寶的API
        AlipayClient alipayClient = new DefaultAlipayClient(GATEWAY_URL, aliPayConfig.getAppId(),
                aliPayConfig.getAppPrivateKey(), FORMAT, CHARSET, aliPayConfig.getAlipayPublicKey(), SIGN_TYPE);

        // 2. 創建 Request并設置Request參數
        AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();  // 發送請求的 Request類
        request.setNotifyUrl(aliPayConfig.getNotifyUrl());
        JSONObject bizContent = new JSONObject();
        bizContent.set("out_trade_no", aliPay.getTraceNo());  // 我們自己生成的訂單編號
        bizContent.set("total_amount", aliPay.getTotalAmount()); // 訂單的總金額
        bizContent.set("subject", aliPay.getSubject());   // 支付的名稱
        bizContent.set("product_code", "FAST_INSTANT_TRADE_PAY");  // 固定配置
        request.setBizContent(bizContent.toString());

        // 執行請求,拿到響應的結果,返回給瀏覽器
        String form = "";
        try {
            form = alipayClient.pageExecute(request).getBody(); // 調用SDK生成表單
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        httpResponse.setContentType("text/html;charset=" + CHARSET);
        httpResponse.getWriter().write(form);// 直接將完整的表單html輸出到頁面
        httpResponse.getWriter().flush();
        httpResponse.getWriter().close();
    }

    @PostMapping("/notify")  // 注意這里必須是POST接口
    public String payNotify(HttpServletRequest request) throws Exception {
        if (request.getParameter("trade_status").equals("TRADE_SUCCESS")) {
            System.out.println("=========支付寶異步回調========");

            Map<String, String> params = new HashMap<>();
            Map<String, String[]> requestParams = request.getParameterMap();
            for (String name : requestParams.keySet()) {
                params.put(name, request.getParameter(name));
                // System.out.println(name + " = " + request.getParameter(name));
            }

            String outTradeNo = params.get("out_trade_no");
            String gmtPayment = params.get("gmt_payment");
            String alipayTradeNo = params.get("trade_no");

            String sign = params.get("sign");
            String content = AlipaySignature.getSignCheckContentV1(params);
            boolean checkSignature = AlipaySignature.rsa256CheckContent(content, sign, aliPayConfig.getAlipayPublicKey(), "UTF-8"); // 驗證簽名
            // 支付寶驗簽
            if (checkSignature) {
                // 驗簽通過
                System.out.println("交易名稱: " + params.get("subject"));
                System.out.println("交易狀態: " + params.get("trade_status"));
                System.out.println("支付寶交易憑證號: " + params.get("trade_no"));
                System.out.println("商戶訂單號: " + params.get("out_trade_no"));
                System.out.println("交易金額: " + params.get("total_amount"));
                System.out.println("買家在支付寶唯一id: " + params.get("buyer_id"));
                System.out.println("買家付款時間: " + params.get("gmt_payment"));
                System.out.println("買家付款金額: " + params.get("buyer_pay_amount"));

            }
        }
        return "success";
    }
}

到此,相信大家對“Java Springboot整合支付寶接口的方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳西县| 富顺县| 塔河县| 英吉沙县| 洛南县| 巴南区| 正安县| 龙南县| 无为县| 门源| 左权县| 敖汉旗| 惠水县| 大石桥市| 松桃| 恩施市| 江城| 左权县| 卢氏县| 康乐县| 祁门县| 大新县| 临沧市| 台北市| 临潭县| 施秉县| 信宜市| 新乡县| 长兴县| 平阴县| 宜兴市| 呼伦贝尔市| 义乌市| 霍林郭勒市| 玉屏| 邛崃市| 太湖县| 静海县| 大理市| 江西省| 墨脱县|