2021最新版 支付寶沙箱 SpringBoot


前言

我就是個沙雕,用錯類,搞了一天。但我就是想噴,垃圾沙箱,不人性化,解釋都不清楚,搞的很累。手機版的app在今天也無法登錄與注冊。估計很久沒更新了還什么。文檔也可能只更新了部分。信息錯亂

步驟

總的步驟就是生成密鑰,獲取支付寶的密鑰,接着用一個類發送請求,返回得到的是一個String,String是一個Form表單,會自動提交跳轉到支付寶支付頁面。

1. 生成密鑰

這兒已經有在線版的生成密鑰了,不再需要下載應用

點擊生成密鑰,再下載一下密鑰,這兒的公鑰要放在下一個網站里生成一個支付寶的公鑰

到時候在類中使用的是密鑰支付寶的公鑰

2. 點擊進入研發服務

記住這三個玩意兒,都是有用的

3. 點擊RSA2...密鑰

在下面放入之前的公鑰,就會提供一個支付寶公鑰


小插曲:(因為我以前是搞過一次的,但是忘記了,所以不知道初次注冊的操作會不會有出入。這兒比較疑惑的就是上圖的公鑰證書,可能第一次弄必須得搞這個公鑰證書吧,公鑰證書又得去第一個網址中生成CSR文件,然后導入。如果不需要弄這個公鑰證書那是最好的了,還麻煩。)

左側導航欄看商家信息按理是都存在的,如果不存在可能就是要搞公鑰證書


最后

最后就是要弄類了

maven導入

        <!-- 支付 -->
        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>4.13.32.ALL</version>
        </dependency>

Impl

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradePagePayModel;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.response.AlipayTradePagePayResponse;
import org.springframework.stereotype.Service;

@Service
public class OrderServiceImpl {

    final static String APP_ID = "第二個網址的APPID";
    final static String APP_PRIVATE_KEY = "第一個網址的私鑰";
    final static String ALIPAY_PUBLIC_KEY = "第二個網址的支付寶公鑰";

    public String pay() {

        //實例化客戶端
        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipaydev.com/gateway.do",
                APP_ID,
                APP_PRIVATE_KEY,
                "json",
                "utf-8",
                ALIPAY_PUBLIC_KEY,
                "RSA2");

        AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();

        AlipayTradePagePayModel model = new AlipayTradePagePayModel();
        model.setOutTradeNo("20150320010112312323");
        model.setProductCode("FAST_INSTANT_TRADE_PAY");
        model.setSubject("Iphone6 16G");
        model.setTotalAmount("0.01");
        //以上四個為必選內容。ProductCode是寫死的,訂單號這些可以自己生成
        //model.setTimeoutExpress("30m");
        request.setBizModel(model);

        request.setReturnUrl("https://xxx");//據說是支付成功后返回的頁面
        request.setNotifyUrl("https://xxx");//回調的頁面,可以用來執行支付成功后的接口調用什么的
        // 這兩個據說都得是外網能訪問的,不是localhost那種,而且不能傳參
        try {
            AlipayTradePagePayResponse response = alipayClient.pageExecute(request);
            System.out.println(response.getBody());//輸出的就是Form表單
            return response.getBody();
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        return null;
    }
}

實現類寫在這兒了,像以前古老版本的有GitHub的,用的JSP。我這的就是Controller調用Impl,然后Controller接口直接return這個String,頁面就會根據這個String的Form表單

自動進行跳轉(因為Form下面有寫js)。如果無誤的話,就能到支付界面了。

然后再使用之前的商家信息頁面的賬號密碼,支付

附帶AlipayTradePagePayModel API

結尾

以下只是我的吐槽,可以不用看了

我是個憨批,起初在密鑰那困了許久,實在不懂他在講什么,因為我跳轉一直說簽名有問題,但其實最大的問題是我用錯類了!!!!

AlipayTradePagePayRequest、AlipayTradePagePayModel,這是網頁版正確的兩個類,

首先!我用的是App的!!!應該是AlipayTradeAppPayRequest、AlipayTradeAppPayModel

然后一直出錯,charset一改成utf-8就直接,我一度以為和charset有關,網上根本找不到這答案

如果我charset是gbk,下圖。並且setObject等一些參數必須用中文!!!不用中文就也是上面那張圖一樣!

然后!我看了各種博客以后,發現原來不是App,我就把App刪了!還是錯誤錯誤錯誤

最后才注意到用的是Page的,被我自己蠢哭


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM