前言
我就是個沙雕,用錯類,搞了一天。但我就是想噴,垃圾沙箱,不人性化,解釋都不清楚,搞的很累。手機版的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)。如果無誤的話,就能到支付界面了。
然后再使用之前的商家信息頁面的賬號密碼,支付
結尾
以下只是我的吐槽,可以不用看了
我是個憨批,起初在密鑰那困了許久,實在不懂他在講什么,因為我跳轉一直說簽名有問題,但其實最大的問題是我用錯類了!!!!
AlipayTradePagePayRequest、AlipayTradePagePayModel,這是網頁版正確的兩個類,
首先!我用的是App的!!!應該是AlipayTradeAppPayRequest、AlipayTradeAppPayModel
然后一直出錯,charset一改成utf-8就直接,我一度以為和charset有關,網上根本找不到這答案
如果我charset是gbk,下圖。並且setObject等一些參數必須用中文!!!不用中文就也是上面那張圖一樣!
然后!我看了各種博客以后,發現原來不是App,我就把App刪了!還是錯誤錯誤錯誤
最后才注意到用的是Page的,被我自己蠢哭