支付寶批量轉帳接口使用全過程一 一介紹

關於支付寶批量轉帳接口,我以爲有寫點什麼的必要了,畢竟在裏面走了不少彎路%>_<%,並且網上關於這個的資料少之又少,甚至有人都不知道有這個,寶寶真是快哭了(;′⌒`),下面我來一一詳細介紹。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

  1. 批量轉帳支持MD5加密的數據簽名,也支持RSA加密的數據簽名(固然,支付寶提供給咱們的demo默認只有MD5加密)
  1. 「查看PID、Key」看到的"默認加密"便是MD5私鑰,對於咱們的demo,把看到的這個私鑰填入key便可完成AlipayConfig的全部配置^_^
  2. 頁面下面還有個「RSA加密」,查看密鑰便是查看RSA公鑰(支付寶提供給咱們RSA密鑰生成器,用於生產公鑰與私鑰,相關操做詳見https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.lOJgU5&treeId=64&articleId=104740&docType=1)。
  3. 後面還有個「支付寶公鑰」。對於RSA加密,請將key改成private_key,並填入RSA密鑰生成器生產的私鑰,並在下面添加一個字符串「ali_public_key」,值爲上面說到的「支付寶公鑰」。而且,在最後一行將sign_type改成RSA。
  4. 最後須要找到Base64.java和RSA.java兩個文件才能完成RSA簽名,而demo裏面是沒有的,這兩個文件,你們能夠在支付寶實時到帳demo裏面去找,那裏面有^_^。

前臺方面

demo裏面有三個jsp頁面:java

  • index.jsp,負責填寫相關數據(具體格式demo註釋有寫)。c++

  • alipayapi.jsp,負責處理index.jsp傳入的數據,並調用AlipaySubmit文件相應方法,生成一個html格式的form表單並自動提交到支付寶。es6

  • notify_url.jsp,支付寶異步通知的頁面,須要在alipayapi.jsp頁面配置notify_url變量,若是,你的項目不在外網上面,支付寶訪問不到你的這個頁面,你可使用花生殼,使支付寶可以訪問到你的頁面。關於花生殼,不懂的就本身百度吧^_^。web

下面分別介紹這三個頁面。數據庫

  1. 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

  2. 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

  1. notify_url.jsp 異步通知頁面,通常在輸入密碼、點擊轉帳後2-5分鐘,支付寶會根據以前設定的notify_url找到該頁面,進行異步通知。異步通知,便是支付寶自動請求該notify_url,並將轉帳處理結果帶入到該頁面,該頁面進行相應處理後,進行out.println("success")輸出,支付寶便知道你已經收到了它的通知,便再也不繼續通知(不然會每隔一段時間會繼續通知)。而整個過程都是異步的,即不會形成任何程序或頁面的阻塞、等待。 相應的通知結果參數在 doc.open.alipay.com/doc2/detail… 可查閱。主要參數爲success_details,fail_details,batch_no,首先AlipayNotify.verify(params)方法會將返回的全部參數params進行數據簽名,以確認是不是支付寶發來的消息,確認成功後,咱們就能夠在下面寫上咱們本身的業務邏輯代碼。 業務邏輯代碼如:
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…

相關文章
相關標籤/搜索