java實現實現支付寶接口
螞蟻沙箱環境 (Beta) 是協助開發者進行接口功能開發及主要功能聯調的輔助環境。可以模擬實現支付寶的支付功能。
接下的實現技術是運用到springmvc註解方法實現的支付。
準備工作
-
去支付寶開放平臺,用你的支付登錄開通沙箱支付的服務。支付寶開放平臺
-
點擊右上角的立即入駐之後,確認加入。
-
點擊導航欄的開發者中心,之後就進入到沙箱應用,再點擊右邊的設置。
-
點擊研發服務
-
使用支付寶祕鑰生成器生成自己的私鑰和公鑰,公鑰填至框中,私鑰自己保管好。使用工具生成器生成好的密鑰會自動給你保存到你的電腦。 然後保存設置。
-
然後點擊查看,可以看到你的公鑰和支付寶的公鑰,說明你已經配置好了。
-
沙箱賬號就是買家和商家的賬號和密碼,還有金額,可以進行充值,手機下載沙箱錢包,用買家賬號密碼登錄即可,就可以掃碼付款了,付款的金額就到了商家的賬戶餘額裏。
java代碼實現支付
- 前臺發請求的代碼,需要獲取訂單號和訂單金額傳到後臺。
注意:後臺返回的數據格式不能輸json類型
因爲json類型的返回的數據
//支付的請求
function topay(price,that){
//獲取訂單號
var ono=$(that).attr("id");
$.post("../../apli/pay",{ono:ono,price:price},function(data){
$("#apli").html(data);
},"text")
}
- 支付寶接口的配置類 ApplicationConfig.java
對應的地方修改成你自己的一些信息。
特別注意一下異步和同步通知頁面路徑的處理
public class ApplicationConfig {
// 應用ID,您的APPID,收款賬號既是您的APPID對應支付寶賬號
public static String app_id = "2016102400748299";
// 商戶私鑰,您的PKCS8格式RSA2私鑰
public static String merchant_private_key = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDTcUPbyeVtd/a7mgtC/cs1QhvXDo8BJM6";
// 支付寶公鑰
public static String alipay_public_key = "SuFoWXQxhVJhPW0Gp7WKtBiPSkVovQoOwY/bFKfyDJSY92oS1mNWjoIzr7vS52fc374rm9fVbZPFau5xu5q6hNmOCekM/W9SEKPyxk4lAB+hQYcgiSjGANBo+v3y55OHQIzrylQIDAQAB";
/*
* 服務器異步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數
* 必須外網可以正常訪問
* 一般就是支付成功時,修改數據庫之類的操作
*/
public static String notify_url = "http://localhost:8080/project/apli/update";
/*
* 頁面跳轉同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數
* 通知頁面一般用來,支付成功後,需要跳轉什麼頁面之類的處理
*/
public static String return_url = "http://localhost:8080/project/apli/return";
// 簽名方式,注意這裏,如果步驟設置的是RSA則用RSA
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:\\";
}
- ApliConfigController.java類。 具體操作的實現
@RestController
@RequestMapping("/apli")
public class ApliConfigController {
@RequestMapping("/pay") //踩坑記錄->這裏不可直接return result; 必須要response.getWriter().print(result);或者以map鍵值對方法返回
public String toPay(String ono,double price,HttpServletRequest request,HttpServletResponse resp,HttpSession session) throws AlipayApiException, IOException, ServletException {
//獲得初始化的AlipayClient
AlipayClient alipayClient = new DefaultAlipayClient(ApplicationConfig.gatewayUrl, ApplicationConfig.app_id, ApplicationConfig.merchant_private_key, "json", ApplicationConfig.charset, ApplicationConfig.alipay_public_key, ApplicationConfig.sign_type);
//設置請求參數
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
alipayRequest.setReturnUrl(ApplicationConfig.return_url);
alipayRequest.setNotifyUrl(ApplicationConfig.notify_url);
alipayRequest.setBizContent("{\"out_trade_no\":\""+ono +"\","
+ "\"total_amount\":\""+ price +"\","
+ "\"subject\":\""+ " Y呀網站支付 " +"\","
+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
String result = alipayClient.pageExecute(alipayRequest).getBody();
resp.setContentType("text/html; charset=utf-8");
resp.getWriter().print(result);
return null;
}
@RequestMapping("/return")
public void toIndex(HttpServletResponse resp,HttpSession session) throws IOException{
//取session
MemberInfo member=(MemberInfo) session.getAttribute("loginUser");
//支付成功跳轉頁面
PrintWriter out = resp.getWriter();
out.print("<script>location.href='../front/page/order.html'</script>");
//支付成功後跳轉頁面你的session會清空,如果還需要可以在存一次session
session.setAttribute("loginUser", member);
}
}
支付寶沙箱支付的官方文檔
- 沙箱支付文檔
更加深入的學習。 - 如若有問題,留言,我們一起探討…