在Java Web中使用支付寶沙箱支付
阿新 • • 發佈:2018-12-23
前言
一直想弄一個有關於支付的第三方介面呼叫的web專案,網上看了一大堆資料,最後還是選擇了使用支付寶。原因有一下兩點:
- 不用另外註冊賬戶(一直討厭註冊各種賬戶)
- 支付寶有沙箱功能,可以實現虛擬支付,適合拿來練手
下面就進入正題吧
進入沙箱
支付寶掃碼登入螞蟻金服開放平臺之後,在首頁的常用功能那裡進入沙箱應用,如果是第一次使用,就需要新增功能。參考下圖
生成RSA金鑰
進入沙箱應用之後可以看到資訊配置部分需要設定RSA2(SHA256)金鑰,由於我已經設定過了,這裡就沒有相應的截圖。
生成RSA金鑰的工具官方也提供了,直接檢視 生成RSA金鑰進入下載工具,並按照步驟就可以生成金鑰了。
上傳金鑰
通過上一步生成的金鑰,直接在沙箱應用中上傳,如果驗證通過的話,就可以開始接入程式碼了。
下載demo
在官網中下載demo:https://docs.open.alipay.com/270/106291/, 將demo解壓。然後下載沙箱版的支付寶(只支援安卓版),然後回到沙箱環境中,檢視沙箱賬號,用買家資訊登入。
合併入自己的專案
下面就以一個簡單的例子開始,具體步驟如下:
- 將解壓檔案中的jar包放入專案
lib
中,把 jsp檔案 或者自己寫的頁面複製入專案, - 修改
AlipayConfig
檔案的部分配置 - 編寫簡單的
servlet
- 執行檢視支付
詳細的目錄結構如下:
AlipayConfig:
public class AlipayConfig {
//↓↓↓↓↓↓↓↓↓↓請在這裡配置您的基本資訊↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
// 應用ID,您的APPID,收款賬號既是您的APPID對應支付寶賬號
public static String app_id = "填入沙箱APPID";
// 商戶私鑰,您的PKCS8格式RSA2私鑰
public static String merchant_private_key = "填入你的金鑰";
// 支付寶公鑰,檢視地址:https://openhome.alipay.com/platform/keyManage.htm 對應APPID下的支付寶公鑰。
public static String alipay_public_key = "填入公鑰";
// 伺服器非同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義引數,必須外網可以正常訪問
public static String notify_url = "http://localhost:8080/alipay.trade.page.pay-JAVA-UTF-8/notify_url.jsp";
// 頁面跳轉同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義引數,必須外網可以正常訪問
public static String return_url = "http://localhost:8080/alipay.trade.page.pay-JAVA-UTF-8/return_url.jsp";
// 簽名方式
public static String sign_type = "RSA2";
// 字元編碼格式
public static String charset = "utf-8";
// 支付寶閘道器
public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
// 支付寶閘道器
public static String log_path = "C:\\";
servlet程式碼:
這裡寫了一個簡單的doGet方法,當請求這個servlet
的時候就會執行支付,然後使用沙箱版的支付寶直接掃碼或者網頁登入沙箱應用賬號就可以支付了
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//獲得初始化的AlipayClient
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
//設定請求引數
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
alipayRequest.setReturnUrl(AlipayConfig.return_url);
alipayRequest.setNotifyUrl(AlipayConfig.notify_url);
//商戶訂單號,商戶網站訂單系統中唯一訂單號,必填
String out_trade_no = "20181037";
//付款金額,必填
String total_amount = "9999";
//訂單名稱,必填
String subject = "支付寶測試";
//商品描述,可空
String body = "商品描述";
alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
+ "\"total_amount\":\""+ total_amount +"\","
+ "\"subject\":\""+ subject +"\","
+ "\"body\":\""+ body +"\","
+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
//請求
String result;
try {
result = alipayClient.pageExecute(alipayRequest).getBody();
response.setContentType("text/html;charset=" + AlipayConfig.charset);
response.getWriter().write(result);//直接將完整的表單html輸出到頁面
response.getWriter().flush();
response.getWriter().close();
} catch (AlipayApiException e) {
e.printStackTrace();
response.getWriter().write("捕獲異常出錯");
response.getWriter().flush();
response.getWriter().close();
}
}
效果:
這時候直接使用沙箱版掃碼支付就可以了
從此不用擔心錢的問題,隨心所欲,不用家裡有礦也有花不完的錢!!!