[前車之賤] 7天準(cai)備(keng)支付項目,5分鐘教會你

項目背景

最近我在爲我公司優達學城的支付項目重構作準備,不可避免的須要對接支付寶和微信。
因爲在調研和寫demo的過程當中,遇到了不少的問題,除了官方文檔,網上的資料又十分稀缺(特別是對於Java, PHP和.Net之外的語言,由於沒有官方提供的SDK,全部邏輯都要本身寫,我使用的是Golang),所以寫下此文願能幫助到你們。若是有不正確和但願繼續補充的地方也但願在評論中指出。php

方案選定

對於web應用來講,我採用了微信掃碼支付,支付寶電腦網站支付的方案。因爲微信官方提供了兩種掃碼支付的方案,我選擇第二種,由於這樣就能和支付寶的的支付邏輯統一。前端

流程圖

流程說明

  1. 用戶下單。
  2. 服務器收到請求,生成惟一的訂單號,而且帶上接口要求的參數和簽名,發送請求。git

    1. 支付簽名github

      • 微信支付簽名我選擇MD5,我相信MD5各個語言都支持並且都很方便,這裏就不贅述。
      • 支付寶簽名推薦RSA2。這裏寫下Golang版本的核心簽名方法。web

        // 使用sha256
        h := sha256.New()
        h.Write(data)
        d := h.Sum(nil)
        sign := rsa.SignPKCS1v15(rand.Reader, r.PrivateKey, crypto.SHA256, d)複製代碼

        完整代碼能夠移步個人Gistapi

    2. 發送請求
      • 微信和支付寶要求的都是POST請求。文檔沒有直接說明是POST仍是其餘方法,我是經過閱讀文檔提供的demo的代碼和源碼知道的,在開發支付寶的時候我一直覺得是GET請求,全部的參數都是param,致使我浪費了挺多時間
      • 微信的Post Body是xml格式,到統一下單的API,注意帶上headerContent-Type: text/xml
      • 支付寶的POST Body是Form表單,個人測試是以x-www-form-urlencoded的形式提交,可以得到正確的響應。
  3. 將支付供應商的返回的數據(支付寶是HTML代碼;微信是二維碼連接,須要根據連接內容生成二維碼)在前端渲染顯示給用戶。
  4. 用戶支付訂單,而後用戶的支付App會通知支付供應商的服務器。
  5. 用戶支付成功,支付供應商會調用商戶提供的回調API,通知用戶是否支付成功。(若是支付失敗,須要調用訂單關閉接口)。
  6. 驗證調用的請求是否合法,處理內部邏輯,而且返回對應的響應,支付供應商會根據響應決定是否再次發送回調請求。
  7. 若有須要,能夠調用訂單查詢API,檢查訂單狀態。

沙盒模式測試(重要)

  1. 支付寶的沙盒模式,你必須先下載支付寶提供的沙盒模式的App才能測試。還能夠參考論壇上這篇《如何使用沙箱環境測試手機網站》
  2. 微信的沙盒模式,必須按照驗收文檔的步驟來作。我有一段時間發現本身無論怎麼樣都沒法測試成功,後面在一個地方看到,必須用驗收文檔的金額來測試,也就是3.01元。

付款金額單位差別(重要)

  • 微信的單位是分,所以3.01元,提交的時候應該是301。我一直沒注意這個,結果沙盒測試時候一直過不了。最後知道是這個緣由的時候,我給本身灌了一瓶82年的可樂。我只能怪本身太年輕。
    bash

  • 支付寶單位爲元,精確到小數點後兩位,取值範圍[0.01,100000000]。服務器

總結

  • 在作支付開發的時候,先仔細閱讀文檔,想清楚步驟再開發。磨刀不誤砍柴工。
  • 支付寶和微信支付的開發團隊若是看到這篇文章,但願能把文檔再潤色一下。文檔不是給開發者設置障礙,而是提供幫助,讓開發者快速完成開發。

小福利

人工智能anywhere的時代,咱們不但願若干年後的30歲是否要轉行再也不寫代碼,咱們不但願糾結於40歲由於落伍而被時代淘汰。咱們都但願過上本身喜歡的生活打王者去旅行。那就讓咱們一塊兒來組隊學習Google認證的機器學習,再也不作代碼的「搬運工」,可以把握將來的是如今的你。
微信

相關文章
相關標籤/搜索