微信支付與支付寶支付java開發注意事項


說明:這里只涉及到微信支付和淘寶支付

以官網的接口為准,主要關注【網關】、【接口】、【參數】【加密方式】【簽名】【回調】

第一步,了解自己的項目要集成的支付方式

常見的有掃碼支付、網頁支付、APP支付。

第二步,了解支付商(微信/支付寶)的支付接口

微信和支付寶的接口所需要的參數內容大致是一樣的,不同的在於參數名,簽名方式不一樣

其中掃碼支付和網頁支付的接口是同一個,因為網頁支付是可以通過APP掃碼支付和登錄支付賬號進行支付的;而APP支付的接口是另一個

 

微信支付開發流程:

關鍵的配置參數有:【支付網關】、【appid】、【私鑰】、【簽名方式】、【回調地址】、【商戶號】、【簽名】

支付參數有:【訂單號】、【訂單金額】、【訂單描述】

微信的簽名方式目前規定使用的是MD5

回調地址:POST請求方式,必須是公網可訪問(可以是IP也可以是域名),不能帶任何參數、回調的參數要以流的方式進行接收,且為XML格式;

私鑰:用於簽名,簽名的目的就是加密數據,防止交易數據被篡改。

 

流程

  1. 打包參數(根據統一下單接口的要求提供必需參數)

所有參數以key=value方式存在,各參數之間&方式連接,最后用私鑰進行MD5加密,然后將得到的簽名以sginkey放入到參數的最后面,並轉為XML格式字符串。

  1. 統一下單

(1) 這一步最主要的用途就是得到支付接口所需要的prepay_id

(2) POST方式發送http請求,所有參數要轉為XML格式串

  1. 打包參數(根據支付接口的要求提供必需參數)

所有參數以key=value方式存在,各參數之間&方式連接,最后用私鑰進行MD5加密,然后將得到的簽名以sginkey放入到參數的最后面。

  1. 調用支付接口

 

支付寶支付開發流程:

  1. 支付寶比微信要簡單些,因為支付寶對簽名進行了封裝,只需要把參數打包,調用方式就進行了簽名等必要操作(微信支付也可以按此方式自己進行封裝),返回的串可以直接給支付接口。
  2. 封裝的接口有sdkExecutepageExecute,當支付方式為APP時,調用sdkExecute,當為NATIVE時調用pageExecute
  3. 簽名:使用RSA2

 

 

開發時遇到的問題(微信的要仔細些,坑多)

 

  1. 因參數名不對,導致失敗

微信的一個坑:微信的統一下單與支付接口,某些參數名不一樣,而實際表示的內容是一樣的。

比如商戶號:統一下單中是mch_id,而支付接口中是partnerid

  1. 因簽名加密方式不對,導致失敗

微信的一個坑:微信提供的demo中,如果不是沙箱環境,就使用HMACSHA256的加密方式進行簽名,而實際生產環境中是要使用MD5的,且兩次加密的方式必需一致。MD5加密后的串是32位,HMACSHA256加密后的串是64位,可以通過這個差別來判斷出前后簽名使用的加密方式是否一致。

  1. 回調處理業務邏輯

回調時要做的幾件事:

  1. 驗證簽名
  2. 簽名驗證通過后,再進行訂單號,商戶號,訂單金額,appid的一致性驗證

參數名不一樣:因為我開始是將微信和支付寶的回調處理業務邏輯放在一起的,而微信和支付寶返回的參數名是不一樣的,所以最好還是分開處理

訂單金額單位不一樣:微信是分,支付寶是元。所以在處理時,我統一將單位換算為分,那么在接收訂單金額時,支付寶返回的就有可能是帶小數點的,在處理時就用到了Double去處理,Double處理后的數據是帶了小數點,我當時在做訂單金額比較時,先用Integer對數據進行轉換后再相減,Integer對帶了小數點的數字是轉換不了的(而且當時后台程序也沒報錯),所以這里要注意,后面我統一使用的是Double


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM