@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>
时间: 2024-10-05 03:43:31