• java 支付宝 第三方即时到账支付 接口


    alipay 的几个内核功能文件:
    AlipayFunction.java

    复制代码
    package com.test.util.alipay;
    
    import java.io.FileWriter;
    import java.io.IOException;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Node;
    import org.dom4j.io.SAXReader;
    
    public class AlipayFunction {
        /**
         * 功能:生成签名结果
         * @param sArray 要签名的数组
         * @param key 安全校验码
         * @return 签名结果字符串
         */
        public static String BuildMysign(Map sArray, String key) {
            String prestr = CreateLinkString(sArray);  //把数组全部元素,依照“參数=參数值”的模式用“&”字符拼接成字符串
            prestr = prestr + key;                     //把拼接后的字符串再与安全校验码直接连接起来
            String mysign = Md5Encrypt.md5(prestr);
            return mysign;
        }
        
        /**
         * 功能:除去数组中的空值和签名參数
         * @param sArray 签名參数组
         * @return 去掉空值与签名參数后的新签名參数组
         */
        public static Map ParaFilter(Map sArray){
            List keys = new ArrayList(sArray.keySet());
            Map sArrayNew = new HashMap();
            
            for(int i = 0; i < keys.size(); i++){
                String key = (String) keys.get(i);
                String value = (String) sArray.get(key);
                
                if( value == null || value.equals("") ||
                        key.equalsIgnoreCase("sign") || key.equalsIgnoreCase("sign_type")){
                    continue;
                }
                
                sArrayNew.put(key, value);
            }
            
            return sArrayNew;
        }
        
        /**
         * 功能:把数组全部元素排序,并依照“參数=參数值”的模式用“&”字符拼接成字符串
         * @param params 须要排序并參与字符拼接的參数组
         * @return 拼接后字符串
         */
        public static String CreateLinkString(Map params){
            List keys = new ArrayList(params.keySet());
            Collections.sort(keys);
    
            String prestr = "";
    
            for (int i = 0; i < keys.size(); i++) {
                String key = (String) keys.get(i);
                String value = (String) params.get(key);
    
                if (i == keys.size() - 1) {//拼接时。不包含最后一个&字符
                    prestr = prestr + key + "=" + value;
                } else {
                    prestr = prestr + key + "=" + value + "&";
                }
            }
    
            return prestr;
        }
        
        /**
         * 功能:写日志,方便測试(看站点需求。也能够改成把记录存入数据库)
         * @param sWord 要写入日志里的文本内容
         */
        public static void LogResult(String sWord){
            // 该文件存在于和应用server 启动文件同一文件夹下,文件名称是alipay log加server时间
            try {
                FileWriter writer = new FileWriter("D:\alipay_log" + System.currentTimeMillis() + ".txt");
                writer.write(sWord);
                writer.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
        /**
         * 功能:用于防钓鱼。调用接口query_timestamp来获取时间戳的处理函数
         * 注意:远程解析XML出错。与server是否支持SSL等配置有关
         * @param partner 合作身份者ID
         * @return 时间戳字符串
         * @throws IOException
         * @throws DocumentException
         * @throws MalformedURLException
         */
        
        public static String query_timestamp(String partner)
                throws MalformedURLException, DocumentException, IOException {
            String strUrl = "https://mapi.alipay.com/gateway.do?

    service=query_timestamp&partner="+partner; StringBuffer buf1 = new StringBuffer(); SAXReader reader = new SAXReader(); Document doc = reader.read(new URL(strUrl).openStream()); List<Node> nodeList = doc.selectNodes("//alipay/*"); for (Node node : nodeList) { // 截取部分不须要解析的信息 if (node.getName().equals("is_success") && node.getText().equals("T")) { // 推断是否有成功标示 List<Node> nodeList1 = doc.selectNodes("//response/timestamp/*"); for (Node node1 : nodeList1) { buf1.append(node1.getText()); } } } return buf1.toString(); } }

    复制代码

    AlipayNotify.java

    复制代码
    package com.test.util.alipay;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.Map;
    
    import com.test.constants.AlipayConfig;
    
    public class AlipayNotify {
        /**
         * *功能:依据反馈回来的信息。生成签名结果
         * @param Params 通知返回来的參数数组
         * @param key 安全校验码
         * @return 生成的签名结果
         */
        public static String GetMysign(Map Params, String key){
            Map sParaNew = AlipayFunction.ParaFilter(Params);//过滤空值、sign与sign_type參数
            String mysign = AlipayFunction.BuildMysign(sParaNew, key);//获得签名结果
            
            return mysign;
        }
        
        /**
        * *功能:获取远程serverATN结果,验证返回URL
        * @param notify_id 通知校验ID
        * @return serverATN结果
        * 验证结果集:
        * invalid命令參数不正确 出现这个错误,请检測返回处理中partner和key是否为空
        * true 返回正确信息
        * false 请检查防火墙或者是server阻止端口问题以及验证时间是否超过一分钟
        */
        public static String Verify(String notify_id){
            //获取远程serverATN结果,验证是否是支付宝server发来的请求
            String transport = AlipayConfig.transport;
            String partner = AlipayConfig.partner;
            String veryfy_url = "";
            if(transport.equalsIgnoreCase("https")){
                veryfy_url = "https://www.alipay.com/cooperate/gateway.do?

    service=notify_verify"; } else{ veryfy_url = "http://notify.alipay.com/trade/notify_query.do?"; } veryfy_url = veryfy_url + "&partner=" + partner + "¬ify_id=" + notify_id; String responseTxt = CheckUrl(veryfy_url); return responseTxt; } /** * *功能:获取远程serverATN结果 * @param urlvalue 指定URL路径地址 * @return serverATN结果 * 验证结果集: * invalid命令參数不正确 出现这个错误,请检測返回处理中partner和key是否为空 * true 返回正确信息 * false 请检查防火墙或者是server阻止端口问题以及验证时间是否超过一分钟 */ public static String CheckUrl(String urlvalue){ String inputLine = ""; try { URL url = new URL(urlvalue); HttpURLConnection urlConnection = (HttpURLConnection) url .openConnection(); BufferedReader in = new BufferedReader(new InputStreamReader( urlConnection.getInputStream())); inputLine = in.readLine().toString(); } catch (Exception e) { e.printStackTrace(); } return inputLine; } }

    复制代码

    AlipayService.java

    复制代码
    package com.test.util.alipay;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class AlipayService {
        /**
         * 功能:构造表单提交HTML
         * @param partner 合作身份者ID
         * @param seller_email 签约支付宝账号或卖家支付宝帐户
         * @param return_url 付完款后跳转的页面 要用 以http开头格式的完整路径,不同意加?

    id=123这类自己定义參数 * @param notify_url 交易过程中server通知的页面 要用 以http开格式的完整路径,不同意加?

    id=123这类自己定义參数 * @param show_url 站点商品的展示地址,不同意加?

    id=123这类自己定义參数 * @param out_trade_no 请与贵站点订单系统中的唯一订单号匹配 * @param subject 订单名称,显示在支付宝收银台里的“商品名称”里,显示在支付宝的交易管理的“商品名称”的列表里。

    * @param body 订单描写叙述、订单具体、订单备注,显示在支付宝收银台里的“商品描写叙述”里 * @param total_fee 订单总金额,显示在支付宝收银台里的“应付总额”里 * @param paymethod 默认支付方式,四个值可选:bankPay(网银); cartoon(卡通); directPay(剩余金额); CASH(网点支付) * @param defaultbank 默认网银代号,代号列表见club.alipay.com/read.php?tid=8681379 * @param encrypt_key 防钓鱼时间戳 * @param exter_invoke_ip 买家本地电脑的IP地址 * @param extra_common_param 自己定义參数,可存放不论什么内容(除等特殊字符外),不会显示在页面上 * @param buyer_email 默认买家支付宝账号 * @param royalty_type 提成类型。该值为固定值:10。不须要改动 * @param royalty_parameters 提成信息集。与须要结合商户站点自身情况动态获取每笔交易的各分润收款账号、各分润金额、各分润说明。最多仅仅能设置10条 * @param input_charset 字符编码格式 眼下支持 GBK 或 utf-8 * @param key 安全校验码 * @param sign_type 签名方式 不需改动 * @param key 安全校验码 * @return 表单提交HTML文本 */ public static String BuildForm(String partner, String seller_email, String return_url, String notify_url, String show_url, String out_trade_no, String subject, String body, String total_fee, String paymethod, String defaultbank, String anti_phishing_key, String exter_invoke_ip, String extra_common_param, String buyer_email, String royalty_type, String royalty_parameters, String input_charset, String key, String sign_type, String it_b_pay){ Map sPara = new HashMap(); sPara.put("service","create_direct_pay_by_user"); sPara.put("payment_type","1"); sPara.put("partner", partner); sPara.put("seller_email", seller_email); sPara.put("return_url", return_url); sPara.put("notify_url", notify_url); sPara.put("_input_charset", input_charset); sPara.put("show_url", show_url); sPara.put("out_trade_no", out_trade_no); sPara.put("subject", subject); sPara.put("body", body); sPara.put("total_fee", total_fee); sPara.put("paymethod", paymethod); sPara.put("defaultbank", defaultbank); sPara.put("anti_phishing_key", anti_phishing_key); sPara.put("exter_invoke_ip", exter_invoke_ip); sPara.put("extra_common_param", extra_common_param); sPara.put("buyer_email", buyer_email); sPara.put("royalty_type", royalty_type); sPara.put("royalty_parameters", royalty_parameters); sPara.put("it_b_pay", it_b_pay); Map sParaNew = AlipayFunction.ParaFilter(sPara); //除去数组中的空值和签名參数 String mysign = AlipayFunction.BuildMysign(sParaNew, key);//生成签名结果 StringBuffer sbHtml = new StringBuffer(); List keys = new ArrayList(sParaNew.keySet()); String gateway = "https://www.alipay.com/cooperate/gateway.do?

    "; //GET方式传递 //sbHtml.append("<form id="alipaysubmit" name="alipaysubmit" action="" + gateway + "_input_charset=" + input_charset + "" method="get">"); //POST方式传递(GET与POST二必选一) sbHtml.append("<form id="alipaysubmit" name="alipaysubmit" action="" + gateway + "_input_charset=" + input_charset + "" method="post">"); for (int i = 0; i < keys.size(); i++) { String name = (String) keys.get(i); String value = (String) sParaNew.get(name); sbHtml.append("<input type="hidden" name="" + name + "" value="" + value + ""/>"); } sbHtml.append("<input type="hidden" name="sign" value="" + mysign + ""/>"); sbHtml.append("<input type="hidden" name="sign_type" value="" + sign_type + ""/>"); //submitbutton控件请不要含有name属性 sbHtml.append("<input type="submit" value="支付宝确认付款"></form>"); sbHtml.append("<script>document.forms['alipaysubmit'].submit();</script>"); return sbHtml.toString(); } }

    复制代码

    Md5Encrypt.java

    复制代码
    package com.test.util.alipay;
    
    import java.io.UnsupportedEncodingException;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    
    import com.test.constants.AlipayConfig;
    
    /**
    * 功能:支付宝MD5加密处理核心文件。不须要改动
    * 版本号:3.1
    * 改动日期:2010-11-01
    * 说明:
    * 下面代码仅仅是为了方便商户測试而提供的例子代码,商户能够依据自己站点的须要。依照技术文档编写,并不是一定要使用该代码。

    * 该代码仅供学习和研究支付宝接口使用。仅仅是提供一个 * */ public class Md5Encrypt { /** * Used building output as Hex */ private static final char[] DIGITS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; /** * 对字符串进行MD5加密 * * @param text 明文 * @return 密文 */ public static String md5(String text) { MessageDigest msgDigest = null; try { msgDigest = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException e) { throw new IllegalStateException( "System doesn't support MD5 algorithm."); } try { msgDigest.update(text.getBytes(AlipayConfig.input_charset)); //注意改接口是依照指定编码形式签名 } catch (UnsupportedEncodingException e) { throw new IllegalStateException( "System doesn't support your EncodingException."); } byte[] bytes = msgDigest.digest(); String md5Str = new String(encodeHex(bytes)); return md5Str; } public static char[] encodeHex(byte[] data) { int l = data.length; char[] out = new char[l << 1]; // two characters form the hex value. for (int i = 0, j = 0; i < l; i++) { out[j++] = DIGITS[(0xF0 & data[i]) >>> 4]; out[j++] = DIGITS[0x0F & data[i]]; } return out; } }

    复制代码

    AlipayConfig.java这里是对账号,Key,回调连接地址等一些设置

    复制代码
    package com.test.constants;
    
    import java.util.Properties;
    
    import com.test.util.PropertiesUtil;
    
    public class AlipayConfig {
        
        private static AlipayConfig  alconfig = null;
        private AlipayConfig(){
            
        }
         public static AlipayConfig getInstance(){
            
            if(alconfig==null){
                alconfig = new AlipayConfig();
            }
            
            return alconfig;
        }
        
        // 怎样获取安全校验码和合作身份者ID
        // 1.訪问支付宝商户服务中心(b.alipay.com),然后用您的签约支付宝账号登陆.
        // 2.訪问“技术服务”→“下载技术集成文档”(https://b.alipay.com/support/helperApply.htm?action=selfIntegration// 3.在“自助集成帮助”中,点击“合作者身份(Partner ID)查询”、“安全校验码(Key)查询”
    
        // ↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
        // 合作身份者ID。以2088开头由16位纯数字组成的字符串
        public static String it_b_pay = "1h";
    
        public static String partner = "2088601003079118";
    
        public static String service = "create_direct_pay_by_user";
        // 交易安全检验码。由数字和字母组成的32位字符串    
        public static String key = "zxcdvxgksaam2zjrmv5cv0p4jqesaioh";
    
        // 签约支付宝账号或卖家收款支付宝帐户
        public static String seller_email = "test@yahoo.com.cn";
        // 读配置文件
    
        // notify_url 交易过程中server通知的页面 要用 http://格式的完整路径,不同意加?id=123这类自己定义參数
         public static String notify_url ="http:www.xxx.com/projectName/alipayTrade.action";
    
        // 付完款后跳转的页面 要用 http://格式的完整路径,不同意加?id=123这类自己定义參数
        // return_url的域名不能写成http://localhost/js_jsp_utf8/return_url.jsp,否则会导致return_url运行无效
        //public static String return_url = "http:www.xxx.com/projectName/alipayTrade.action";
    
        // 站点商品的展示地址,不同意加?id=123这类自己定义參数
        public static String show_url = "http://www.alipay.com";
    
        // 收款方名称。如:公司名称、站点名称、收款人姓名等
        public static String mainname = "收款方名称";
        // ↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
        // 字符编码格式 眼下支持 gbk 或 utf-8
        public static String input_charset = "UTF-8";
    
        // 签名方式 不需改动
        public static String sign_type = "MD5";
    
        // 訪问模式,依据自己的server是否支持ssl訪问,若支持请选择https;若不支持请选择http
        public static String transport = "http";
    }
    复制代码

    ===============================================================================================================

    以下是一个简单的应用流程:
    从JSP调用的就不说了。由于这也就仅仅是传给后台你要买的东西是什么,价格多少等一些參数。


    这里介绍一下后台处理的:

    PaymentAction.java

    复制代码
    /**
         * 获取支付宝交易订单号
         * @return
         */
        public synchronized static String getOrderNum(){
            Date date=new Date();
            DateFormat df=new SimpleDateFormat("yyyyMMddHHmmssSSS");
            return df.format(date);
        }
    
        protected HttpServletRequest getRequest() {
            return ServletActionContext.getRequest();
        }
    
    //支付宝交易订单号
    String orderNum = getOrderNum();
    
    // 此次交易的总金额
    getRequest().setAttribute("totalMoney","0.01");
    //此次交易的订单号
    getRequest().setAttribute("out_trade_no", orderNum);
    //商品名称描写叙述
    getRequest().setAttribute("subject", "商品名称");
    
    
    //这里省略了将此次订单信息存到数据库的流程
    复制代码

    alipay.jsp

    复制代码
    <%@page import="com.test.constants.AlipayConfig"%>
    <%@page import="com.test.util.alipay.UtilDate"%>
    <%@page import="com.test.util.alipay.AlipayService"%>
    <%
        /*
        功能:设置商品有关信息(入口页)
         *具体:该页面是接口入口页面,生成支付时的URL
         *版本号:3.1
         *日期:2010-11-01
         *说明:
         *下面代码仅仅是为了方便商户測试而提供的例子代码。商户能够依据自己站点的须要。依照技术文档编写,并不是一定要使用该代码。
         *该代码仅供学习和研究支付宝接口使用,仅仅是提供一个參考。
         *************************注意*****************
        假设您在接口集成过程中遇到问题,
        您能够到商户服务中心(https://b.alipay.com/support/helperApply.htm?

    action=consultationApply),提交申请集成协助。我们会有专业的技术project师主动联系您协助解决, 您也能够到支付宝论坛(http://club.alipay.com/read-htm-tid-8681712.html)寻找相关解决方式 要传递的參数要么不同意为空,要么就不要出如今数组与隐藏控件或URL链接里。 */ %> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>test</title> <link rel="SHORTCUT ICON" href="favicon.ico"> <meta name="keywords" content="" /> <meta name="description" content="" /> <style type="text/css"> .font_content{ font-family:"宋体"; font-size:14px; color:#FF6600; } .font_title{ font-family:"宋体"; font-size:16px; color:#FF0000; font-weight:bold; } table{ border: 1px solid #CCCCCC; } </style> <script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-25469955-1']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> </head> <% //request.setCharacterEncoding("UTF-8"); //AlipyConfig.java中配置信息(不能够改动) String input_charset = AlipayConfig.getInstance().input_charset; String sign_type = AlipayConfig.getInstance().sign_type; String seller_email = AlipayConfig.getInstance().seller_email; String partner = AlipayConfig.getInstance().partner; String key = AlipayConfig.getInstance().key; String show_url = AlipayConfig.getInstance().show_url; String notify_url = AlipayConfig.getInstance().notify_url; String return_url = AlipayConfig.getInstance().return_url; String it_b_pay = AlipayConfig.getInstance().it_b_pay; //下面參数是须要通过下单时的订单数据传入进来获得 //必填參数 String out_trade_no = (String)request.getAttribute("out_trade_no");//请与贵站点订单系统中的唯一订单号匹配 //订单名称。显示在支付宝收银台里的“商品名称”里。显示在支付宝的交易管理的“商品名称”的列表里。 String subject = (String)request.getAttribute("subject"); //订单描写叙述、订单具体、订单备注,显示在支付宝收银台里的“商品描写叙述”里 String body = (String)request.getAttribute("body"); //订单总金额,显示在支付宝收银台里的“应付总额”里 String total_fee = (String)request.getAttribute("totalMoney"); //扩展功能參数——默认支付方式 // String pay_mode = request.getParameter("pay_bank"); String paymethod = ""; //默认支付方式,四个值可选:bankPay(网银); cartoon(卡通); directPay(剩余金额); CASH(网点支付) String defaultbank = ""; //默认网银代号,代号列表见http://club.alipay.com/read.php?tid=8681379 /*if(pay_mode.equals("directPay")){ paymethod = "directPay"; } else{ paymethod = "bankPay"; defaultbank = pay_mode; }*/ //扩展功能參数——防钓鱼 //请谨慎选择是否开启防钓鱼功能 //exter_invoke_ip、anti_phishing_key一旦被设置过,那么它们就会成为必填參数 //开启防钓鱼功能后,server、本机电脑必须支持远程XML解析,请配置好该环境。 //建议使用POST方式请求数据 String anti_phishing_key = ""; //防钓鱼时间戳 String exter_invoke_ip= ""; //获取client的IP地址,建议:编写获取clientIP地址的程序 //如: //anti_phishing_key = AlipayFunction.query_timestamp(partner); //获取防钓鱼时间戳函数 //exter_invoke_ip = "202.1.1.1"; //扩展功能參数——其它 String extra_common_param = ""; //自己定义參数。可存放不论什么内容(除=、&等特殊字符外),不会显示在页面上 String buyer_email = "137672927"; //默认买家支付宝账号 String extend_param = ""; //扩展功能參数——分润(若要使用,请依照凝视要求的格式赋值) String royalty_type = ""; //提成类型。该值为固定值:10,不须要改动 String royalty_parameters =""; //提成信息集,与须要结合商户站点自身情况动态获取每笔交易的各分润收款账号、各分润金额、各分润说明。最多仅仅能设置10条 //各分润金额的总和须小于等于total_fee //提成信息集格式为:收款方Email_1^金额1^备注1|收款方Email_2^金额2^备注2 //如: //royalty_type = "10" //royalty_parameters = "111@126.com^0.01^分润备注一|222@126.com^0.01^分润备注二" //之前设置的1h将返回 //错误描写叙述: 抱歉。商户没有开通自己定义超时权限。请联系您的商家。

    //错误代码: SELF_TIMEOUT_NOT_SUPPORT it_b_pay=""; //构造函数。生成请求URL String sHtmlText = AlipayService.BuildForm(partner,seller_email,return_url,notify_url,show_url,out_trade_no, subject,body,total_fee,paymethod,defaultbank,anti_phishing_key,exter_invoke_ip,extra_common_param,buyer_email, royalty_type,royalty_parameters,input_charset,key,sign_type,it_b_pay); %> <body> <table align="center" width="350" cellpadding="5" cellspacing="0"> <tr> <td align="center" class="font_title" colspan="2">订单确认</td> </tr> <tr> <td class="font_content" align="right">订单号:</td> <td class="font_content" align="left"><%=out_trade_no%></td> </tr> <tr> <td class="font_content" align="right">付款总金额:</td> <td class="font_content" align="left"><%=total_fee%></td> </tr> <tr> <td align="center" colspan="2"><%=sHtmlText%></td> </tr> </table> </body> </html>

    复制代码

    支付宝回调的接口:AlipayNotify.java

    复制代码
    package com.test.action.payment;
    
    import java.util.Date;
    import java.util.List;
    
    import com.test.action.base.BaseAction;
    import com.test.dao.model.paymentcenter.OrderForm;
    import com.test.dao.model.paymentcenter.OrderList;
    import com.test.dao.model.paymentcenter.UserPurview;
    
    public class AlipayNotify extends BaseAction {
    
        private static final long serialVersionUID = 1L;
        private String buyer_email;
        private long buyer_id;
        private String exterface;
        private String is_success;
        private String notify_id;
        private String notify_time;
        private String notify_type;
        private String out_trade_no;
        private String payment_type;
        private String seller_email;
        private long seller_id;
        private String subject;
        private float total_fee;
        private String trade_no;
        private String trade_status;
        private String sign;
        private String sign_type;
        private OrderForm of;
    
        //……这里省去了get和set方法
    
        // 处理支付宝传过来的參数信息
        public String alipayTrade() throws Exception {
    
            if (this.is_success.equalsIgnoreCase("T")
                    && "TRADE_SUCCESS".equalsIgnoreCase(this.trade_status)) {
    
                of = (OrderForm) orderFormService
                        .findOrderFormsByOut_trade_no(this.out_trade_no);
    
                if (of != null) {
                    of.setTradeStatus(1);
                    of.setTradeNo(this.trade_no);
                    of.setNotifyTime(new Date());                
                    orderFormService.updateOldModel(of); // 更新
    
                    List<OrderList> orderList = orderListService
                            .findOrderFormsByOutTradeNo(this.out_trade_no);
                    for (OrderList ol : orderList) {
                        //这里省去了处理订单逻辑代码……………………
                    }
                }
                //回调成功之后,给支付宝返回一个 "success" 字符就能够了
                return SUCCESS;
    
            }
    
            return "failure";
    
        }
    }
    复制代码

    就这样。支付宝的第三方即时到账接口就算实现了。

  • 相关阅读:
    Maven Docker镜像使用技巧
    Dockerfile 最佳实践
    无状态服务
    Docker 镜像加速器
    如何设置Docker容器中Java应用的内存限制
    k8s的容器监测探针
    (部署)使用kubernetes的deployment进行RollingUpdate
    linux下brctl配置网桥
    代码高亮插件
    Docker容器
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/7325359.html
Copyright © 2020-2023  润新知