@Controller
@RequestMapping
(value=
"/aliapi"
)
public
class
AlipayApiController {
private
static
Log log = LogFactory.getLog(AlipayApiController.
class
);
@RequestMapping
(value=
"/index"
)
public
String index(HttpServletRequest request,
HttpServletResponse response){
return
"web/pay/fund"
;
//付款的頁面。本頁面是爲了測試而使用的
}
@RequestMapping
(value =
"/deposit"
, method = RequestMethod.POST,produces =
"application/json"
)
public
String deposit(HttpServletRequest request,HttpServletResponse response,Model model)
throws
Exception {
// PrintWriter out = response.getWriter();
String result =
""
;
Date date =
new
Date();
// 支付類型
// 必填,不能修改
String payment_type =
"1"
;
// 服務器異步通知頁面路徑
// 需http://格式的完整路徑,不能加?id=123這類自定義參數
// 頁面跳轉同步通知頁面路徑
// 商戶訂單號.
// 商戶網站訂單系統中唯一訂單號,必填
//String out_trade_no = date.getTime() + "";
// 訂單名稱
// 必填
String subject =
"充值測試"
;
// 防釣魚時間戳
// 若要使用請調用類文件submit中的query_timestamp函數
String anti_phishing_key =
""
;
// 客戶端的IP地址
// 非局域網的外網IP地址,如:221.0.0.1
String exter_invoke_ip =
""
;
String total_fee = ServletRequestUtils.getStringParameter(request,
"amount"
,
""
);
String body = ServletRequestUtils.getStringParameter(request,
"body"
,
"test"
);
//商品展示地址
String show_url = ServletRequestUtils.getStringParameter(request,
"show_url"
,
"http://www.elve.cn"
);
Map<String, String> sParaTemp =
new
HashMap<String, String>();
sParaTemp.put(
"service"
,
"create_direct_pay_by_user"
);
//接口服務----即時到賬
sParaTemp.put(
"partner"
, AlipayConfig.partner);
//支付寶PID
sParaTemp.put(
"_input_charset"
, AlipayConfig.input_charset);
//統一編碼
sParaTemp.put(
"payment_type"
, payment_type);
//支付類型
sParaTemp.put(
"notify_url"
, notify_url);
//異步通知頁面
sParaTemp.put(
"return_url"
, return_url);
//頁面跳轉同步通知頁面
sParaTemp.put(
"seller_email"
, Constants.SELLER_EMAIL);
//賣家支付寶賬號
sParaTemp.put(
"out_trade_no"
, date.getTime()+payment_type);
//商品訂單編號
sParaTemp.put(
"subject"
, subject);
//商品名稱
sParaTemp.put(
"total_fee"
, total_fee);
//價格
sParaTemp.put(
"body"
, body);
sParaTemp.put(
"show_url"
, show_url);
sParaTemp.put(
"anti_phishing_key"
, anti_phishing_key);
sParaTemp.put(
"exter_invoke_ip"
, exter_invoke_ip);
//建立請求
try
{
String sHtmlText = AlipaySubmit.buildRequest(sParaTemp,
"post"
,
"確認"
);
Gson gson =
new
GsonBuilder().setDateFormat(
"yyyy-MM-dd HH:mm:ss"
).create();
String s = gson.toJson(sHtmlText);
model.addAttribute(
"sHtmlText"
, s);
request.setAttribute(
"sHtmlText"
, s);
result =
"{\"success\":true,\"msg\":\"跳轉成功\"}"
;
StringUtil.writeToWeb(sHtmlText,
"html"
, response);
return
null
;
}
catch
(Exception e) {
if
(log.isErrorEnabled()){
log.error(
"ddddddddddddddddddddd"
);
}
result =
"{\"success\":false,\"msg\":\"跳轉失敗,請稍候再試!\"}"
;
StringUtil.writeToWeb(result,
"html"
, response);
return
null
;
}
}
/**
* 同步通知的頁面的Controller
* @param request
* @param response
* @return
*/
@RequestMapping
(value=
"/return_url"
)
public
String Return_url(HttpServletRequest request,HttpServletResponse response){
return
"web/pay/success"
;
}
/**
* 異步通知付款狀態的Controller
* @param request
* @param response
* @return
*/
@SuppressWarnings
(
"rawtypes"
)
@RequestMapping
(value=
"/async"
,method = RequestMethod.GET)
public
String async(HttpServletRequest request,
HttpServletResponse response){
Map<String,String> params =
new
HashMap<String,String>();
Map requestParams = request.getParameterMap();
for
(Iterator 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] +
","
;
}
params.put(name, valueStr);
}
String tradeNo = request.getParameter(
"out_trade_no"
);
String tradeStatus = request.getParameter(
"trade_status"
);
//String notifyId = request.getParameter("notify_id");
if
(AlipayNotify.verify(params)){
//驗證成功
if
(tradeStatus.equals(
"TRADE_FINISHED"
) || tradeStatus.equals(
"TRADE_SUCCESS"
)) {
//要寫的邏輯。自己按自己的要求寫
log.error(
"ok......."
);
System.out.println(
">>>>>充值成功"
+ tradeNo);
}
return
"web/pay/success"
;
}
else
{
//驗證失敗
return
"web/pay/fail"
;
}
}
}