@RequiresUser @RequestMapping(value = "/alipayapi") public String alipayapi( HttpServletRequest request,HttpServletResponse response) { ////////////////////////////////////请求参数////////////////////////////////////// //支付类型 String payment_type = "1"; //必填,不能修改 //服务器异步通知页面路径 String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath(); String notify_url = basePath+"/sku/alipayerr"; //需http://格式的完整路径,不能加?id=123这类自定义参数 //页面跳转同步通知页面路径 String return_url = basePath+"/sku/alipaysync"; //需http://格式的完整路径,不能加?id=123这类自定义参数,不能写成http://localhost/ PrintWriter out = null; try { out = response.getWriter(); } catch (IOException e) { e.printStackTrace(); } //商户订单号 String out_trade_no = null; try { out_trade_no = new String(request.getParameter("WIDout_trade_no").getBytes("ISO-8859-1"),"UTF-8"); //商户网站订单系统中唯一订单号,必填 //订单名称 String subject = new String(request.getParameter("WIDsubject").getBytes("ISO-8859-1"),"UTF-8"); //必填 //付款金额 String total_fee = new String(request.getParameter("WIDtotal_fee").getBytes("ISO-8859-1"),"UTF-8"); //必填 //订单描述 String body = new String(request.getParameter("WIDbody").getBytes("ISO-8859-1"),"UTF-8"); //商品展示地址 String show_url = new String(request.getParameter("WIDshow_url").getBytes("ISO-8859-1"),"UTF-8"); //需以http://开头的完整路径,例如:http://www.商户网址.com/myorder.html //防钓鱼时间戳 String anti_phishing_key = ""; //若要使用请调用类文件submit中的query_timestamp函数 //客户端的IP地址 String exter_invoke_ip = ""; //非局域网的外网IP地址,如:221.0.0.1 ////////////////////////////////////////////////////////////////////////////////// //把请求参数打包成数组 Map<String, String> sParaTemp = new HashMap<String, String>(); sParaTemp.put("service", "create_direct_pay_by_user"); sParaTemp.put("partner", AlipayConfig.partner); sParaTemp.put("seller_email", AlipayConfig.seller_email); 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("out_trade_no", out_trade_no); 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); //建立请求 String sHtmlText = AlipaySubmit.buildRequest(sParaTemp, "get", "立即付款"); out.println(sHtmlText); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return null; } //页面跳转同步通知页面路径 @RequiresUser @RequestMapping(value = "/alipayerr") public void alipayerr( HttpServletRequest request,HttpServletResponse response){ //获取支付宝POST过来反馈信息 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] + ","; } //乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化 //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk"); params.put(name, valueStr); } //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)// //商户订单号 try { 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 trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8"); //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以上仅供参考)// PrintWriter out = null; try { out = response.getWriter(); } catch (IOException e) { e.printStackTrace(); } if(AlipayNotify.verify(params)){//验证成功 ////////////////////////////////////////////////////////////////////////////////////////// //请在这里加上商户的业务逻辑程序代码 //——请根据您的业务逻辑来编写程序(以下代码仅作参考)—— if(trade_status.equals("TRADE_FINISHED")){ //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的 //如果有做过处理,不执行商户的业务程序 //注意: //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知 } else if (trade_status.equals("TRADE_SUCCESS")){ //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的 //如果有做过处理,不执行商户的业务程序 //注意: //付款完成后,支付宝系统发送该交易状态通知 } //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— out.println("success"); //请不要修改或删除 ////////////////////////////////////////////////////////////////////////////////////////// }else{//验证失败 out.println("fail"); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } //页面跳转同步通知页面路径 @RequiresUser @RequestMapping(value = "/alipaysync") public void alipaysync( HttpServletRequest request, HttpServletResponse response){ //获取支付宝GET过来反馈信息 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] + ","; } //乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化 // try { // valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8"); // } catch (UnsupportedEncodingException e) { // e.printStackTrace(); // } params.put(name, valueStr); } //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)// //商户订单号 PrintWriter out = null; try { out = response.getWriter(); } catch (IOException e) { e.printStackTrace(); } try { 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 trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8"); //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以上仅供参考)// //计算得出通知验证结果 boolean verify_result = AlipayNotify.verify(params); if(verify_result){//验证成功 ////////////////////////////////////////////////////////////////////////////////////////// //请在这里加上商户的业务逻辑程序代码 //——请根据您的业务逻辑来编写程序(以下代码仅作参考)—— if(trade_status.equals("TRADE_FINISHED") || trade_status.equals("TRADE_SUCCESS")){ //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 } //该页面可做页面美工编辑 out.println("验证成功<br />"); //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— ////////////////////////////////////////////////////////////////////////////////////////// }else{ //该页面可做页面美工编辑 out.println("验证失败"); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } }
<%
/* *
*功能:支付宝即时到账交易接口调试入口页面
*版本:3.3
*日期:2012-08-17
*说明:
*以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
*/
%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="ctx" value="${pageContext.request.contextPath}"/>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>支付宝即时到账交易接口</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style>
*{
margin:0;
padding:0;
}
ul,ol{
list-style:none;
}
.title{
color: #ADADAD;
font-size: 14px;
font-weight: bold;
padding: 8px 16px 5px 10px;
}
.hidden{
display:none;
}
.new-btn-login-sp{
border:1px solid #D74C00;
padding:1px;
display:inline-block;
}
.new-btn-login{
background-color: #ff8c00;
color: #FFFFFF;
font-weight: bold;
border: medium none;
width:82px;
height:28px;
}
.new-btn-login:hover{
background-color: #ffa300;
width: 82px;
color: #FFFFFF;
font-weight: bold;
height: 28px;
}
.bank-list{
overflow:hidden;
margin-top:5px;
}
.bank-list li{
float:left;
width:153px;
margin-bottom:5px;
}
#main{
width:750px;
margin:0 auto;
font-size:14px;
font-family:‘宋体‘;
}
#logo{
background-color: transparent;
background-image: url("images/new-btn-fixed.png");
border: medium none;
background-position:0 0;
width:166px;
height:35px;
float:left;
}
.red-star{
color:#f00;
width:10px;
display:inline-block;
}
.null-star{
color:#fff;
}
.content{
margin-top:5px;
}
.content dt{
width:160px;
display:inline-block;
text-align:right;
float:left;
}
.content dd{
margin-left:100px;
margin-bottom:5px;
}
#foot{
margin-top:10px;
}
.foot-ul li {
text-align:center;
}
.note-help {
color: #999999;
font-size: 12px;
line-height: 130%;
padding-left: 3px;
}
.cashier-nav {
font-size: 14px;
margin: 15px 0 10px;
text-align: left;
height:30px;
border-bottom:solid 2px #CFD2D7;
}
.cashier-nav ol li {
float: left;
}
.cashier-nav li.current {
color: #AB4400;
font-weight: bold;
}
.cashier-nav li.last {
clear:right;
}
.alipay_link {
text-align:right;
}
.alipay_link a:link{
text-decoration:none;
color:#8D8D8D;
}
.alipay_link a:visited{
text-decoration:none;
color:#8D8D8D;
}
</style>
</head>
<body text=#000000 bgColor="#ffffff" leftMargin=0 topMargin=4>
<div id="main">
<div id="head">
<dl class="alipay_link">
<a target="_blank" href="http://www.alipay.com/"><span>支付宝首页</span></a>|
<a target="_blank" href="https://b.alipay.com/home.htm"><span>商家服务</span></a>|
<a target="_blank" href="http://help.alipay.com/support/index_sh.htm"><span>帮助中心</span></a>
</dl>
<span class="title">支付宝即时到账交易接口快速通道</span>
</div>
<div class="cashier-nav">
<ol>
<li class="current">1、确认信息 →</li>
<li>2、点击确认 →</li>
<li class="last">3、确认完成</li>
</ol>
</div>
<form name=alipayment action="${ctx}/sku/alipayapi" method="get" target="_blank">
<div id="body" style="clear:left">
<dl class="content">
<dt>商户订单号:</dt>
<dd>
<span class="null-star">*</span>
<input size="30" name="WIDout_trade_no" />
<span>商户网站订单系统中唯一订单号,必填
</span>
</dd>
<dt>订单名称:</dt>
<dd>
<span class="null-star">*</span>
<input size="30" name="WIDsubject" />
<span>必填
</span>
</dd>
<dt>付款金额:</dt>
<dd>
<span class="null-star">*</span>
<input size="30" name="WIDtotal_fee" />
<span>必填
</span>
</dd>
<dt>订单描述
:</dt>
<dd>
<span class="null-star">*</span>
<input size="30" name="WIDbody" />
<span></span>
</dd>
<dt>商品展示地址:</dt>
<dd>
<span class="null-star">*</span>
<input size="30" name="WIDshow_url" />
<span>需以http://开头的完整路径,例如:http://www.商户网址.com/myorder.html
</span>
</dd>
<dt></dt>
<dd>
<span class="new-btn-login-sp">
<button class="new-btn-login" type="submit" style="text-align:center;">确 认</button>
</span>
</dd>
</dl>
</div>
</form>
<div id="foot">
<ul class="foot-ul">
<li><font class="note-help">如果您点击“确认”按钮,即表示您同意该次的执行操作。 </font></li>
<li>
支付宝版权所有 2011-2015 ALIPAY.COM
</li>
</ul>
</div>
</div>
</body>
</html>
原文:http://www.cnblogs.com/yaoyao66123/p/5165877.html