alipay 的幾個內核功能文件:
======================================================================================================
AlipayFunction.javajavascript
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){ // 該文件存在於和應用服務器 啓動文件同一目錄下,文件名是alipay log加服務器時間 try { FileWriter writer = new FileWriter("D:\\alipay_log" + System.currentTimeMillis() + ".txt"); writer.write(sWord); writer.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 功能:用於防釣魚,調用接口query_timestamp來獲取時間戳的處理函數 * 注意:遠程解析XML出錯,與服務器是否支持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.javaphp
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; } /** * *功能:獲取遠程服務器ATN結果,驗證返回URL * @param notify_id 通知校驗ID * @return 服務器ATN結果 * 驗證結果集: * invalid命令參數不對 出現這個錯誤,請檢測返回處理中partner和key是否爲空 * true 返回正確信息 * false 請檢查防火牆或者是服務器阻止端口問題以及驗證時間是否超過一分鐘 */ public static String Verify(String notify_id){ //獲取遠程服務器ATN結果,驗證是不是支付寶服務器發來的請求 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; } /** * *功能:獲取遠程服務器ATN結果 * @param urlvalue 指定URL路徑地址 * @return 服務器ATN結果 * 驗證結果集: * invalid命令參數不對 出現這個錯誤,請檢測返回處理中partner和key是否爲空 * true 返回正確信息 * false 請檢查防火牆或者是服務器阻止端口問題以及驗證時間是否超過一分鐘 */ 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.javacss
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 交易過程當中服務器通知的頁面 要用 以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 + "\"/>"); //submit按鈕控件請不要含有name屬性 sbHtml.append("<input type=\"submit\" value=\"支付寶確認付款\"></form>"); sbHtml.append("<script>document.forms['alipaysubmit'].submit();</script>"); return sbHtml.toString(); } }
======================================================================================================
Md5Encrypt.javahtml
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,回調鏈接地址等一些設置java
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 交易過程當中服務器通知的頁面 要用 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"; // 訪問模式,根據本身的服務器是否支持ssl訪問,若支持請選擇https;若不支持請選擇http public static String transport = "http"; }
===============================================================================================================
下面是一個簡單的應用流程:
從JSP調用的就不說了,由於這也就只是傳給後臺你要買的東西是什麼,價格多少等一些參數。
這裏介紹一下後臺處理的:node
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.jspapi
<%@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),提交申請集成協助,咱們會有專業的技術工程師主動聯繫您協助解決, 您也能夠到支付寶論壇(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一旦被設置過,那麼它們就會成爲必填參數 //開啓防釣魚功能後,服務器、本機電腦必須支持遠程XML解析,請配置好該環境。 //建議使用POST方式請求數據 String anti_phishing_key = ""; //防釣魚時間戳 String exter_invoke_ip= ""; //獲取客戶端的IP地址,建議:編寫獲取客戶端IP地址的程序 //如: //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"; } }
============================================================================================安全
就這樣,支付寶的第三方即時到帳接口就算實現了。
本文轉自:http://blog.csdn.net/saindy5828/article/details/6800331