首页 > 代码库 > 支付宝即时到账收款接口

支付宝即时到账收款接口

官方文档 

参考网站

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("ssxtgf@163.com".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="http://www.mamicode.com/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="http://www.mamicode.com/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>

 

支付宝即时到账收款接口