小程序微信支付開發流程記錄

我所在公司需要開發一款商城小程序,裏面需要用到微信支付,我負責裏面的下單功能,從小程序端到後臺的支付流程都是我自己開發的,由於我們組沒有人有開發微信支付的經驗,只能我自己琢磨,寫完之後總感覺有bug,但是不知道該怎麼改才合適,前前後後踩了不少的坑,自己有時間也研究了一下,改動了好幾次之後,我覺得目前的版本是最順暢,安全性也是最高的,我把目前的做法流程記錄一下,供他人蔘考。

  1. 首先要拿到收款的微信商戶號和支付祕鑰
  2. 確保拿到用戶的openid,獲取用戶的openid的流程大致是,在微信端使用wx.login獲取到code,將code傳到服務器換取openid,具體的流程可去官方文檔查看獲取openid
  3. 創建一個代付款的訂單,得到該訂單的單號
  4. 調用微信支付的統一下單接口微信支付統一下單,調用預下單接口的時候,要傳入一個正確的通知地址,進行預下單之後,得到一個prepay_id
  5. 用得到的prepay_id在js裏調用發起支付微信小程序支付
  6. 支付結果,微信會通過服務端通知到統一下單的時候的通知地址,當收到微信支付結果通知之後,需要對接收到的信息進行簽名驗證,確保驗證通過了,才更新訂單的狀態。

踩坑集合:

  1. 最開始的版本是直接在小程序微信支付的js的success回調裏,接收到了支付成功之後,再在js裏調用修改訂單狀態的接口,這樣做其實很不安全,因爲別人一旦拿到小程序的源碼,就可以直接跳過微信支付,直接調用修改訂單付款狀態的接口了,而且,如果客戶在微信支付完成之後,沒有點完成按鈕,也不會進入js的success回調裏面,所以需要通過服務端的通知接口,接收到支付結果通知之後,再在服務端修改訂單付款狀態,這樣就沒有問題了。
  2. 多次通知付款結果的問題。付款結果通知,微信會發起多次,一開始的時候,我發現同一個訂單會有多條一樣的付款日誌,沒找到問題,後面看了微信支付的官方文檔之後,才知道,爲了保證能接收到支付的結果,同一條訂單的支付結果會通知多次,需要開發者自己進行處理。
  3. 支付結果通知的安全性問題。因爲支付結果通知接收的地址是對外開放的,所以一旦地址泄露出去,有可能會被有心人調用,按照一定的參數格式調用,就能修改訂單的付款狀態,造成假的支付通知。所以在收到支付結果通知的時候,需要對接收到的數據按照簽名的規則進行簽名校驗,校驗通過了,才更新訂單的付款狀態。簽名需要用到支付祕鑰,只要祕鑰沒有泄露,就不會有安全性問題。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章