`
zzc1684
  • 浏览: 1228878 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

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

阅读更多

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

  1. package com.test.util.alipay;  
  2.   
  3.   
  4. import java.io.FileWriter;  
  5. import java.io.IOException;  
  6. import java.net.MalformedURLException;  
  7. import java.net.URL;  
  8. import java.util.ArrayList;  
  9. import java.util.Collections;  
  10. import java.util.HashMap;  
  11. import java.util.List;  
  12. import java.util.Map;  
  13.   
  14. import org.dom4j.Document;  
  15. import org.dom4j.DocumentException;  
  16. import org.dom4j.Node;  
  17. import org.dom4j.io.SAXReader;  
  18.   
  19.   
  20.   
  21.   
  22. public class AlipayFunction {  
  23.     /** 
  24.      * 功能:生成签名结果 
  25.      * @param sArray 要签名的数组 
  26.      * @param key 安全校验码 
  27.      * @return 签名结果字符串 
  28.      */  
  29.     public static String BuildMysign(Map sArray, String key) {  
  30.         String prestr = CreateLinkString(sArray);  //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串  
  31.         prestr = prestr + key;                     //把拼接后的字符串再与安全校验码直接连接起来  
  32.         String mysign = Md5Encrypt.md5(prestr);  
  33.         return mysign;  
  34.     }  
  35.       
  36.     /** 
  37.      * 功能:除去数组中的空值和签名参数 
  38.      * @param sArray 签名参数组 
  39.      * @return 去掉空值与签名参数后的新签名参数组 
  40.      */  
  41.     public static Map ParaFilter(Map sArray){  
  42.         List keys = new ArrayList(sArray.keySet());  
  43.         Map sArrayNew = new HashMap();  
  44.           
  45.         for(int i = 0; i < keys.size(); i++){  
  46.             String key = (String) keys.get(i);  
  47.             String value = (String) sArray.get(key);  
  48.               
  49.             if( value == null || value.equals("") ||  
  50.                     key.equalsIgnoreCase("sign") || key.equalsIgnoreCase("sign_type")){  
  51.                 continue;  
  52.             }  
  53.               
  54.             sArrayNew.put(key, value);  
  55.         }  
  56.           
  57.         return sArrayNew;  
  58.     }  
  59.       
  60.     /** 
  61.      * 功能:把数组所有元素排序,并按照“参数=参数值”的模式用“&”字符拼接成字符串 
  62.      * @param params 需要排序并参与字符拼接的参数组 
  63.      * @return 拼接后字符串 
  64.      */  
  65.     public static String CreateLinkString(Map params){  
  66.         List keys = new ArrayList(params.keySet());  
  67.         Collections.sort(keys);  
  68.   
  69.         String prestr = "";  
  70.   
  71.         for (int i = 0; i < keys.size(); i++) {  
  72.             String key = (String) keys.get(i);  
  73.             String value = (String) params.get(key);  
  74.   
  75.             if (i == keys.size() - 1) {//拼接时,不包括最后一个&字符  
  76.                 prestr = prestr + key + "=" + value;  
  77.             } else {  
  78.                 prestr = prestr + key + "=" + value + "&";  
  79.             }  
  80.         }  
  81.   
  82.         return prestr;  
  83.     }  
  84.       
  85.     /** 
  86.      * 功能:写日志,方便测试(看网站需求,也可以改成把记录存入数据库) 
  87.      * @param sWord 要写入日志里的文本内容 
  88.      */  
  89.     public static void LogResult(String sWord){  
  90.         // 该文件存在于和应用服务器 启动文件同一目录下,文件名是alipay log加服务器时间  
  91.         try {  
  92.             FileWriter writer = new FileWriter("D:\\alipay_log" + System.currentTimeMillis() + ".txt");  
  93.             writer.write(sWord);  
  94.             writer.close();  
  95.         } catch (Exception e) {  
  96.             e.printStackTrace();  
  97.         }  
  98.     }  
  99.       
  100.     /** 
  101.      * 功能:用于防钓鱼,调用接口query_timestamp来获取时间戳的处理函数 
  102.      * 注意:远程解析XML出错,与服务器是否支持SSL等配置有关 
  103.      * @param partner 合作身份者ID 
  104.      * @return 时间戳字符串 
  105.      * @throws IOException 
  106.      * @throws DocumentException 
  107.      * @throws MalformedURLException 
  108.      */  
  109.       
  110.     public static String query_timestamp(String partner)  
  111.             throws MalformedURLException, DocumentException, IOException {  
  112.         String strUrl = "https://mapi.alipay.com/gateway.do?service=query_timestamp&partner="+partner;  
  113.         StringBuffer buf1 = new StringBuffer();  
  114.         SAXReader reader = new SAXReader();  
  115.         Document doc = reader.read(new URL(strUrl).openStream());  
  116.           
  117.         List<Node> nodeList = doc.selectNodes("//alipay/*");  
  118.           
  119.         for (Node node : nodeList) {  
  120.             // 截取部分不需要解析的信息  
  121.             if (node.getName().equals("is_success")  
  122.                     && node.getText().equals("T")) {  
  123.                 // 判断是否有成功标示  
  124.                 List<Node> nodeList1 = doc.selectNodes("//response/timestamp/*");  
  125.                 for (Node node1 : nodeList1) {  
  126.                     buf1.append(node1.getText());  
  127.                 }  
  128.             }  
  129.         }  
  130.           
  131.         return buf1.toString();  
  132.     }  
  133. }  





======================================================================================================
AlipayNotify.java

  1. package com.test.util.alipay;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.InputStreamReader;  
  5. import java.net.HttpURLConnection;  
  6. import java.net.URL;  
  7. import java.util.Map;  
  8.   
  9. import com.test.constants.AlipayConfig;  
  10.   
  11.   
  12. public class AlipayNotify {  
  13.     /** 
  14.      * *功能:根据反馈回来的信息,生成签名结果 
  15.      * @param Params 通知返回来的参数数组 
  16.      * @param key 安全校验码 
  17.      * @return 生成的签名结果 
  18.      */  
  19.     public static String GetMysign(Map Params, String key){  
  20.         Map sParaNew = AlipayFunction.ParaFilter(Params);//过滤空值、sign与sign_type参数  
  21.         String mysign = AlipayFunction.BuildMysign(sParaNew, key);//获得签名结果  
  22.           
  23.         return mysign;  
  24.     }  
  25.       
  26.     /** 
  27.     * *功能:获取远程服务器ATN结果,验证返回URL 
  28.     * @param notify_id 通知校验ID 
  29.     * @return 服务器ATN结果 
  30.     * 验证结果集: 
  31.     * invalid命令参数不对 出现这个错误,请检测返回处理中partner和key是否为空 
  32.     * true 返回正确信息 
  33.     * false 请检查防火墙或者是服务器阻止端口问题以及验证时间是否超过一分钟 
  34.     */  
  35.     public static String Verify(String notify_id){  
  36.         //获取远程服务器ATN结果,验证是否是支付宝服务器发来的请求  
  37.         String transport = AlipayConfig.transport;  
  38.         String partner = AlipayConfig.partner;  
  39.         String veryfy_url = "";  
  40.         if(transport.equalsIgnoreCase("https")){  
  41.             veryfy_url = "https://www.alipay.com/cooperate/gateway.do?service=notify_verify";  
  42.         } else{  
  43.             veryfy_url = "http://notify.alipay.com/trade/notify_query.do?";  
  44.         }  
  45.         veryfy_url = veryfy_url + "&partner=" + partner + "¬ify_id=" + notify_id;  
  46.           
  47.         String responseTxt = CheckUrl(veryfy_url);  
  48.           
  49.         return responseTxt;  
  50.     }  
  51.       
  52.     /** 
  53.     * *功能:获取远程服务器ATN结果 
  54.     * @param urlvalue 指定URL路径地址 
  55.     * @return 服务器ATN结果 
  56.     * 验证结果集: 
  57.     * invalid命令参数不对 出现这个错误,请检测返回处理中partner和key是否为空 
  58.     * true 返回正确信息 
  59.     * false 请检查防火墙或者是服务器阻止端口问题以及验证时间是否超过一分钟 
  60.     */  
  61.     public static String CheckUrl(String urlvalue){  
  62.         String inputLine = "";  
  63.   
  64.         try {  
  65.             URL url = new URL(urlvalue);  
  66.             HttpURLConnection urlConnection = (HttpURLConnection) url  
  67.                     .openConnection();  
  68.             BufferedReader in = new BufferedReader(new InputStreamReader(  
  69.                     urlConnection.getInputStream()));  
  70.             inputLine = in.readLine().toString();  
  71.         } catch (Exception e) {  
  72.             e.printStackTrace();  
  73.         }  
  74.   
  75.         return inputLine;  
  76.     }  
  77. }  



======================================================================================================
AlipayService.java

  1. package com.test.util.alipay;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7.   
  8.   
  9. public class AlipayService {  
  10.     /** 
  11.      * 功能:构造表单提交HTML 
  12.      * @param partner 合作身份者ID 
  13.      * @param seller_email 签约支付宝账号或卖家支付宝帐户 
  14.      * @param return_url 付完款后跳转的页面 要用 以http开头格式的完整路径,不允许加?id=123这类自定义参数 
  15.      * @param notify_url 交易过程中服务器通知的页面 要用 以http开格式的完整路径,不允许加?id=123这类自定义参数 
  16.      * @param show_url 网站商品的展示地址,不允许加?id=123这类自定义参数 
  17.      * @param out_trade_no 请与贵网站订单系统中的唯一订单号匹配 
  18.      * @param subject 订单名称,显示在支付宝收银台里的“商品名称”里,显示在支付宝的交易管理的“商品名称”的列表里。 
  19.      * @param body 订单描述、订单详细、订单备注,显示在支付宝收银台里的“商品描述”里 
  20.      * @param total_fee 订单总金额,显示在支付宝收银台里的“应付总额”里 
  21.      * @param paymethod 默认支付方式,四个值可选:bankPay(网银); cartoon(卡通); directPay(余额);  CASH(网点支付) 
  22.      * @param defaultbank 默认网银代号,代号列表见club.alipay.com/read.php?tid=8681379 
  23.      * @param encrypt_key 防钓鱼时间戳 
  24.      * @param exter_invoke_ip 买家本地电脑的IP地址 
  25.      * @param extra_common_param 自定义参数,可存放任何内容(除等特殊字符外),不会显示在页面上 
  26.      * @param buyer_email 默认买家支付宝账号 
  27.      * @param royalty_type 提成类型,该值为固定值:10,不需要修改 
  28.      * @param royalty_parameters 提成信息集,与需要结合商户网站自身情况动态获取每笔交易的各分润收款账号、各分润金额、各分润说明。最多只能设置10条 
  29.      * @param input_charset 字符编码格式 目前支持 GBK 或 utf-8 
  30.      * @param key 安全校验码 
  31.      * @param sign_type 签名方式 不需修改 
  32.      * @param key 安全校验码 
  33.      * @return 表单提交HTML文本 
  34.      */  
  35.     public static String BuildForm(String partner,  
  36.             String seller_email,  
  37.             String return_url,  
  38.             String notify_url,  
  39.             String show_url,  
  40.             String out_trade_no,  
  41.             String subject,  
  42.             String body,  
  43.             String total_fee,  
  44.             String paymethod,  
  45.             String defaultbank,  
  46.             String anti_phishing_key,  
  47.             String exter_invoke_ip,  
  48.             String extra_common_param,  
  49.             String buyer_email,  
  50.             String royalty_type,  
  51.             String royalty_parameters,  
  52.             String input_charset,  
  53.             String key,  
  54.             String sign_type,  
  55.             String it_b_pay){  
  56.         Map sPara = new HashMap();  
  57.         sPara.put("service","create_direct_pay_by_user");  
  58.         sPara.put("payment_type","1");  
  59.         sPara.put("partner", partner);  
  60.         sPara.put("seller_email", seller_email);  
  61.         sPara.put("return_url", return_url);  
  62.         sPara.put("notify_url", notify_url);  
  63.         sPara.put("_input_charset", input_charset);  
  64.         sPara.put("show_url", show_url);  
  65.         sPara.put("out_trade_no", out_trade_no);  
  66.         sPara.put("subject", subject);  
  67.         sPara.put("body", body);  
  68.         sPara.put("total_fee", total_fee);  
  69.         sPara.put("paymethod", paymethod);  
  70.         sPara.put("defaultbank", defaultbank);  
  71.         sPara.put("anti_phishing_key", anti_phishing_key);  
  72.         sPara.put("exter_invoke_ip", exter_invoke_ip);  
  73.         sPara.put("extra_common_param", extra_common_param);  
  74.         sPara.put("buyer_email", buyer_email);  
  75.         sPara.put("royalty_type", royalty_type);  
  76.         sPara.put("royalty_parameters", royalty_parameters);  
  77.         sPara.put("it_b_pay", it_b_pay);  
  78.           
  79.         Map sParaNew = AlipayFunction.ParaFilter(sPara); //除去数组中的空值和签名参数  
  80.         String mysign = AlipayFunction.BuildMysign(sParaNew, key);//生成签名结果  
  81.           
  82.         StringBuffer sbHtml = new StringBuffer();  
  83.         List keys = new ArrayList(sParaNew.keySet());  
  84.         String gateway = "https://www.alipay.com/cooperate/gateway.do?";  
  85.           
  86.         //GET方式传递  
  87.         //sbHtml.append("<form id=\"alipaysubmit\" name=\"alipaysubmit\" action=\"" + gateway + "_input_charset=" + input_charset + "\" method=\"get\">");  
  88.         //POST方式传递(GET与POST二必选一)  
  89.         sbHtml.append("<form id=\"alipaysubmit\" name=\"alipaysubmit\" action=\"" + gateway + "_input_charset=" + input_charset + "\" method=\"post\">");  
  90.           
  91.         for (int i = 0; i < keys.size(); i++) {  
  92.             String name = (String) keys.get(i);  
  93.             String value = (String) sParaNew.get(name);  
  94.               
  95.             sbHtml.append("<input type=\"hidden\" name=\"" + name + "\" value=\"" + value + "\"/>");  
  96.         }  
  97.         sbHtml.append("<input type=\"hidden\" name=\"sign\" value=\"" + mysign + "\"/>");  
  98.         sbHtml.append("<input type=\"hidden\" name=\"sign_type\" value=\"" + sign_type + "\"/>");  
  99.           
  100.         //submit按钮控件请不要含有name属性  
  101.         sbHtml.append("<input type=\"submit\" value=\"支付宝确认付款\"></form>");  
  102.           
  103.         sbHtml.append("<script>document.forms['alipaysubmit'].submit();</script>");  
  104.           
  105.         return sbHtml.toString();  
  106.     }  
  107. }  



======================================================================================================
Md5Encrypt.java

  1. package com.test.util.alipay;  
  2.   
  3. import java.io.UnsupportedEncodingException;  
  4. import java.security.MessageDigest;  
  5. import java.security.NoSuchAlgorithmException;  
  6.   
  7. import com.test.constants.AlipayConfig;  
  8.   
  9. /** 
  10. * 功能:支付宝MD5加密处理核心文件,不需要修改 
  11. * 版本:3.1 
  12. * 修改日期:2010-11-01 
  13. * 说明: 
  14. * 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。 
  15. * 该代码仅供学习和研究支付宝接口使用,只是提供一个 
  16. * */  
  17.   
  18. public class Md5Encrypt {  
  19.     /** 
  20.      * Used building output as Hex 
  21.      */  
  22.     private static final char[] DIGITS = { '0''1''2''3''4''5''6',  
  23.             '7''8''9''a''b''c''d''e''f' };  
  24.   
  25.     /** 
  26.      * 对字符串进行MD5加密 
  27.      * 
  28.      * @param text 
  29.      *            明文 
  30.      * 
  31.      * @return 密文 
  32.      */  
  33.     public static String md5(String text) {  
  34.         MessageDigest msgDigest = null;  
  35.   
  36.         try {  
  37.             msgDigest = MessageDigest.getInstance("MD5");  
  38.         } catch (NoSuchAlgorithmException e) {  
  39.             throw new IllegalStateException(  
  40.                     "System doesn't support MD5 algorithm.");  
  41.         }  
  42.   
  43.         try {  
  44.             msgDigest.update(text.getBytes(AlipayConfig.input_charset));    //注意改接口是按照指定编码形式签名  
  45.    
  46.         } catch (UnsupportedEncodingException e) {  
  47.   
  48.             throw new IllegalStateException(  
  49.                     "System doesn't support your  EncodingException.");  
  50.   
  51.         }  
  52.   
  53.         byte[] bytes = msgDigest.digest();  
  54.   
  55.         String md5Str = new String(encodeHex(bytes));  
  56.   
  57.         return md5Str;  
  58.     }  
  59.   
  60.     public static char[] encodeHex(byte[] data) {  
  61.   
  62.         int l = data.length;  
  63.   
  64.         char[] out = new char[l << 1];  
  65.   
  66.         // two characters form the hex value.  
  67.         for (int i = 0, j = 0; i < l; i++) {  
  68.             out[j++] = DIGITS[(0xF0 & data[i]) >>> 4];  
  69.             out[j++] = DIGITS[0x0F & data[i]];  
  70.         }  
  71.   
  72.         return out;  
  73.     }  
  74.   
  75. }  




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

  1. package com.test.constants;  
  2.   
  3. import java.util.Properties;  
  4.   
  5. import com.test.util.PropertiesUtil;  
  6.   
  7. public class AlipayConfig {  
  8.       
  9.     private static AlipayConfig  alconfig = null;  
  10.     private AlipayConfig(){  
  11.           
  12.     }  
  13.      public static AlipayConfig getInstance(){  
  14.           
  15.         if(alconfig==null){  
  16.             alconfig = new AlipayConfig();  
  17.         }  
  18.           
  19.         return alconfig;  
  20.     }  
  21.       
  22.     // 如何获取安全校验码和合作身份者ID  
  23.     // 1.访问支付宝商户服务中心(b.alipay.com),然后用您的签约支付宝账号登陆.  
  24.     // 2.访问“技术服务”→“下载技术集成文档”(https://b.alipay.com/support/helperApply.htm?action=selfIntegration)  
  25.     // 3.在“自助集成帮助”中,点击“合作者身份(Partner ID)查询”、“安全校验码(Key)查询”  
  26.   
  27.     // ↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓  
  28.     // 合作身份者ID,以2088开头由16位纯数字组成的字符串  
  29.     public static String it_b_pay = "1h";  
  30.   
  31.     public static String partner = "2088601003079118";  
  32.   
  33.     public static String service = "create_direct_pay_by_user";  
  34.     // 交易安全检验码,由数字和字母组成的32位字符串      
  35.     public static String key = "zxcdvxgksaam2zjrmv5cv0p4jqesaioh";  
  36.   
  37.     // 签约支付宝账号或卖家收款支付宝帐户  
  38.     public static String seller_email = "test@yahoo.com.cn";  
  39.     // 读配置文件  
  40.   
  41.     // notify_url 交易过程中服务器通知的页面 要用 http://格式的完整路径,不允许加?id=123这类自定义参数  
  42.      public static String notify_url ="http:www.xxx.com/projectName/alipayTrade.action";  
  43.   
  44.   
  45.     // 付完款后跳转的页面 要用 http://格式的完整路径,不允许加?id=123这类自定义参数  
  46.     // return_url的域名不能写成http://localhost/js_jsp_utf8/return_url.jsp,否则会导致return_url执行无效  
  47.     //public static String return_url = "http:www.xxx.com/projectName/alipayTrade.action";  
  48.   
  49.     // 网站商品的展示地址,不允许加?id=123这类自定义参数  
  50.     public static String show_url = "http://www.alipay.com";  
  51.   
  52.     // 收款方名称,如:公司名称、网站名称、收款人姓名等  
  53.     public static String mainname = "收款方名称";  
  54.     // ↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑  
  55.   
  56.     // 字符编码格式 目前支持 gbk 或 utf-8  
  57.     public static String input_charset = "UTF-8";  
  58.   
  59.     // 签名方式 不需修改  
  60.     public static String sign_type = "MD5";  
  61.   
  62.     // 访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http  
  63.     public static String transport = "http";  
  64. }  




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

下面是一个简单的应用流程:
从JSP调用的就不说了,因为这也就只是传给后台你要买的东西是什么,价格多少等一些参数。
这里介绍一下后台处理的:

PaymentAction.java

   

  1. /** 
  2.      * 获取支付宝交易订单号 
  3.      * @return 
  4.      */  
  5.     public synchronized static String getOrderNum(){  
  6.         Date date=new Date();  
  7.         DateFormat df=new SimpleDateFormat("yyyyMMddHHmmssSSS");  
  8.         return df.format(date);  
  9.     }  
  10.   
  11.   
  12.     protected HttpServletRequest getRequest() {  
  13.         return ServletActionContext.getRequest();  
  14.     }  
  15.   
  16.   
  17.   
  18. //支付宝交易订单号  
  19. String orderNum = getOrderNum();  
  20.   
  21. // 此次交易的总金额  
  22. getRequest().setAttribute("totalMoney","0.01");  
  23. //此次交易的订单号  
  24. getRequest().setAttribute("out_trade_no", orderNum);  
  25. //商品名称描述  
  26. getRequest().setAttribute("subject""商品名称");  
  27.   
  28.   
  29. //这里省略了将此次订单信息存到数据库的流程  




===============================================================================================================
alipay.jsp

  1. <%@page import="com.test.constants.AlipayConfig"%>  
  2. <%@page import="com.test.util.alipay.UtilDate"%>  
  3. <%@page import="com.test.util.alipay.AlipayService"%>  
  4. <%  
  5.     /*  
  6.     功能:设置商品有关信息(入口页)  
  7.      *详细:该页面是接口入口页面,生成支付时的URL  
  8.      *版本:3.1  
  9.      *日期:2010-11-01  
  10.      *说明:  
  11.      *以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。  
  12.      *该代码仅供学习和研究支付宝接口使用,只是提供一个参考。  
  13.       
  14.      *************************注意*****************  
  15.     如果您在接口集成过程中遇到问题,  
  16.     您可以到商户服务中心(https://b.alipay.com/support/helperApply.htm?action=consultationApply),提交申请集成协助,我们会有专业的技术工程师主动联系您协助解决,  
  17.     您也可以到支付宝论坛(http://club.alipay.com/read-htm-tid-8681712.html)寻找相关解决方案  
  18.     要传递的参数要么不允许为空,要么就不要出现在数组与隐藏控件或URL链接里。  
  19.      **********************************************  
  20.      */  
  21. %>  
  22. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  23.     pageEncoding="UTF-8"%>  
  24. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  25. <html>  
  26.     <head>  
  27.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  28.         <title>test</title>  
  29.         <link rel="SHORTCUT ICON" href="favicon.ico">  
  30. <meta name="keywords" content="" />  
  31. <meta name="description" content="" />  
  32. <style type="text/css">  
  33. .font_content{  
  34.     font-family:"宋体";  
  35.     font-size:14px;  
  36.     color:#FF6600;  
  37. }  
  38. .font_title{  
  39.     font-family:"宋体";  
  40.     font-size:16px;  
  41.     color:#FF0000;  
  42.     font-weight:bold;  
  43. }  
  44. table{  
  45.     border: 1px solid #CCCCCC;  
  46. }  
  47.         </style>  
  48.         <script type="text/javascript">  
  49.           var _gaq = _gaq || [];  
  50.           _gaq.push(['_setAccount', 'UA-25469955-1']);  
  51.           _gaq.push(['_trackPageview']);  
  52.           
  53.           
  54.           (function() {  
  55.             var ga = document.createElement('script'); ga.type = 'text/javascript'ga.async = true;  
  56.             ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';  
  57.             var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);  
  58.           })();  
  59.     </script>  
  60.     </head>  
  61.     <%  
  62.             //request.setCharacterEncoding("UTF-8");  
  63.             //AlipyConfig.java中配置信息(不可以修改)  
  64.             String input_charset = AlipayConfig.getInstance().input_charset;  
  65.             String sign_type = AlipayConfig.getInstance().sign_type;  
  66.             String seller_email = AlipayConfig.getInstance().seller_email;  
  67.             String partner = AlipayConfig.getInstance().partner;  
  68.             String key = AlipayConfig.getInstance().key;  
  69.   
  70.             String show_url = AlipayConfig.getInstance().show_url;  
  71.             String notify_url = AlipayConfig.getInstance().notify_url;  
  72.             String return_url = AlipayConfig.getInstance().return_url;  
  73.             String it_b_pay = AlipayConfig.getInstance().it_b_pay;  
  74.               
  75.             ///////////////////////////////////////////////////////////////////////////////////  
  76.               
  77.             //以下参数是需要通过下单时的订单数据传入进来获得  
  78.             //必填参数  
  79.             String out_trade_no = (String)request.getAttribute("out_trade_no");//请与贵网站订单系统中的唯一订单号匹配  
  80.             //订单名称,显示在支付宝收银台里的“商品名称”里,显示在支付宝的交易管理的“商品名称”的列表里。  
  81.             String subject = (String)request.getAttribute("subject");  
  82.             //订单描述、订单详细、订单备注,显示在支付宝收银台里的“商品描述”里  
  83.             String body = (String)request.getAttribute("body");  
  84.             //订单总金额,显示在支付宝收银台里的“应付总额”里  
  85.             String total_fee = (String)request.getAttribute("totalMoney");  
  86.               
  87.             //扩展功能参数——默认支付方式  
  88.            // String pay_mode = request.getParameter("pay_bank");  
  89.             String paymethod = "";        //默认支付方式,四个值可选:bankPay(网银); cartoon(卡通); directPay(余额); CASH(网点支付)  
  90.             String defaultbank = "";    //默认网银代号,代号列表见http://club.alipay.com/read.php?tid=8681379  
  91.             /*if(pay_mode.equals("directPay")){  
  92.                 paymethod = "directPay";  
  93.             }  
  94.             else{  
  95.                 paymethod = "bankPay";  
  96.                 defaultbank = pay_mode;  
  97.             }*/  
  98.               
  99.             //扩展功能参数——防钓鱼  
  100.             //请慎重选择是否开启防钓鱼功能  
  101.             //exter_invoke_ip、anti_phishing_key一旦被设置过,那么它们就会成为必填参数  
  102.             //开启防钓鱼功能后,服务器、本机电脑必须支持远程XML解析,请配置好该环境。  
  103.             //建议使用POST方式请求数据  
  104.             String anti_phishing_key  = "";                //防钓鱼时间戳  
  105.             String exter_invoke_ip"";                    //获取客户端的IP地址,建议:编写获取客户端IP地址的程序  
  106.             //如:  
  107.             //anti_phishing_key = AlipayFunction.query_timestamp(partner);    //获取防钓鱼时间戳函数  
  108.             //exter_invoke_ip = "202.1.1.1";  
  109.               
  110.             //扩展功能参数——其他  
  111.             String extra_common_param = "";                //自定义参数,可存放任何内容(除=、&等特殊字符外),不会显示在页面上  
  112.             String buyer_email = "137672927";                    //默认买家支付宝账号  
  113.             String extend_param = "";  
  114.               
  115.               
  116.             //扩展功能参数——分润(若要使用,请按照注释要求的格式赋值)  
  117.             String royalty_type = "";                    //提成类型,该值为固定值:10,不需要修改  
  118.             String royalty_parameters ="";  
  119.             //提成信息集,与需要结合商户网站自身情况动态获取每笔交易的各分润收款账号、各分润金额、各分润说明。最多只能设置10条  
  120.             //各分润金额的总和须小于等于total_fee  
  121.             //提成信息集格式为:收款方Email_1^金额1^备注1|收款方Email_2^金额2^备注2  
  122.             //如:  
  123.             //royalty_type = "10"  
  124.             //royalty_parameters    = "111@126.com^0.01^分润备注一|222@126.com^0.01^分润备注二"  
  125.               
  126.               
  127.             //之前设置的1h将返回  
  128.             //错误描述: 抱歉,商户没有开通自定义超时权限,请联系您的商家。  
  129.             //错误代码: SELF_TIMEOUT_NOT_SUPPORT  
  130.               
  131.             it_b_pay="";  
  132.               
  133.             //构造函数,生成请求URL  
  134.             String sHtmlText = AlipayService.BuildForm(partner,seller_email,return_url,notify_url,show_url,out_trade_no,  
  135.             subject,body,total_fee,paymethod,defaultbank,anti_phishing_key,exter_invoke_ip,extra_common_param,buyer_email,  
  136.             royalty_type,royalty_parameters,input_charset,key,sign_type,it_b_pay);  
  137.     %>  
  138.   
  139.     <body>  
  140.         <table align="center" width="350" cellpadding="5" cellspacing="0">  
  141.             <tr>  
  142.                 <td align="center" class="font_title" colspan="2">订单确认</td>  
  143.             </tr>  
  144.             <tr>  
  145.                 <td class="font_content" align="right">订单号:</td>  
  146.                 <td class="font_content" align="left"><%=out_trade_no%></td>  
  147.             </tr>  
  148.             <tr>  
  149.                 <td class="font_content" align="right">付款总金额:</td>  
  150.                 <td class="font_content" align="left"><%=total_fee%></td>  
  151.             </tr>  
  152.             <tr>  
  153.                 <td align="center" colspan="2"><%=sHtmlText%></td>  
  154.             </tr>  
  155.         </table>  
  156.     </body>  
  157. </html>  





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

  1. package com.test.action.payment;  
  2.   
  3. import java.util.Date;  
  4. import java.util.List;  
  5.   
  6. import com.test.action.base.BaseAction;  
  7. import com.test.dao.model.paymentcenter.OrderForm;  
  8. import com.test.dao.model.paymentcenter.OrderList;  
  9. import com.test.dao.model.paymentcenter.UserPurview;  
  10.   
  11. public class AlipayNotify extends BaseAction {  
  12.   
  13.     private static final long serialVersionUID = 1L;  
  14.     private String buyer_email;  
  15.     private long buyer_id;  
  16.     private String exterface;  
  17.     private String is_success;  
  18.     private String notify_id;  
  19.     private String notify_time;  
  20.     private String notify_type;  
  21.     private String out_trade_no;  
  22.     private String payment_type;  
  23.     private String seller_email;  
  24.     private long seller_id;  
  25.     private String subject;  
  26.     private float total_fee;  
  27.     private String trade_no;  
  28.     private String trade_status;  
  29.     private String sign;  
  30.     private String sign_type;  
  31.     private OrderForm of;  
  32.   
  33.     //……这里省去了get和set方法  
  34. ………………………………………………………………  
  35.   
  36.     // 处理支付宝传过来的参数信息  
  37.     public String alipayTrade() throws Exception {  
  38.   
  39.         if (this.is_success.equalsIgnoreCase("T")  
  40.                 && "TRADE_SUCCESS".equalsIgnoreCase(this.trade_status)) {  
  41.   
  42.             of = (OrderForm) orderFormService  
  43.                     .findOrderFormsByOut_trade_no(this.out_trade_no);  
  44.   
  45.             if (of != null) {  
  46.                 of.setTradeStatus(1);  
  47.                 of.setTradeNo(this.trade_no);  
  48.                 of.setNotifyTime(new Date());                  
  49.                 orderFormService.updateOldModel(of); // 更新  
  50.   
  51.                 List<OrderList> orderList = orderListService  
  52.                         .findOrderFormsByOutTradeNo(this.out_trade_no);  
  53.                 for (OrderList ol : orderList) {  
  54.                     //这里省去了处理订单逻辑代码……………………  
  55.                 }  
  56.             }  
  57.             //回调成功之后,给支付宝返回一个 "success" 字符就可以了  
  58.             return SUCCESS;  
  59.   
  60.         }  
  61.   
  62.         return "failure";  
  63.   
  64.     }  
  65. }  

 

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

 

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

 

分享到:
评论

相关推荐

    Java 支付宝即时到账支付流程图以及业务流程说明

    在电子商务环境中,支付宝作为一种广泛使用的第三方支付工具,其“即时到账”功能深受商家和用户的喜爱。该功能使得资金能够快速、安全地完成交易过程。下面将详细介绍支付宝即时到账支付的整个流程。 #### 二、...

    即时到账交易接口demo

    这个"即时到账交易接口demo"包含多个编程语言的实现,为开发者提供了学习和实践支付宝接口调用的平台,尤其适合初学者理解第三方支付集成。 在支付宝即时到账交易接口中,主要涉及以下几个关键知识点: 1. **接口...

    支付宝即时到账接口demo

    支付宝即时到账接口是一款用于快速处理在线支付业务的...总的来说,接入支付宝即时到账接口涉及到技术、安全和业务等多个方面,商家需要仔细阅读官方文档,理解接口规范,并在实践中不断优化支付流程,提升用户体验。

    支付宝微信监控收款支付源码即时到账通知

    总的来说,“支付宝微信监控收款支付源码即时到账通知”是一个涉及支付接口调用、数据处理、实时通知和免签收款技术的复杂项目。理解和实现这样的系统需要对支付平台的API、网络编程、服务器端开发以及支付安全有...

    最新PHP彩虹代刷网站源码免授权已对接即时到账支付接口带有安装教程.txt

    实现即时到账支付通常需要与第三方支付平台进行对接,例如支付宝、微信支付等。这些平台提供了丰富的API接口供开发者调用,通过简单的代码即可实现即时到账的功能。 ### 知识点四:安装教程的必要性 #### 4.1 安装...

    支付宝免签约即时到账全自动发收款货系统v3.2

    而免签约接口则跳过了这一过程,通过第三方提供的技术手段,实现了与支付宝的间接对接。这降低了商家的准入门槛,节省了时间和成本。 该系统的主要功能包括: 1. 自动化收款:当用户在商家平台完成购买或服务后,...

    JAVA支付宝在线支付及时到账

    在IT行业中,尤其是在电子商务和移动支付领域,"JAVA支付宝在线支付及时到账"是一个重要的技术话题...对于压缩包中的"JAVA对接第三方支付宝"文件,很可能是实现了上述功能的源代码或文档,是进一步学习和实践的好资源。

    Java开发优雅的轻量级支付模块集成支付对接支付整合全能第三方支付对接源代码

    通过Alipay SDK,我们可以实现支付宝的即时到账、手机网站支付、扫码支付等功能。2. Wechat Pay SDK:微信支付也提供了Java版的SDK,可以帮助我们实现微信支付功能。通过Wechat Pay SDK,我们可以实现微信的扫码支付...

    Java支付宝支付接口实现

    在本文中,我们将深入探讨如何...通过以上步骤,我们可以成功地在Java项目中实现支付宝即时到账接口的调用,从而为用户提供便捷、安全的在线支付体验。在实际开发中,还需要结合具体的业务需求,进行功能定制和优化。

    asp支付宝支付接口(绝对可用!!)

    支付宝,作为中国最知名的第三方支付平台之一,提供了多种API和SDK供开发者集成到自己的网站或应用中。由于官方文档可能主要针对PHP、Java、.NET等主流开发语言,对于ASP这种相对较少使用的语言,可能会缺乏直接的...

    即时到账批量退款有密接口

    即时到账批量退款有密接口是支付宝提供的一种...通过实践这个Java Web项目,开发者不仅可以掌握即时到账批量退款接口的使用,还能加深对支付宝支付接口和其他第三方支付平台交互的理解,为今后的开发工作打下坚实基础。

    支付宝双功能(担保、即时)接口

    支付宝作为中国领先的第三方支付平台,提供了丰富的支付接口供开发者使用,以实现在线交易的便捷与安全。本压缩包文件“支付宝双功能(担保、即时)接口”包含了与支付宝担保交易和即时到账两种支付模式相关的技术...

    java购物网站连接网上银行、支付宝接口

    2. **HTTP/HTTPS通信**:Java的`HttpURLConnection`类或者第三方库如Apache HttpClient可以用来发起HTTP请求,向支付平台发送支付请求并接收响应。对于HTTPS,需要处理SSL证书和安全握手。 3. **JSON/XML解析**:...

    jsp_direct_utf.rar_java支付_在线支付_支付宝_支付宝接口

    3. **支付宝**:支付宝是中国最大的第三方支付平台,由阿里巴巴集团创办。它提供包括在线购物、水电煤缴费、转账、手机充值、信用卡还款等多种支付服务。支付宝还提供了丰富的API和SDK供开发者接入其支付系统。 4. ...

    JavaWeb对接支付宝 连连 第三方支付

    本文将深入讲解如何使用JavaWeb技术对接支付宝和连连支付这两大第三方支付平台,以实现安全、便捷的在线交易。 首先,让我们从支付宝支付开始。支付宝是阿里巴巴集团下的一个全球领先的支付平台,提供了丰富的API...

    新火山支付即时到账系统源码 免签支付.zip

    免签支付通常指的是无需通过传统银行或第三方支付平台的正式签约流程,用户可以直接进行交易的模式。这可能涉及到的技术包括但不限于API接口开发、交易验证、资金清算等。 【描述解析】 描述中提到“资源仅用于学习...

    支付宝对接文档(for Java)

    在现代电子商务领域,支付宝作为国内领先的第三方支付平台,其接口对接工作对于开发者来说至关重要。本篇文章将详细解析基于Java的支付宝对接过程,包括核心概念、步骤以及如何利用提供的代码进行测试。 一、支付宝...

    支付宝在线支付接口(企业远程支付)

    在Java示例中,开发者通常会使用HttpURLConnection或者第三方库如Apache HttpClient发起网络请求,使用JSON-Parsing库如Jackson或Gson解析返回的数据,同时利用Java的Security API进行数字签名和验证。 5. VB.NET:...

    jsp支付宝接口源码

    【支付宝接口程序JSP版】是一个用于集成支付宝支付功能的Java服务器页面(JSP)代码示例。在电子商务和在线交易领域,支付宝接口是至关重要的,因为它...同时,这也是学习Java Web开发和第三方支付集成的一个实用案例。

Global site tag (gtag.js) - Google Analytics