Date date = new Date(); |
//支付类型 必填 不必修改 |
String payment_type = "1" ; |
|
//服务器异步通知页面路径 |
//需http://格式的完整路径,不能加?id=123这类自定义参数 |
String notify_url = "http://localhost:8080/alipay/async" ; |
|
//页面跳转同步通知页面路径 |
//需http://格式的完整路径,不能加?id=123这类自定义参数,不能写成http://localhost/ |
String return_url = "http://192.168.0.222:8080/alipay/return_url" ; |
|
//订单名称 |
//必填 |
// String subject = new String(request.getParameter("WIDsubject").getBytes("ISO-8859-1"),"UTF-8"); |
String subject = new String( "测试商品" .getBytes( "ISO-8859-1" ), "UTF-8" ); |
|
//付款金额 |
//必填 |
// String total_fee = new String(request.getParameter("WIDtotal_fee").getBytes("ISO-8859-1"),"UTF-8"); |
String total_fee = "0.01" ; |
|
|
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); //价格 |
|
//建立请求 |
String sHtmlText = AlipaySubmit.buildRequest(sParaTemp, "get" , "立即付款" ); |
request.setAttribute( "sHtmlText" , sHtmlText); |
|
return null ; |
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" ); |
if (AlipayNotify.verify(params)){ |
if (tradeStatus.equals( "TRADE_FINISHED" ) || tradeStatus.equals( "TRADE_SUCCESS" )){ |
System.out.println( "ok!>>>>>>>>" + tradeNo); |
} |
return "success" ; |
} else { |
return "fail" ; |
} |
} |
/** |
* 支付宝Controller |
* @author 宗潇帅 |
* @修改日期 2014-9-25下午1:29:53 |
*/ |
@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 notify_url = "http://192.168.0.222:8080/live/aliapi/async" ; |
// 页面跳转同步通知页面路径 |
// 需http://格式的完整路径,不能加?id=123这类自定义参数,不能写成http://localhost/ |
String return_url = "http://192.168.0.222:8080/live/aliapi/return_url" ; |
// 商户订单号. |
// 商户网站订单系统中唯一订单号,必填 |
//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" ); |
//需以http://开头的完整路径,例如:http://www.xxx.com/myorder.html |
|
|
|
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 |
* @author 宗潇帅 |
*/ |
@RequestMapping (value= "/return_url" ) |
public String Return_url(HttpServletRequest request,HttpServletResponse response){ |
return "web/pay/success" ; |
} |
/** |
* 异步通知付款状态的Controller |
* @param request |
* @param response |
* @return |
* @author 宗潇帅 |
*/ |
@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" ; |
} |
|
} |
} |
<%@ page contentType= "text/html;charset=UTF-8" %> |
<!DOCTYPE html> |
<html xmlns= "http://www.w3.org/1999/xhtml" > |
<head> |
<meta http-equiv= "Content-Type" content= "text/html; charset=utf-8" /> |
<%@ include file= "/common/webMeta.jsp" %> |
<title>www.elve.cn</title> |
<meta content= "www.elve.cn" name= "keywords" /> |
<meta content= "www.elve.cn" name= "description" /> |
</head> |
<script type= "text/javascript" > |
$(function(){ |
$( "#amount" ).focus(); |
$( "#doSubmit" ).click(function(){ |
form1.submit(); |
}); |
}); |
</script> |
<body> |
<form id= "form1" action= "${ctx }/aliapi/deposit" method= "post" target= "_blank" > |
<table cellpadding= "10" > |
<tr> |
<td>充值测试</td> |
<td class = "balance" id= "userBalance" ></td> |
</tr> |
<tr> |
<td><i class = "zfb" ></i></td> |
<td style= "padding-bottom: 0px;" >亲爱的<span |
class = "suppliment_user" id= "suppliment_user" ></span>,您可以使用支付宝充值积善分,请填写以下信息 |
</td> |
</tr> |
<tr> |
<td></td> |
<td> |
金额<input type= "text" name= "amount" id= "amount" > |
</td> |
</tr> |
|
<tr> |
<td></td> |
<td><a href= "javascript:void(0);" id= "doSubmit" class = "blank_btn" >确认</a></td> |
</tr> |
</table> |
</form> |
</body> |
</html> |
初级程序员
by: 夜晚一匹狼 发表于:2016-03-13 09:56:38 顶(2) | 踩(2) 回复
写得不错,刚好需要!谢谢拉
回复评论