不少同學在寫商城想項目的時候,有遇到支付環節。今天我這裡分享一下,JAVA項目,如何調用支付寶的沙箱環境。
首先第一步:百度搜尋支付寶開放平台
第二步:登入進入首頁,點選進入管理中心
特别注意:到這裡下載下傳生成這個碼的一個軟體,這是支付寶為我們提供的。這裡也有詳細的說明,我就不再說了。
https://docs.open.alipay.com/291/105971
此外,我們還需要下載下傳支付寶給的一個 demo
https://docs.open.alipay.com/270/106291/
如何修改,具體如下:
1.複制
1.需要将這目錄下\src\com\alipay\config 的AlipayConfig.java放到你的項目中。
2.\WebContent 下的所有jsp複制到項目中
3.\WebContent\WEB-INF\lib 所有.jar複制到項目中。
到此我們複制工作已經完成,接下來我們來修改這個demo
2.修改
修改完成我們的支付沙箱環境也已經算是搭建好了。但是,大家在做項目的時候一定會有這樣的一個邏輯,就是讓支付成功之後才可以生成訂單,或者修改訂單狀态。目前我所使用的方法就是在return_url.jsp 這個裡寫一個js,自動送出form表單。雖然有個bug,但對于初學者,這是一個不錯的解決方案。下面附上jsp代碼。
這是支付寶,傳回訂單生成頁的jsp,如果提前關掉該頁面,則自動送出表單失效。
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>電腦網站支付return_url</title>
</head>
<%@ page import="java.util.*"%>
<%@ page import="java.util.Map"%>
<%@ page import="com.movie.utils.*"%>
<%@ page import="com.alipay.api.*"%>
<%@ page import="com.alipay.api.internal.util.*"%>
<%
/* *
* 功能:支付寶伺服器同步通知頁面
* 日期:2017-03-30
* 說明:
* 以下代碼隻是為了友善商戶測試而提供的樣例代碼,商戶可以根據自己網站的需要,按照技術文檔編寫,并非一定要使用該代碼。
* 該代碼僅供學習和研究支付寶接口使用,隻是提供一個參考。
*************************頁面功能說明*************************
* 該頁面僅做頁面展示,業務邏輯處理請勿在該頁面執行
*/
//擷取支付寶GET過來回報資訊
Map<String,String> params = new HashMap<String,String>();
Map<String,String[]> requestParams = request.getParameterMap();
for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) {
String name = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i]
: valueStr + values[i] + ",";
}
//亂碼解決,這段代碼在出現亂碼時使用
valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
params.put(name, valueStr);
}
boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.alipay_public_key, AlipayConfig.charset, AlipayConfig.sign_type); //調用SDK驗證簽名
//——請在這裡編寫您的程式(以下代碼僅作參考)——
if(signVerified) {
//商戶訂單号
String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");
//支付寶交易号
String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");
//付款金額
String total_amount = new String(request.getParameter("total_amount").getBytes("ISO-8859-1"),"UTF-8");
out.println("trade_no:"+trade_no+"<br/>out_trade_no:"+out_trade_no+"<br/>total_amount:"+total_amount);
}else {
out.println("驗簽失敗");
}
//——請在這裡編寫您的程式(以上代碼僅作參考)——
%>
<body>
<script type="text/javascript">
function dtime(){
setInterval(sub(), 30000);
}
function sub(){
document.getElementById("frm").submit();
}
</script>
<body onload="dtime();">
<form action="getOrder" method="post" id="frm">
<input type="hidden" name="order_where" value="${order.order_where}">
<input type="hidden" name="order_id" value="${order.order_id}">
<input type="hidden" name="order_seq" value="${order.order_seq}">
<input type="submit" >
</form>
</body>
</html>