微信內網頁支付(微信 JSAPI 支付)的一點經驗

微信 JSAPI 支付的流程是:
服務端根據情況,向微信服務器發起“下單”請求。此處需要提供自己維護唯一的訂單號,並要求籤名加密。
根據“下單”反饋的微信提供的預支付“訂單號”,用剛纔下單請求參數同樣的簽名方式,對幾個基本數據進行封包簽名。
將簽名摘要,和這幾個基本數據,傳輸給 JavaScript 端。
JavaScript 通過微信內置對象的方法,喚起支付,並前端返回支付操作結果。
微信服務端會異步通知服務端,支付結果;此處通知地址是之前“下單”時指定的。
如果因故服務端沒有收到通知,可以主動發起查詢,使用之前向微信服務端“下單”時提供的自己維護唯一的訂單號。
.
經過試驗,我發現了這麼幾個有意思的現象。
首先,支付參數裏邊有時間戳,但哪怕過了 5 分鐘,這個時間戳及相關配套參數,依然可以用於支付。
.
其次,在微信預支付訂單過期之前,用時間戳生成支付參數,拖到訂單過期之後使用,報過期。這意味着微信可能根本就沒有去識別微信支付參數裏邊的時間戳,或許只檢查了非常基本的時間順序性:支付時間戳不得早於預支付下單時間(?未驗證)
.
第三,對於重複支付,具備如下現象。
○ 特殊發現:在微信登記訂單,是跟微信賬號綁定的。一個訂單,利用外部系統訂單號,換微信去查詢,依然是無此訂單。
一個微信號 pending ,用另一個微信號再發起支付,報訂單與微信號不一致。
一個微信號 cancel ,此微信單,同微信可以再支付,別的微信不能。
一個微信號 ok ,此微信單,同微信報已支付,別的微信報訂單與微信號不一致。
.
本文還發表於在其它網站
CSDN : https://blog.csdn.net/ShaneLooLi/article/details/104021907
ITeye : https://www.iteye.com/blog/surmounting-2512113
中國開源社區: https://my.oschina.net/shane1984/blog/3159557
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章