摘要:附微信支付流程微信支付流程和小程序的支付流程基本一致,需要注意兩點需要在微信商戶平臺配置支付目錄,只有跳轉(zhuǎn)到了支付目錄的地址,才能發(fā)起微信支付。
我所在公司需要開發(fā)一款商城小程序,里面需要用到微信支付,我負責里面的下單功能,從小程序端到后臺的支付流程都是我自己開發(fā)的,由于我們組沒有人有開發(fā)微信支付的經(jīng)驗,很多東西都還不怎么明白,但是沒辦法,只能我自己琢磨,寫完之后總感覺有bug,但是不知道該怎么改才合適,前前后后踩了不少的坑,自己有時間也研究了一下,改動了好幾次之后,我覺得目前的版本是最順暢,安全性也是最高的,我把目前的做法流程記錄一下,供他人參考。
首先要拿到收款的微信商戶號和支付秘鑰
確保拿到用戶的openid,獲取用戶的openid的流程大致是,在微信端使用wx.login獲取到code,將code傳到服務(wù)器換取openid,具體的流程可去官方文檔查看獲取openid
創(chuàng)建一個代付款的訂單,得到該訂單的單號
在服務(wù)端調(diào)用微信支付的統(tǒng)一下單接口微信支付統(tǒng)一下單,( 調(diào)用預(yù)下單接口的時候,要傳入一個正確的通知地址,字段名稱是notify_url,這個地址是我們自己寫的接口地址,用于接收微信支付結(jié)果通知,然后更新訂單狀態(tài) ),進行預(yù)下單之后,得到一個prepay_id
用得到的prepay_id在js里調(diào)用發(fā)起支付微信小程序支付
支付結(jié)果,微信會通過服務(wù)端通知到統(tǒng)一下單的時候的通知地址,當收到微信支付結(jié)果通知之后,需要對接收到的信息進行簽名驗證,確保驗證通過了,才更新訂單的狀態(tài)。
踩坑集合:
最開始的版本是直接在小程序微信支付的js的success回調(diào)里,接收到了支付成功之后,再在js里調(diào)用修改訂單狀態(tài)的接口,這樣做其實很不安全,因為別人一旦拿到小程序的源碼,就可以直接跳過微信支付,直接調(diào)用修改訂單付款狀態(tài)的接口了,而且,如果客戶在微信支付完成之后,沒有點完成按鈕,也不會進入js的success回調(diào)里面,所以需要通過服務(wù)端的通知接口,接收到支付結(jié)果通知之后,再在服務(wù)端修改訂單付款狀態(tài),這樣就沒有問題了。
多次通知付款結(jié)果的問題。付款結(jié)果通知,微信會發(fā)起多次,一開始的時候,我發(fā)現(xiàn)同一個訂單會有多條一樣的付款日志,沒找到問題,后面看了微信支付的官方文檔之后,才知道,為了保證能接收到支付的結(jié)果,同一條訂單的支付結(jié)果會通知多次,需要開發(fā)者自己進行處理。
支付結(jié)果通知的安全性問題。因為支付結(jié)果通知接收的地址是對外開放的,所以一旦地址泄露出去,有可能會被有心人調(diào)用,按照一定的參數(shù)格式調(diào)用,就能修改訂單的付款狀態(tài),造成假的支付通知。所以在收到支付結(jié)果通知的時候,需要對接收到的數(shù)據(jù)按照簽名的規(guī)則進行簽名校驗,校驗通過了,才更新訂單的付款狀態(tài)。簽名需要用到支付秘鑰,只要秘鑰沒有泄露,就不會有安全性問題。
微信支付的秘鑰不要讀到前端。因為我們的接口分了好多地方讀取,所以在進行微信統(tǒng)一下單的時候,有把支付秘鑰在小程序的js頁面里讀出來,再在js里調(diào)統(tǒng)一下單的接口,從安全性的角度上來看,這樣不夠安全,支付秘鑰的讀取和傳輸應(yīng)該只在后端操作,不應(yīng)該讀到前端,當然讀到前端也沒有問題,但是可以改的話最好改一下。
附:微信JSAPI支付流程
微信JSAPI支付流程和小程序的支付流程基本一致,需要注意兩點:
需要在微信商戶平臺配置支付目錄,只有跳轉(zhuǎn)到了支付目錄的地址,才能發(fā)起微信支付。
網(wǎng)頁需要獲取openid需要進行一次頁面跳轉(zhuǎn),需要用戶對網(wǎng)頁授權(quán)之后,才能獲取到code,獲取到code之后,再使用code獲取到openid,再進行統(tǒng)一下單預(yù)支付,其他流程就和小程序一致。因為在網(wǎng)頁里要獲取到openid必須要進行一次頁面跳轉(zhuǎn)才能獲取到openid,所以我建議可以在訂單確認頁面,確認好信息之后,先下好待付款的訂單,得到訂單號之后再跳轉(zhuǎn),跳轉(zhuǎn)到支付頁面的時候,進行獲取openid的操作,再進行下面的操作即可。
獲取openid參考微信網(wǎng)頁授權(quán)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/101416.html
摘要:背景最近項目需要上線支付寶小程序,同時需要走用戶的授權(quán)流程完成用戶信息的存儲,以前做過微信小程序的開發(fā),本以為實現(xiàn)授權(quán)的過程是很簡單的事情,但是再實現(xiàn)的過程中還是遇到了不少的坑,因此記錄一下實現(xiàn)的過程學(xué)到的知識支付寶開放接口的調(diào)用模式以及實 背景 最近項目需要上線支付寶小程序,同時需要走用戶的授權(quán)流程完成用戶信息的存儲,以前做過微信小程序的開發(fā),本以為實現(xiàn)授權(quán)的過程是很簡單的事情,但是...
摘要:使用觸發(fā)器自動根據(jù)微信支付回調(diào)更新可以保證無論何種情況下,數(shù)據(jù)中保存的都是最終用戶實際支付的金額。想要實現(xiàn)這個功能,則要將觸發(fā)器和云函數(shù)進行搭配使用了。 showImg(https://segmentfault.com/img/remote/1460000018649967?w=2160&h=918);本文主要側(cè)重于講述小程序在線支付功能中的編程思想和編程模式,并在必要的地方提供關(guān)鍵代...
摘要:本文是淺析微信支付系列文章的第二篇,主要講解一下普通商戶接入的支付方式以及其中的不同之處。淺析微信支付前篇大綱微信支付是集成在微信客戶端的支付功能,用戶可以通過手機完成快速的支付流程。目前微信支付支持手機系統(tǒng)有蘋果安卓和。 本文是【淺析微信支付】系列文章的第二篇,主要講解一下普通商戶接入的支付方式以及其中的不同之處。 上篇文章講了本系列的大綱,沒有看過的朋友們可以看一下。 淺析微信支...
摘要:淺析微信支付前篇大綱本文是淺析微信支付系列文章的第一篇,主要會介紹一下為何寫下這個系列以及對于微信支付的一點小經(jīng)驗,與君共勉。下面講一下我是如何去學(xué)習(xí)微信支付的。 淺析微信支付:前篇大綱 本文是【淺析微信支付】系列文章的第一篇,主要會介紹一下為何寫下這個系列以及對于微信支付的一點小經(jīng)驗,與君共勉。 以下會分幾個步驟講一下我學(xué)習(xí)微信支付的過程,也是一部辛酸史,也是希望朋友們不要再次跌進...
閱讀 1842·2021-09-22 15:55
閱讀 3532·2021-09-07 10:26
閱讀 638·2019-08-30 15:54
閱讀 693·2019-08-29 16:34
閱讀 847·2019-08-26 14:04
閱讀 3270·2019-08-26 11:47
閱讀 2142·2019-08-26 11:33
閱讀 2300·2019-08-23 15:17