關於支付寶批量轉帳接口,我以爲有寫點什麼的必要了,畢竟在裏面走了不少彎路%>_<%,並且網上關於這個的資料少之又少,甚至有人都不知道有這個,寶寶真是快哭了(;′⌒`),下面我來一一詳細介紹。php
申請支付寶批量轉帳接口,如今支付寶的這個服務已經下架了,因此是找不到這個簽約的,需撥打 0571-88158090 這個電話去人工申請該接口。而後,他會問你須要的是哪種服務,一種是在他的平臺上,能夠上傳批量打款名單文件進行批量打款的,另外一種是提供一個接口給你,讓你能夠在本身的網站上就實現批量打款。html
固然,我選的是第二種,由於第一種就太簡單了,根本不會遇到不少問題O__O "…。固然,兩種服務,支付寶都是會收取打款手續費的,一筆按照打款金額的0.5%手續費收取,不足1元的按照1元收取,上限爲25元。通常大概會有五個工做日,能拿到這個接口。拿到接口以後(登陸商家帳戶,會看到簽約產品裏面有一個批量付款到支付寶,說明接口拿到了),能夠到支付寶文檔中心去下載demo,地址:doc.open.alipay.com/doc2/detail…前端
獲得下載包後,裏面有多種語言的demo,我使用的是batch_trans_notify-JAVA-UTF-8。拿到這個demo以後,很簡單,裏面的東西都不要動,只須要修改com.alipay.config.AlipayConfig的這幾個地方: partner屬性便是你的合做身份者ID---PID
key屬性便是商戶私鑰---安全檢驗碼
登陸商家帳戶有一個「查看PID、Key」的按鈕,能夠看到本身的PID和Key,對於Key,需注意幾點:vue
- 批量轉帳支持MD5加密的數據簽名,也支持RSA加密的數據簽名(固然,支付寶提供給咱們的demo默認只有MD5加密)
demo裏面有三個jsp頁面:java
index.jsp,負責填寫相關數據(具體格式demo註釋有寫)。c++
alipayapi.jsp,負責處理index.jsp傳入的數據,並調用AlipaySubmit文件相應方法,生成一個html格式的form表單並自動提交到支付寶。es6
notify_url.jsp,支付寶異步通知的頁面,須要在alipayapi.jsp頁面配置notify_url變量,若是,你的項目不在外網上面,支付寶訪問不到你的這個頁面,你可使用花生殼,使支付寶可以訪問到你的頁面。關於花生殼,不懂的就本身百度吧^_^。web
下面分別介紹這三個頁面。數據庫
index.jsp 付款帳號便是你的支付寶帳戶 付款帳戶名便是你的商戶名字 付款當天日期,new SimpleDateFormat("yyyyMMdd").format(new Date()) 批次號,new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) 付款總金額,因爲訂單是用表格批量顯示的,因此使用js操做dom,獲取勾選狀態的全部訂單的支付金額之和 付款筆數,同上,獲取勾選狀態的全部訂單數 付款詳細數據,仍然是使用js進行動態拼接勾選狀態的訂單的相關屬性。 注意:支付寶工做人員說,使用接口的話是沒法進行文件上傳的。因此儘管demo裏面有上傳文件的方法,可是仍是沒有什麼用處的。所以,就出現一個問題,那就是,將上面說到的AlipaySubmit文件生成的html格式的form表單提交到支付寶會存在一個Request Entity Too Large問題,也就是「請求中提供的數據量超過容量限制」。由於沒法上傳文件,所以,若是像支付寶所說的那樣,一次最多能夠批量處理1000條是沒法真正作到的,由於通過測試,在備註說明爲空的狀況下,都只能批量上傳大概100條,大概是4500-5000個字節╮(╯▽╰)╭。api
alipayapi.jsp 獲取index.jsp傳來的值,建議將付款帳號和帳戶名存放在AlipayConfig文件中,這樣就不用每次轉帳都要輸入這兩個值了。 該頁面會把傳來的值放入一個叫作sParaTemp的Map中,而後調用AlipaySubmit.buildRequest方法,將sParaTemp以相應的加密方式(MD5/RSA)加密爲數據簽名,並放在生成的html格式的form表單的一個名叫sign的input中。固然,這些咱們不去關心。buildRequest方法推薦使用post提交方式,也就是其第二個參數。而該方法的第三個參數是生成的html格式的form表單的提交按鈕的value值(嘿嘿,說得有點長^_^),固然,這個提交按鈕是display:none不可見的,因此這個東西要不要都無所謂的,反正是自動提交。 注意:該系統只能在IE下才能實現轉帳功能,這是由於支付寶還不支持其餘第三方瀏覽器進行轉帳。(若是瀏覽器爲極速模式,那麼轉帳時瀏覽器會自動切換成IE) 若是你的頁面嵌有iframe,且原窗口跳轉到alipayapi.jsp(window.location.href或者a標籤跳轉):
對於單筆轉帳,若是瀏覽器爲極速模式,那麼轉帳時瀏覽器不會自動切換成IE,因此,對於單筆交易,請切換爲IE,再點擊批量轉帳,不然可能出現「當前操做環境不支持支付寶控件」而致使不能轉帳的問題。
對於多筆轉帳(批量),請使用極速模式,瀏覽器在轉帳時會自動切換爲IE,不然,則可能出現批量轉帳申請提交失敗錯誤。
故,推薦使用新窗口跳轉到alipayapi.jsp,以上問題就都不會出現了。---window.open或者a標籤加target
String batch_no=request.getParameter("batch_no");
if(!batch_no.equals(application.getAttribute("batch_no"))){//判斷是否已對該批次作過處理(避免支付寶重複發送致使的重複處理)
application.setAttribute("batch_no",batch_no);
//寫上你的業務邏輯,如將成功的訂單數據庫狀態改成成功,失敗的改成失敗
}
out.println("success");//請不要修改或刪除
複製代碼
注意:對於success_details和fail_details,在該demo下可能會出現中文亂碼的狀況,你們能夠先設置request.setCharacterEncoding("gbk");而後再獲取success_details與fail_details。
到這裏,整個過程就完工了!下面是我作的一個小後臺demo,前端使用的是H-UI框架,後臺是servlet+mybatis。有須要源碼的朋友,請移步:download.csdn.net/detail/loca…