官方文档
1.src导入taobao接口包 lib导入jar包
2.三个支付宝界面
alipayapi.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="com.alipay.config.*"%> <%@ page import="com.alipay.util.*"%> <%@ page import="java.util.HashMap"%> <%@ page import="java.util.Map"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>支付宝纯担保交易接口</title> </head> <% ////////////////////////////////////请求参数////////////////////////////////////// //支付类型 String payment_type = "1"; //必填,不能修改 //服务器异步通知页面路径。暂不处理 String notify_url = "http://60.174.234.114:8080/cs4/notify_url.jsp"; //需http://格式的完整路径,不能加?id=123这类自定义参数 //页面跳转同步通知页面路径 String return_url = "http://60.174.234.114:8080/cs4/return_url.jsp"; //需http://格式的完整路径,不能加?id=123这类自定义参数,不能写成http://localhost/ //卖家支付宝帐户 String seller_email = new String("[email protected]".getBytes("ISO-8859-1"), "UTF-8"); //公司账号需要申请 //必填 //商户订单号 //String out_trade_no = new String(((String)request.getSession().getAttribute("orderid")).getBytes("ISO-8859-1"),"UTF-8"); String orderid = String.valueOf(request.getAttribute("orderid")); String out_trade_no = new String(orderid);//系统毫秒数可否考虑? //商户网站订单系统中唯一订单号,必填 //订单名称 String subject = new String((String) request.getAttribute("productname")); //必填 //付款金额 //String price = new String(((String)request.getSession().getAttribute("money")).getBytes("ISO-8859-1"),"UTF-8"); String price = new String((String) request.getAttribute("total")); //测试用 String price = "1.01"; //必填 //商品数量 String quantity = "1"; //必填,建议默认为1,不改变值,把一次交易看成是一次下订单而非购买一件商品 //物流费用 String logistics_fee = "0.00"; //必填,即运费 //物流类型 String logistics_type = "EXPRESS"; //必填,三个值可选:EXPRESS(快递)、POST(平邮)、EMS(EMS) //物流支付方式 String logistics_payment = "SELLER_PAY"; //必填,两个值可选:SELLER_PAY(卖家承担运费)、BUYER_PAY(买家承担运费) //订单描述 ////////////////////////////////////////////////////////////////////////////////// //把请求参数打包成数组 Map<String, String> sParaTemp = new HashMap<String, String>(); sParaTemp.put("service", "create_partner_trade_by_buyer"); sParaTemp.put("partner", AlipayConfig.partner); 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", seller_email); sParaTemp.put("out_trade_no", out_trade_no); sParaTemp.put("subject", subject); sParaTemp.put("price", price); sParaTemp.put("quantity", quantity); sParaTemp.put("logistics_fee", logistics_fee); sParaTemp.put("logistics_type", logistics_type); sParaTemp.put("logistics_payment", logistics_payment); //建立请求 String sHtmlText = AlipaySubmit .buildRequest(sParaTemp, "get", "确认"); out.println(sHtmlText); %> <body> </body> </html>
notify_url.jsp
<% /* * 功能:支付宝服务器异步通知页面 版本:3.3 日期:2012-08-17 说明: 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。 该代码仅供学习和研究支付宝接口使用,只是提供一个参考。 //***********页面功能说明*********** 创建该页面文件时,请留心该页面文件中无任何HTML代码及空格。 该页面不能在本机电脑测试,请到服务器上做测试。请确保外部可以访问该页面。 该页面调试工具请使用写文本函数logResult,该函数在com.alipay.util文件夹的AlipayNotify.java类文件中 如果没有收到该页面返回的 success 信息,支付宝会在24小时内按一定的时间策略重发通知 //******************************** * */ %> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.*"%> <%@ page import="com.alipay.util.*"%> <%@ page import="com.alipay.config.*"%> <%@page import="xuntong.entity.Orderlist"%> <%@page import="xuntong.impl.OrderListDAOImpl"%> <%@page import="xuntong.dao.IOrderListDAO"%> <% //获取支付宝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); } //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)// //商户订单号 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"); //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以上仅供参考)// if (AlipayNotify.verify(params)) {//验证成功 ////////////////////////////////////////////////////////////////////////////////////////// //请在这里加上商户的业务逻辑程序代码 //——请根据您的业务逻辑来编写程序(以下代码仅作参考)—— if (trade_status.equals("WAIT_BUYER_PAY")) { //该判断表示买家已在支付宝交易管理中产生了交易记录,但没有付款 //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 out.println("success"); //请不要修改或删除 } else if (trade_status.equals("WAIT_SELLER_SEND_GOODS")) { //该判断表示买家已在支付宝交易管理中产生了交易记录且付款成功,但卖家没有发货 //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 IOrderListDAO orderListDAO = new OrderListDAOImpl(); Orderlist orderlist = orderListDAO.get(Integer.parseInt(out_trade_no)); orderlist.setPaystatus("1"); orderListDAO.update(orderlist); out.println("success"); //订单付款状态码更新了 //请不要修改或删除 } else if (trade_status.equals("WAIT_BUYER_CONFIRM_GOODS")) { //该判断表示卖家已经发了货,但买家还没有做确认收货的操作 //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 out.println("success"); //请不要修改或删除 } else if (trade_status.equals("TRADE_FINISHED")) { //该判断表示买家已经确认收货,这笔交易完成 //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 out.println("success"); //请不要修改或删除 } else { out.println("success"); //请不要修改或删除 } //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— ////////////////////////////////////////////////////////////////////////////////////////// } else {//验证失败 out.println("fail"); } %>
return_url.jsp
<%@page import="xuntong.entity.Orderlist"%> <%@page import="xuntong.impl.OrderListDAOImpl"%> <%@page import="xuntong.dao.IOrderListDAO"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.*"%> <%@ page import="java.util.Map"%> <%@ page import="com.alipay.util.*"%> <%@ page import="com.alipay.config.*"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>支付宝页面跳转同步通知页面</title> <link rel="stylesheet" type="text/css" href="css/style.css" /> </head> <body> <% //获取支付宝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不相等也可以使用这段代码转化 valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8"); params.put(name, valueStr); } //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)// //商户订单号 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) {//验证成功 ////////////////////////////////////////////////////////////////////////////////////////// //请在这里加上商户的业务逻辑程序代码 %> <div> <img src="images/buyOk.jpg"> //显示成功界面 </div> <% //——请根据您的业务逻辑来编写程序(以下代码仅作参考)—— if (trade_status.equals("WAIT_SELLER_SEND_GOODS")) { //判断该笔订单是否已支付,如果支付,通过out_trade_no,调用get(int orderid)获取用户订单信息,将status改为"1",调用update() IOrderListDAO orderListDAO=new OrderListDAOImpl(); Orderlist orderlist = orderListDAO.get(Integer.parseInt(out_trade_no)); orderlist.setPaystatus("1"); orderListDAO.update(orderlist); //更新订单支付状态码 } //该页面可做页面美工编辑 //out.println("验证成功<br />"); //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— ////////////////////////////////////////////////////////////////////////////////////////// } else { //该页面可做页面美工编辑 out.println("验证失败"); } %> </body> </html>
时间: 2024-10-02 01:10:04